[
  {
    "path": ".claude/settings.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/claude-code-settings.json\",\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bun unused\"\n          },\n          {\n            \"type\": \"command\",\n            \"command\": \"bun lint\"\n          },\n          {\n            \"type\": \"command\",\n            \"command\": \"bun types\"\n          }\n        ]\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": ".claude/skills/react-best-practices/AGENTS.md",
    "content": "# React Best Practices\n\n**Version 0.1.0**  \nVercel Engineering  \nJanuary 2026\n\n> **Note:**  \n> This document is mainly for agents and LLMs to follow when maintaining,  \n> generating, or refactoring React and Next.js codebases at Vercel. Humans  \n> may also find it useful, but guidance here is optimized for automation  \n> and consistency by AI-assisted workflows.\n\n---\n\n## Abstract\n\nComprehensive performance optimization guide for React and Next.js applications, designed for AI agents and LLMs. Contains 40+ rules across 8 categories, prioritized by impact from critical (eliminating waterfalls, reducing bundle size) to incremental (advanced patterns). Each rule includes detailed explanations, real-world examples comparing incorrect vs. correct implementations, and specific impact metrics to guide automated refactoring and code generation.\n\n---\n\n## Table of Contents\n\n1. [Eliminating Waterfalls](#1-eliminating-waterfalls) — **CRITICAL**\n   - 1.1 [Defer Await Until Needed](#11-defer-await-until-needed)\n   - 1.2 [Dependency-Based Parallelization](#12-dependency-based-parallelization)\n   - 1.3 [Prevent Waterfall Chains in API Routes](#13-prevent-waterfall-chains-in-api-routes)\n   - 1.4 [Promise.all() for Independent Operations](#14-promiseall-for-independent-operations)\n   - 1.5 [Strategic Suspense Boundaries](#15-strategic-suspense-boundaries)\n2. [Bundle Size Optimization](#2-bundle-size-optimization) — **CRITICAL**\n   - 2.1 [Avoid Barrel File Imports](#21-avoid-barrel-file-imports)\n   - 2.2 [Conditional Module Loading](#22-conditional-module-loading)\n   - 2.3 [Defer Non-Critical Third-Party Libraries](#23-defer-non-critical-third-party-libraries)\n   - 2.4 [Dynamic Imports for Heavy Components](#24-dynamic-imports-for-heavy-components)\n   - 2.5 [Preload Based on User Intent](#25-preload-based-on-user-intent)\n3. [Server-Side Performance](#3-server-side-performance) — **HIGH**\n   - 3.1 [Cross-Request LRU Caching](#31-cross-request-lru-caching)\n   - 3.2 [Minimize Serialization at RSC Boundaries](#32-minimize-serialization-at-rsc-boundaries)\n   - 3.3 [Parallel Data Fetching with Component Composition](#33-parallel-data-fetching-with-component-composition)\n   - 3.4 [Per-Request Deduplication with React.cache()](#34-per-request-deduplication-with-reactcache)\n   - 3.5 [Use after() for Non-Blocking Operations](#35-use-after-for-non-blocking-operations)\n4. [Client-Side Data Fetching](#4-client-side-data-fetching) — **MEDIUM-HIGH**\n   - 4.1 [Deduplicate Global Event Listeners](#41-deduplicate-global-event-listeners)\n   - 4.2 [Use SWR for Automatic Deduplication](#42-use-swr-for-automatic-deduplication)\n5. [Re-render Optimization](#5-re-render-optimization) — **MEDIUM**\n   - 5.1 [Defer State Reads to Usage Point](#51-defer-state-reads-to-usage-point)\n   - 5.2 [Extract to Memoized Components](#52-extract-to-memoized-components)\n   - 5.3 [Narrow Effect Dependencies](#53-narrow-effect-dependencies)\n   - 5.4 [Subscribe to Derived State](#54-subscribe-to-derived-state)\n   - 5.5 [Use Functional setState Updates](#55-use-functional-setstate-updates)\n   - 5.6 [Use Lazy State Initialization](#56-use-lazy-state-initialization)\n   - 5.7 [Use Transitions for Non-Urgent Updates](#57-use-transitions-for-non-urgent-updates)\n6. [Rendering Performance](#6-rendering-performance) — **MEDIUM**\n   - 6.1 [Animate SVG Wrapper Instead of SVG Element](#61-animate-svg-wrapper-instead-of-svg-element)\n   - 6.2 [CSS content-visibility for Long Lists](#62-css-content-visibility-for-long-lists)\n   - 6.3 [Hoist Static JSX Elements](#63-hoist-static-jsx-elements)\n   - 6.4 [Optimize SVG Precision](#64-optimize-svg-precision)\n   - 6.5 [Prevent Hydration Mismatch Without Flickering](#65-prevent-hydration-mismatch-without-flickering)\n   - 6.6 [Use Activity Component for Show/Hide](#66-use-activity-component-for-showhide)\n   - 6.7 [Use Explicit Conditional Rendering](#67-use-explicit-conditional-rendering)\n7. [JavaScript Performance](#7-javascript-performance) — **LOW-MEDIUM**\n   - 7.1 [Batch DOM CSS Changes](#71-batch-dom-css-changes)\n   - 7.2 [Build Index Maps for Repeated Lookups](#72-build-index-maps-for-repeated-lookups)\n   - 7.3 [Cache Property Access in Loops](#73-cache-property-access-in-loops)\n   - 7.4 [Cache Repeated Function Calls](#74-cache-repeated-function-calls)\n   - 7.5 [Cache Storage API Calls](#75-cache-storage-api-calls)\n   - 7.6 [Combine Multiple Array Iterations](#76-combine-multiple-array-iterations)\n   - 7.7 [Early Length Check for Array Comparisons](#77-early-length-check-for-array-comparisons)\n   - 7.8 [Early Return from Functions](#78-early-return-from-functions)\n   - 7.9 [Hoist RegExp Creation](#79-hoist-regexp-creation)\n   - 7.10 [Use Loop for Min/Max Instead of Sort](#710-use-loop-for-minmax-instead-of-sort)\n   - 7.11 [Use Set/Map for O(1) Lookups](#711-use-setmap-for-o1-lookups)\n   - 7.12 [Use toSorted() Instead of sort() for Immutability](#712-use-tosorted-instead-of-sort-for-immutability)\n8. [Advanced Patterns](#8-advanced-patterns) — **LOW**\n   - 8.1 [Store Event Handlers in Refs](#81-store-event-handlers-in-refs)\n   - 8.2 [useLatest for Stable Callback Refs](#82-uselatest-for-stable-callback-refs)\n\n---\n\n## 1. Eliminating Waterfalls\n\n**Impact: CRITICAL**\n\nWaterfalls are the #1 performance killer. Each sequential await adds full network latency. Eliminating them yields the largest gains.\n\n### 1.1 Defer Await Until Needed\n\n**Impact: HIGH (avoids blocking unused code paths)**\n\nMove `await` operations into the branches where they're actually used to avoid blocking code paths that don't need them.\n\n**Incorrect: blocks both branches**\n\n```typescript\nasync function handleRequest(userId: string, skipProcessing: boolean) {\n  const userData = await fetchUserData(userId)\n  \n  if (skipProcessing) {\n    // Returns immediately but still waited for userData\n    return { skipped: true }\n  }\n  \n  // Only this branch uses userData\n  return processUserData(userData)\n}\n```\n\n**Correct: only blocks when needed**\n\n```typescript\nasync function handleRequest(userId: string, skipProcessing: boolean) {\n  if (skipProcessing) {\n    // Returns immediately without waiting\n    return { skipped: true }\n  }\n  \n  // Fetch only when needed\n  const userData = await fetchUserData(userId)\n  return processUserData(userData)\n}\n```\n\n**Another example: early return optimization**\n\n```typescript\n// Incorrect: always fetches permissions\nasync function updateResource(resourceId: string, userId: string) {\n  const permissions = await fetchPermissions(userId)\n  const resource = await getResource(resourceId)\n  \n  if (!resource) {\n    return { error: 'Not found' }\n  }\n  \n  if (!permissions.canEdit) {\n    return { error: 'Forbidden' }\n  }\n  \n  return await updateResourceData(resource, permissions)\n}\n\n// Correct: fetches only when needed\nasync function updateResource(resourceId: string, userId: string) {\n  const resource = await getResource(resourceId)\n  \n  if (!resource) {\n    return { error: 'Not found' }\n  }\n  \n  const permissions = await fetchPermissions(userId)\n  \n  if (!permissions.canEdit) {\n    return { error: 'Forbidden' }\n  }\n  \n  return await updateResourceData(resource, permissions)\n}\n```\n\nThis optimization is especially valuable when the skipped branch is frequently taken, or when the deferred operation is expensive.\n\n### 1.2 Dependency-Based Parallelization\n\n**Impact: CRITICAL (2-10× improvement)**\n\nFor operations with partial dependencies, use `better-all` to maximize parallelism. It automatically starts each task at the earliest possible moment.\n\n**Incorrect: profile waits for config unnecessarily**\n\n```typescript\nconst [user, config] = await Promise.all([\n  fetchUser(),\n  fetchConfig()\n])\nconst profile = await fetchProfile(user.id)\n```\n\n**Correct: config and profile run in parallel**\n\n```typescript\nimport { all } from 'better-all'\n\nconst { user, config, profile } = await all({\n  async user() { return fetchUser() },\n  async config() { return fetchConfig() },\n  async profile() {\n    return fetchProfile((await this.$.user).id)\n  }\n})\n```\n\nReference: [https://github.com/shuding/better-all](https://github.com/shuding/better-all)\n\n### 1.3 Prevent Waterfall Chains in API Routes\n\n**Impact: CRITICAL (2-10× improvement)**\n\nIn API routes and Server Actions, start independent operations immediately, even if you don't await them yet.\n\n**Incorrect: config waits for auth, data waits for both**\n\n```typescript\nexport async function GET(request: Request) {\n  const session = await auth()\n  const config = await fetchConfig()\n  const data = await fetchData(session.user.id)\n  return Response.json({ data, config })\n}\n```\n\n**Correct: auth and config start immediately**\n\n```typescript\nexport async function GET(request: Request) {\n  const sessionPromise = auth()\n  const configPromise = fetchConfig()\n  const session = await sessionPromise\n  const [config, data] = await Promise.all([\n    configPromise,\n    fetchData(session.user.id)\n  ])\n  return Response.json({ data, config })\n}\n```\n\nFor operations with more complex dependency chains, use `better-all` to automatically maximize parallelism (see Dependency-Based Parallelization).\n\n### 1.4 Promise.all() for Independent Operations\n\n**Impact: CRITICAL (2-10× improvement)**\n\nWhen async operations have no interdependencies, execute them concurrently using `Promise.all()`.\n\n**Incorrect: sequential execution, 3 round trips**\n\n```typescript\nconst user = await fetchUser()\nconst posts = await fetchPosts()\nconst comments = await fetchComments()\n```\n\n**Correct: parallel execution, 1 round trip**\n\n```typescript\nconst [user, posts, comments] = await Promise.all([\n  fetchUser(),\n  fetchPosts(),\n  fetchComments()\n])\n```\n\n### 1.5 Strategic Suspense Boundaries\n\n**Impact: HIGH (faster initial paint)**\n\nInstead of awaiting data in async components before returning JSX, use Suspense boundaries to show the wrapper UI faster while data loads.\n\n**Incorrect: wrapper blocked by data fetching**\n\n```tsx\nasync function Page() {\n  const data = await fetchData() // Blocks entire page\n  \n  return (\n    <div>\n      <div>Sidebar</div>\n      <div>Header</div>\n      <div>\n        <DataDisplay data={data} />\n      </div>\n      <div>Footer</div>\n    </div>\n  )\n}\n```\n\nThe entire layout waits for data even though only the middle section needs it.\n\n**Correct: wrapper shows immediately, data streams in**\n\n```tsx\nfunction Page() {\n  return (\n    <div>\n      <div>Sidebar</div>\n      <div>Header</div>\n      <div>\n        <Suspense fallback={<Skeleton />}>\n          <DataDisplay />\n        </Suspense>\n      </div>\n      <div>Footer</div>\n    </div>\n  )\n}\n\nasync function DataDisplay() {\n  const data = await fetchData() // Only blocks this component\n  return <div>{data.content}</div>\n}\n```\n\nSidebar, Header, and Footer render immediately. Only DataDisplay waits for data.\n\n**Alternative: share promise across components**\n\n```tsx\nfunction Page() {\n  // Start fetch immediately, but don't await\n  const dataPromise = fetchData()\n  \n  return (\n    <div>\n      <div>Sidebar</div>\n      <div>Header</div>\n      <Suspense fallback={<Skeleton />}>\n        <DataDisplay dataPromise={dataPromise} />\n        <DataSummary dataPromise={dataPromise} />\n      </Suspense>\n      <div>Footer</div>\n    </div>\n  )\n}\n\nfunction DataDisplay({ dataPromise }: { dataPromise: Promise<Data> }) {\n  const data = use(dataPromise) // Unwraps the promise\n  return <div>{data.content}</div>\n}\n\nfunction DataSummary({ dataPromise }: { dataPromise: Promise<Data> }) {\n  const data = use(dataPromise) // Reuses the same promise\n  return <div>{data.summary}</div>\n}\n```\n\nBoth components share the same promise, so only one fetch occurs. Layout renders immediately while both components wait together.\n\n**When NOT to use this pattern:**\n\n- Critical data needed for layout decisions (affects positioning)\n\n- SEO-critical content above the fold\n\n- Small, fast queries where suspense overhead isn't worth it\n\n- When you want to avoid layout shift (loading → content jump)\n\n**Trade-off:** Faster initial paint vs potential layout shift. Choose based on your UX priorities.\n\n---\n\n## 2. Bundle Size Optimization\n\n**Impact: CRITICAL**\n\nReducing initial bundle size improves Time to Interactive and Largest Contentful Paint.\n\n### 2.1 Avoid Barrel File Imports\n\n**Impact: CRITICAL (200-800ms import cost, slow builds)**\n\nImport directly from source files instead of barrel files to avoid loading thousands of unused modules. **Barrel files** are entry points that re-export multiple modules (e.g., `index.js` that does `export * from './module'`).\n\nPopular icon and component libraries can have **up to 10,000 re-exports** in their entry file. For many React packages, **it takes 200-800ms just to import them**, affecting both development speed and production cold starts.\n\n**Why tree-shaking doesn't help:** When a library is marked as external (not bundled), the bundler can't optimize it. If you bundle it to enable tree-shaking, builds become substantially slower analyzing the entire module graph.\n\n**Incorrect: imports entire library**\n\n```tsx\nimport { Check, X, Menu } from 'lucide-react'\n// Loads 1,583 modules, takes ~2.8s extra in dev\n// Runtime cost: 200-800ms on every cold start\n\nimport { Button, TextField } from '@mui/material'\n// Loads 2,225 modules, takes ~4.2s extra in dev\n```\n\n**Correct: imports only what you need**\n\n```tsx\nimport Check from 'lucide-react/dist/esm/icons/check'\nimport X from 'lucide-react/dist/esm/icons/x'\nimport Menu from 'lucide-react/dist/esm/icons/menu'\n// Loads only 3 modules (~2KB vs ~1MB)\n\nimport Button from '@mui/material/Button'\nimport TextField from '@mui/material/TextField'\n// Loads only what you use\n```\n\n**Alternative: Next.js 13.5+**\n\n```js\n// next.config.js - use optimizePackageImports\nmodule.exports = {\n  experimental: {\n    optimizePackageImports: ['lucide-react', '@mui/material']\n  }\n}\n\n// Then you can keep the ergonomic barrel imports:\nimport { Check, X, Menu } from 'lucide-react'\n// Automatically transformed to direct imports at build time\n```\n\nDirect imports provide 15-70% faster dev boot, 28% faster builds, 40% faster cold starts, and significantly faster HMR.\n\nLibraries commonly affected: `lucide-react`, `@mui/material`, `@mui/icons-material`, `@tabler/icons-react`, `react-icons`, `@headlessui/react`, `@radix-ui/react-*`, `lodash`, `ramda`, `date-fns`, `rxjs`, `react-use`.\n\nReference: [https://vercel.com/blog/how-we-optimized-package-imports-in-next-js](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js)\n\n### 2.2 Conditional Module Loading\n\n**Impact: HIGH (loads large data only when needed)**\n\nLoad large data or modules only when a feature is activated.\n\n**Example: lazy-load animation frames**\n\n```tsx\nfunction AnimationPlayer({ enabled }: { enabled: boolean }) {\n  const [frames, setFrames] = useState<Frame[] | null>(null)\n\n  useEffect(() => {\n    if (enabled && !frames && typeof window !== 'undefined') {\n      import('./animation-frames.js')\n        .then(mod => setFrames(mod.frames))\n        .catch(() => setEnabled(false))\n    }\n  }, [enabled, frames])\n\n  if (!frames) return <Skeleton />\n  return <Canvas frames={frames} />\n}\n```\n\nThe `typeof window !== 'undefined'` check prevents bundling this module for SSR, optimizing server bundle size and build speed.\n\n### 2.3 Defer Non-Critical Third-Party Libraries\n\n**Impact: MEDIUM (loads after hydration)**\n\nAnalytics, logging, and error tracking don't block user interaction. Load them after hydration.\n\n**Incorrect: blocks initial bundle**\n\n```tsx\nimport { Analytics } from '@vercel/analytics/react'\n\nexport default function RootLayout({ children }) {\n  return (\n    <html>\n      <body>\n        {children}\n        <Analytics />\n      </body>\n    </html>\n  )\n}\n```\n\n**Correct: loads after hydration**\n\n```tsx\nimport dynamic from 'next/dynamic'\n\nconst Analytics = dynamic(\n  () => import('@vercel/analytics/react').then(m => m.Analytics),\n  { ssr: false }\n)\n\nexport default function RootLayout({ children }) {\n  return (\n    <html>\n      <body>\n        {children}\n        <Analytics />\n      </body>\n    </html>\n  )\n}\n```\n\n### 2.4 Dynamic Imports for Heavy Components\n\n**Impact: CRITICAL (directly affects TTI and LCP)**\n\nUse `next/dynamic` to lazy-load large components not needed on initial render.\n\n**Incorrect: Monaco bundles with main chunk ~300KB**\n\n```tsx\nimport { MonacoEditor } from './monaco-editor'\n\nfunction CodePanel({ code }: { code: string }) {\n  return <MonacoEditor value={code} />\n}\n```\n\n**Correct: Monaco loads on demand**\n\n```tsx\nimport dynamic from 'next/dynamic'\n\nconst MonacoEditor = dynamic(\n  () => import('./monaco-editor').then(m => m.MonacoEditor),\n  { ssr: false }\n)\n\nfunction CodePanel({ code }: { code: string }) {\n  return <MonacoEditor value={code} />\n}\n```\n\n### 2.5 Preload Based on User Intent\n\n**Impact: MEDIUM (reduces perceived latency)**\n\nPreload heavy bundles before they're needed to reduce perceived latency.\n\n**Example: preload on hover/focus**\n\n```tsx\nfunction EditorButton({ onClick }: { onClick: () => void }) {\n  const preload = () => {\n    if (typeof window !== 'undefined') {\n      void import('./monaco-editor')\n    }\n  }\n\n  return (\n    <button\n      onMouseEnter={preload}\n      onFocus={preload}\n      onClick={onClick}\n    >\n      Open Editor\n    </button>\n  )\n}\n```\n\n**Example: preload when feature flag is enabled**\n\n```tsx\nfunction FlagsProvider({ children, flags }: Props) {\n  useEffect(() => {\n    if (flags.editorEnabled && typeof window !== 'undefined') {\n      void import('./monaco-editor').then(mod => mod.init())\n    }\n  }, [flags.editorEnabled])\n\n  return <FlagsContext.Provider value={flags}>\n    {children}\n  </FlagsContext.Provider>\n}\n```\n\nThe `typeof window !== 'undefined'` check prevents bundling preloaded modules for SSR, optimizing server bundle size and build speed.\n\n---\n\n## 3. Server-Side Performance\n\n**Impact: HIGH**\n\nOptimizing server-side rendering and data fetching eliminates server-side waterfalls and reduces response times.\n\n### 3.1 Cross-Request LRU Caching\n\n**Impact: HIGH (caches across requests)**\n\n`React.cache()` only works within one request. For data shared across sequential requests (user clicks button A then button B), use an LRU cache.\n\n**Implementation:**\n\n```typescript\nimport { LRUCache } from 'lru-cache'\n\nconst cache = new LRUCache<string, any>({\n  max: 1000,\n  ttl: 5 * 60 * 1000  // 5 minutes\n})\n\nexport async function getUser(id: string) {\n  const cached = cache.get(id)\n  if (cached) return cached\n\n  const user = await db.user.findUnique({ where: { id } })\n  cache.set(id, user)\n  return user\n}\n\n// Request 1: DB query, result cached\n// Request 2: cache hit, no DB query\n```\n\nUse when sequential user actions hit multiple endpoints needing the same data within seconds.\n\n**With Vercel's [Fluid Compute](https://vercel.com/docs/fluid-compute):** LRU caching is especially effective because multiple concurrent requests can share the same function instance and cache. This means the cache persists across requests without needing external storage like Redis.\n\n**In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching.\n\nReference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)\n\n### 3.2 Minimize Serialization at RSC Boundaries\n\n**Impact: HIGH (reduces data transfer size)**\n\nThe React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.\n\n**Incorrect: serializes all 50 fields**\n\n```tsx\nasync function Page() {\n  const user = await fetchUser()  // 50 fields\n  return <Profile user={user} />\n}\n\n'use client'\nfunction Profile({ user }: { user: User }) {\n  return <div>{user.name}</div>  // uses 1 field\n}\n```\n\n**Correct: serializes only 1 field**\n\n```tsx\nasync function Page() {\n  const user = await fetchUser()\n  return <Profile name={user.name} />\n}\n\n'use client'\nfunction Profile({ name }: { name: string }) {\n  return <div>{name}</div>\n}\n```\n\n### 3.3 Parallel Data Fetching with Component Composition\n\n**Impact: CRITICAL (eliminates server-side waterfalls)**\n\nReact Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.\n\n**Incorrect: Sidebar waits for Page's fetch to complete**\n\n```tsx\nexport default async function Page() {\n  const header = await fetchHeader()\n  return (\n    <div>\n      <div>{header}</div>\n      <Sidebar />\n    </div>\n  )\n}\n\nasync function Sidebar() {\n  const items = await fetchSidebarItems()\n  return <nav>{items.map(renderItem)}</nav>\n}\n```\n\n**Correct: both fetch simultaneously**\n\n```tsx\nasync function Header() {\n  const data = await fetchHeader()\n  return <div>{data}</div>\n}\n\nasync function Sidebar() {\n  const items = await fetchSidebarItems()\n  return <nav>{items.map(renderItem)}</nav>\n}\n\nexport default function Page() {\n  return (\n    <div>\n      <Header />\n      <Sidebar />\n    </div>\n  )\n}\n```\n\n**Alternative with children prop:**\n\n```tsx\nasync function Layout({ children }: { children: ReactNode }) {\n  const header = await fetchHeader()\n  return (\n    <div>\n      <div>{header}</div>\n      {children}\n    </div>\n  )\n}\n\nasync function Sidebar() {\n  const items = await fetchSidebarItems()\n  return <nav>{items.map(renderItem)}</nav>\n}\n\nexport default function Page() {\n  return (\n    <Layout>\n      <Sidebar />\n    </Layout>\n  )\n}\n```\n\n### 3.4 Per-Request Deduplication with React.cache()\n\n**Impact: MEDIUM (deduplicates within request)**\n\nUse `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.\n\n**Usage:**\n\n```typescript\nimport { cache } from 'react'\n\nexport const getCurrentUser = cache(async () => {\n  const session = await auth()\n  if (!session?.user?.id) return null\n  return await db.user.findUnique({\n    where: { id: session.user.id }\n  })\n})\n```\n\nWithin a single request, multiple calls to `getCurrentUser()` execute the query only once.\n\n### 3.5 Use after() for Non-Blocking Operations\n\n**Impact: MEDIUM (faster response times)**\n\nUse Next.js's `after()` to schedule work that should execute after a response is sent. This prevents logging, analytics, and other side effects from blocking the response.\n\n**Incorrect: blocks response**\n\n```tsx\nimport { logUserAction } from '@/app/utils'\n\nexport async function POST(request: Request) {\n  // Perform mutation\n  await updateDatabase(request)\n  \n  // Logging blocks the response\n  const userAgent = request.headers.get('user-agent') || 'unknown'\n  await logUserAction({ userAgent })\n  \n  return new Response(JSON.stringify({ status: 'success' }), {\n    status: 200,\n    headers: { 'Content-Type': 'application/json' }\n  })\n}\n```\n\n**Correct: non-blocking**\n\n```tsx\nimport { after } from 'next/server'\nimport { headers, cookies } from 'next/headers'\nimport { logUserAction } from '@/app/utils'\n\nexport async function POST(request: Request) {\n  // Perform mutation\n  await updateDatabase(request)\n  \n  // Log after response is sent\n  after(async () => {\n    const userAgent = (await headers()).get('user-agent') || 'unknown'\n    const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'\n    \n    logUserAction({ sessionCookie, userAgent })\n  })\n  \n  return new Response(JSON.stringify({ status: 'success' }), {\n    status: 200,\n    headers: { 'Content-Type': 'application/json' }\n  })\n}\n```\n\nThe response is sent immediately while logging happens in the background.\n\n**Common use cases:**\n\n- Analytics tracking\n\n- Audit logging\n\n- Sending notifications\n\n- Cache invalidation\n\n- Cleanup tasks\n\n**Important notes:**\n\n- `after()` runs even if the response fails or redirects\n\n- Works in Server Actions, Route Handlers, and Server Components\n\nReference: [https://nextjs.org/docs/app/api-reference/functions/after](https://nextjs.org/docs/app/api-reference/functions/after)\n\n---\n\n## 4. Client-Side Data Fetching\n\n**Impact: MEDIUM-HIGH**\n\nAutomatic deduplication and efficient data fetching patterns reduce redundant network requests.\n\n### 4.1 Deduplicate Global Event Listeners\n\n**Impact: LOW (single listener for N components)**\n\nUse `useSWRSubscription()` to share global event listeners across component instances.\n\n**Incorrect: N instances = N listeners**\n\n```tsx\nfunction useKeyboardShortcut(key: string, callback: () => void) {\n  useEffect(() => {\n    const handler = (e: KeyboardEvent) => {\n      if (e.metaKey && e.key === key) {\n        callback()\n      }\n    }\n    window.addEventListener('keydown', handler)\n    return () => window.removeEventListener('keydown', handler)\n  }, [key, callback])\n}\n```\n\nWhen using the `useKeyboardShortcut` hook multiple times, each instance will register a new listener.\n\n**Correct: N instances = 1 listener**\n\n```tsx\nimport useSWRSubscription from 'swr/subscription'\n\n// Module-level Map to track callbacks per key\nconst keyCallbacks = new Map<string, Set<() => void>>()\n\nfunction useKeyboardShortcut(key: string, callback: () => void) {\n  // Register this callback in the Map\n  useEffect(() => {\n    if (!keyCallbacks.has(key)) {\n      keyCallbacks.set(key, new Set())\n    }\n    keyCallbacks.get(key)!.add(callback)\n\n    return () => {\n      const set = keyCallbacks.get(key)\n      if (set) {\n        set.delete(callback)\n        if (set.size === 0) {\n          keyCallbacks.delete(key)\n        }\n      }\n    }\n  }, [key, callback])\n\n  useSWRSubscription('global-keydown', () => {\n    const handler = (e: KeyboardEvent) => {\n      if (e.metaKey && keyCallbacks.has(e.key)) {\n        keyCallbacks.get(e.key)!.forEach(cb => cb())\n      }\n    }\n    window.addEventListener('keydown', handler)\n    return () => window.removeEventListener('keydown', handler)\n  })\n}\n\nfunction Profile() {\n  // Multiple shortcuts will share the same listener\n  useKeyboardShortcut('p', () => { /* ... */ }) \n  useKeyboardShortcut('k', () => { /* ... */ })\n  // ...\n}\n```\n\n### 4.2 Use SWR for Automatic Deduplication\n\n**Impact: MEDIUM-HIGH (automatic deduplication)**\n\nSWR enables request deduplication, caching, and revalidation across component instances.\n\n**Incorrect: no deduplication, each instance fetches**\n\n```tsx\nfunction UserList() {\n  const [users, setUsers] = useState([])\n  useEffect(() => {\n    fetch('/api/users')\n      .then(r => r.json())\n      .then(setUsers)\n  }, [])\n}\n```\n\n**Correct: multiple instances share one request**\n\n```tsx\nimport useSWR from 'swr'\n\nfunction UserList() {\n  const { data: users } = useSWR('/api/users', fetcher)\n}\n```\n\n**For immutable data:**\n\n```tsx\nimport { useImmutableSWR } from '@/lib/swr'\n\nfunction StaticContent() {\n  const { data } = useImmutableSWR('/api/config', fetcher)\n}\n```\n\n**For mutations:**\n\n```tsx\nimport { useSWRMutation } from 'swr/mutation'\n\nfunction UpdateButton() {\n  const { trigger } = useSWRMutation('/api/user', updateUser)\n  return <button onClick={() => trigger()}>Update</button>\n}\n```\n\nReference: [https://swr.vercel.app](https://swr.vercel.app)\n\n---\n\n## 5. Re-render Optimization\n\n**Impact: MEDIUM**\n\nReducing unnecessary re-renders minimizes wasted computation and improves UI responsiveness.\n\n### 5.1 Defer State Reads to Usage Point\n\n**Impact: MEDIUM (avoids unnecessary subscriptions)**\n\nDon't subscribe to dynamic state (searchParams, localStorage) if you only read it inside callbacks.\n\n**Incorrect: subscribes to all searchParams changes**\n\n```tsx\nfunction ShareButton({ chatId }: { chatId: string }) {\n  const searchParams = useSearchParams()\n\n  const handleShare = () => {\n    const ref = searchParams.get('ref')\n    shareChat(chatId, { ref })\n  }\n\n  return <button onClick={handleShare}>Share</button>\n}\n```\n\n**Correct: reads on demand, no subscription**\n\n```tsx\nfunction ShareButton({ chatId }: { chatId: string }) {\n  const handleShare = () => {\n    const params = new URLSearchParams(window.location.search)\n    const ref = params.get('ref')\n    shareChat(chatId, { ref })\n  }\n\n  return <button onClick={handleShare}>Share</button>\n}\n```\n\n### 5.2 Extract to Memoized Components\n\n**Impact: MEDIUM (enables early returns)**\n\nExtract expensive work into memoized components to enable early returns before computation.\n\n**Incorrect: computes avatar even when loading**\n\n```tsx\nfunction Profile({ user, loading }: Props) {\n  const avatar = useMemo(() => {\n    const id = computeAvatarId(user)\n    return <Avatar id={id} />\n  }, [user])\n\n  if (loading) return <Skeleton />\n  return <div>{avatar}</div>\n}\n```\n\n**Correct: skips computation when loading**\n\n```tsx\nconst UserAvatar = memo(function UserAvatar({ user }: { user: User }) {\n  const id = useMemo(() => computeAvatarId(user), [user])\n  return <Avatar id={id} />\n})\n\nfunction Profile({ user, loading }: Props) {\n  if (loading) return <Skeleton />\n  return (\n    <div>\n      <UserAvatar user={user} />\n    </div>\n  )\n}\n```\n\n**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, manual memoization with `memo()` and `useMemo()` is not necessary. The compiler automatically optimizes re-renders.\n\n### 5.3 Narrow Effect Dependencies\n\n**Impact: LOW (minimizes effect re-runs)**\n\nSpecify primitive dependencies instead of objects to minimize effect re-runs.\n\n**Incorrect: re-runs on any user field change**\n\n```tsx\nuseEffect(() => {\n  console.log(user.id)\n}, [user])\n```\n\n**Correct: re-runs only when id changes**\n\n```tsx\nuseEffect(() => {\n  console.log(user.id)\n}, [user.id])\n```\n\n**For derived state, compute outside effect:**\n\n```tsx\n// Incorrect: runs on width=767, 766, 765...\nuseEffect(() => {\n  if (width < 768) {\n    enableMobileMode()\n  }\n}, [width])\n\n// Correct: runs only on boolean transition\nconst isMobile = width < 768\nuseEffect(() => {\n  if (isMobile) {\n    enableMobileMode()\n  }\n}, [isMobile])\n```\n\n### 5.4 Subscribe to Derived State\n\n**Impact: MEDIUM (reduces re-render frequency)**\n\nSubscribe to derived boolean state instead of continuous values to reduce re-render frequency.\n\n**Incorrect: re-renders on every pixel change**\n\n```tsx\nfunction Sidebar() {\n  const width = useWindowWidth()  // updates continuously\n  const isMobile = width < 768\n  return <nav className={isMobile ? 'mobile' : 'desktop'}>\n}\n```\n\n**Correct: re-renders only when boolean changes**\n\n```tsx\nfunction Sidebar() {\n  const isMobile = useMediaQuery('(max-width: 767px)')\n  return <nav className={isMobile ? 'mobile' : 'desktop'}>\n}\n```\n\n### 5.5 Use Functional setState Updates\n\n**Impact: MEDIUM (prevents stale closures and unnecessary callback recreations)**\n\nWhen updating state based on the current state value, use the functional update form of setState instead of directly referencing the state variable. This prevents stale closures, eliminates unnecessary dependencies, and creates stable callback references.\n\n**Incorrect: requires state as dependency**\n\n```tsx\nfunction TodoList() {\n  const [items, setItems] = useState(initialItems)\n  \n  // Callback must depend on items, recreated on every items change\n  const addItems = useCallback((newItems: Item[]) => {\n    setItems([...items, ...newItems])\n  }, [items])  // ❌ items dependency causes recreations\n  \n  // Risk of stale closure if dependency is forgotten\n  const removeItem = useCallback((id: string) => {\n    setItems(items.filter(item => item.id !== id))\n  }, [])  // ❌ Missing items dependency - will use stale items!\n  \n  return <ItemsEditor items={items} onAdd={addItems} onRemove={removeItem} />\n}\n```\n\nThe first callback is recreated every time `items` changes, which can cause child components to re-render unnecessarily. The second callback has a stale closure bug—it will always reference the initial `items` value.\n\n**Correct: stable callbacks, no stale closures**\n\n```tsx\nfunction TodoList() {\n  const [items, setItems] = useState(initialItems)\n  \n  // Stable callback, never recreated\n  const addItems = useCallback((newItems: Item[]) => {\n    setItems(curr => [...curr, ...newItems])\n  }, [])  // ✅ No dependencies needed\n  \n  // Always uses latest state, no stale closure risk\n  const removeItem = useCallback((id: string) => {\n    setItems(curr => curr.filter(item => item.id !== id))\n  }, [])  // ✅ Safe and stable\n  \n  return <ItemsEditor items={items} onAdd={addItems} onRemove={removeItem} />\n}\n```\n\n**Benefits:**\n\n1. **Stable callback references** - Callbacks don't need to be recreated when state changes\n\n2. **No stale closures** - Always operates on the latest state value\n\n3. **Fewer dependencies** - Simplifies dependency arrays and reduces memory leaks\n\n4. **Prevents bugs** - Eliminates the most common source of React closure bugs\n\n**When to use functional updates:**\n\n- Any setState that depends on the current state value\n\n- Inside useCallback/useMemo when state is needed\n\n- Event handlers that reference state\n\n- Async operations that update state\n\n**When direct updates are fine:**\n\n- Setting state to a static value: `setCount(0)`\n\n- Setting state from props/arguments only: `setName(newName)`\n\n- State doesn't depend on previous value\n\n**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, the compiler can automatically optimize some cases, but functional updates are still recommended for correctness and to prevent stale closure bugs.\n\n### 5.6 Use Lazy State Initialization\n\n**Impact: MEDIUM (wasted computation on every render)**\n\nPass a function to `useState` for expensive initial values. Without the function form, the initializer runs on every render even though the value is only used once.\n\n**Incorrect: runs on every render**\n\n```tsx\nfunction FilteredList({ items }: { items: Item[] }) {\n  // buildSearchIndex() runs on EVERY render, even after initialization\n  const [searchIndex, setSearchIndex] = useState(buildSearchIndex(items))\n  const [query, setQuery] = useState('')\n  \n  // When query changes, buildSearchIndex runs again unnecessarily\n  return <SearchResults index={searchIndex} query={query} />\n}\n\nfunction UserProfile() {\n  // JSON.parse runs on every render\n  const [settings, setSettings] = useState(\n    JSON.parse(localStorage.getItem('settings') || '{}')\n  )\n  \n  return <SettingsForm settings={settings} onChange={setSettings} />\n}\n```\n\n**Correct: runs only once**\n\n```tsx\nfunction FilteredList({ items }: { items: Item[] }) {\n  // buildSearchIndex() runs ONLY on initial render\n  const [searchIndex, setSearchIndex] = useState(() => buildSearchIndex(items))\n  const [query, setQuery] = useState('')\n  \n  return <SearchResults index={searchIndex} query={query} />\n}\n\nfunction UserProfile() {\n  // JSON.parse runs only on initial render\n  const [settings, setSettings] = useState(() => {\n    const stored = localStorage.getItem('settings')\n    return stored ? JSON.parse(stored) : {}\n  })\n  \n  return <SettingsForm settings={settings} onChange={setSettings} />\n}\n```\n\nUse lazy initialization when computing initial values from localStorage/sessionStorage, building data structures (indexes, maps), reading from the DOM, or performing heavy transformations.\n\nFor simple primitives (`useState(0)`), direct references (`useState(props.value)`), or cheap literals (`useState({})`), the function form is unnecessary.\n\n### 5.7 Use Transitions for Non-Urgent Updates\n\n**Impact: MEDIUM (maintains UI responsiveness)**\n\nMark frequent, non-urgent state updates as transitions to maintain UI responsiveness.\n\n**Incorrect: blocks UI on every scroll**\n\n```tsx\nfunction ScrollTracker() {\n  const [scrollY, setScrollY] = useState(0)\n  useEffect(() => {\n    const handler = () => setScrollY(window.scrollY)\n    window.addEventListener('scroll', handler, { passive: true })\n    return () => window.removeEventListener('scroll', handler)\n  }, [])\n}\n```\n\n**Correct: non-blocking updates**\n\n```tsx\nimport { startTransition } from 'react'\n\nfunction ScrollTracker() {\n  const [scrollY, setScrollY] = useState(0)\n  useEffect(() => {\n    const handler = () => {\n      startTransition(() => setScrollY(window.scrollY))\n    }\n    window.addEventListener('scroll', handler, { passive: true })\n    return () => window.removeEventListener('scroll', handler)\n  }, [])\n}\n```\n\n---\n\n## 6. Rendering Performance\n\n**Impact: MEDIUM**\n\nOptimizing the rendering process reduces the work the browser needs to do.\n\n### 6.1 Animate SVG Wrapper Instead of SVG Element\n\n**Impact: LOW (enables hardware acceleration)**\n\nMany browsers don't have hardware acceleration for CSS3 animations on SVG elements. Wrap SVG in a `<div>` and animate the wrapper instead.\n\n**Incorrect: animating SVG directly - no hardware acceleration**\n\n```tsx\nfunction LoadingSpinner() {\n  return (\n    <svg \n      className=\"animate-spin\"\n      width=\"24\" \n      height=\"24\" \n      viewBox=\"0 0 24 24\"\n    >\n      <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" />\n    </svg>\n  )\n}\n```\n\n**Correct: animating wrapper div - hardware accelerated**\n\n```tsx\nfunction LoadingSpinner() {\n  return (\n    <div className=\"animate-spin\">\n      <svg \n        width=\"24\" \n        height=\"24\" \n        viewBox=\"0 0 24 24\"\n      >\n        <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" />\n      </svg>\n    </div>\n  )\n}\n```\n\nThis applies to all CSS transforms and transitions (`transform`, `opacity`, `translate`, `scale`, `rotate`). The wrapper div allows browsers to use GPU acceleration for smoother animations.\n\n### 6.2 CSS content-visibility for Long Lists\n\n**Impact: HIGH (faster initial render)**\n\nApply `content-visibility: auto` to defer off-screen rendering.\n\n**CSS:**\n\n```css\n.message-item {\n  content-visibility: auto;\n  contain-intrinsic-size: 0 80px;\n}\n```\n\n**Example:**\n\n```tsx\nfunction MessageList({ messages }: { messages: Message[] }) {\n  return (\n    <div className=\"overflow-y-auto h-screen\">\n      {messages.map(msg => (\n        <div key={msg.id} className=\"message-item\">\n          <Avatar user={msg.author} />\n          <div>{msg.content}</div>\n        </div>\n      ))}\n    </div>\n  )\n}\n```\n\nFor 1000 messages, browser skips layout/paint for ~990 off-screen items (10× faster initial render).\n\n### 6.3 Hoist Static JSX Elements\n\n**Impact: LOW (avoids re-creation)**\n\nExtract static JSX outside components to avoid re-creation.\n\n**Incorrect: recreates element every render**\n\n```tsx\nfunction LoadingSkeleton() {\n  return <div className=\"animate-pulse h-20 bg-gray-200\" />\n}\n\nfunction Container() {\n  return (\n    <div>\n      {loading && <LoadingSkeleton />}\n    </div>\n  )\n}\n```\n\n**Correct: reuses same element**\n\n```tsx\nconst loadingSkeleton = (\n  <div className=\"animate-pulse h-20 bg-gray-200\" />\n)\n\nfunction Container() {\n  return (\n    <div>\n      {loading && loadingSkeleton}\n    </div>\n  )\n}\n```\n\nThis is especially helpful for large and static SVG nodes, which can be expensive to recreate on every render.\n\n**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, the compiler automatically hoists static JSX elements and optimizes component re-renders, making manual hoisting unnecessary.\n\n### 6.4 Optimize SVG Precision\n\n**Impact: LOW (reduces file size)**\n\nReduce SVG coordinate precision to decrease file size. The optimal precision depends on the viewBox size, but in general reducing precision should be considered.\n\n**Incorrect: excessive precision**\n\n```svg\n<path d=\"M 10.293847 20.847362 L 30.938472 40.192837\" />\n```\n\n**Correct: 1 decimal place**\n\n```svg\n<path d=\"M 10.3 20.8 L 30.9 40.2\" />\n```\n\n**Automate with SVGO:**\n\n```bash\nnpx svgo --precision=1 --multipass icon.svg\n```\n\n### 6.5 Prevent Hydration Mismatch Without Flickering\n\n**Impact: MEDIUM (avoids visual flicker and hydration errors)**\n\nWhen rendering content that depends on client-side storage (localStorage, cookies), avoid both SSR breakage and post-hydration flickering by injecting a synchronous script that updates the DOM before React hydrates.\n\n**Incorrect: breaks SSR**\n\n```tsx\nfunction ThemeWrapper({ children }: { children: ReactNode }) {\n  // localStorage is not available on server - throws error\n  const theme = localStorage.getItem('theme') || 'light'\n  \n  return (\n    <div className={theme}>\n      {children}\n    </div>\n  )\n}\n```\n\nServer-side rendering will fail because `localStorage` is undefined.\n\n**Incorrect: visual flickering**\n\n```tsx\nfunction ThemeWrapper({ children }: { children: ReactNode }) {\n  const [theme, setTheme] = useState('light')\n  \n  useEffect(() => {\n    // Runs after hydration - causes visible flash\n    const stored = localStorage.getItem('theme')\n    if (stored) {\n      setTheme(stored)\n    }\n  }, [])\n  \n  return (\n    <div className={theme}>\n      {children}\n    </div>\n  )\n}\n```\n\nComponent first renders with default value (`light`), then updates after hydration, causing a visible flash of incorrect content.\n\n**Correct: no flicker, no hydration mismatch**\n\n```tsx\nfunction ThemeWrapper({ children }: { children: ReactNode }) {\n  return (\n    <>\n      <div id=\"theme-wrapper\">\n        {children}\n      </div>\n      <script\n        dangerouslySetInnerHTML={{\n          __html: `\n            (function() {\n              try {\n                var theme = localStorage.getItem('theme') || 'light';\n                var el = document.getElementById('theme-wrapper');\n                if (el) el.className = theme;\n              } catch (e) {}\n            })();\n          `,\n        }}\n      />\n    </>\n  )\n}\n```\n\nThe inline script executes synchronously before showing the element, ensuring the DOM already has the correct value. No flickering, no hydration mismatch.\n\nThis pattern is especially useful for theme toggles, user preferences, authentication states, and any client-only data that should render immediately without flashing default values.\n\n### 6.6 Use Activity Component for Show/Hide\n\n**Impact: MEDIUM (preserves state/DOM)**\n\nUse React's `<Activity>` to preserve state/DOM for expensive components that frequently toggle visibility.\n\n**Usage:**\n\n```tsx\nimport { Activity } from 'react'\n\nfunction Dropdown({ isOpen }: Props) {\n  return (\n    <Activity mode={isOpen ? 'visible' : 'hidden'}>\n      <ExpensiveMenu />\n    </Activity>\n  )\n}\n```\n\nAvoids expensive re-renders and state loss.\n\n### 6.7 Use Explicit Conditional Rendering\n\n**Impact: LOW (prevents rendering 0 or NaN)**\n\nUse explicit ternary operators (`? :`) instead of `&&` for conditional rendering when the condition can be `0`, `NaN`, or other falsy values that render.\n\n**Incorrect: renders \"0\" when count is 0**\n\n```tsx\nfunction Badge({ count }: { count: number }) {\n  return (\n    <div>\n      {count && <span className=\"badge\">{count}</span>}\n    </div>\n  )\n}\n\n// When count = 0, renders: <div>0</div>\n// When count = 5, renders: <div><span class=\"badge\">5</span></div>\n```\n\n**Correct: renders nothing when count is 0**\n\n```tsx\nfunction Badge({ count }: { count: number }) {\n  return (\n    <div>\n      {count > 0 ? <span className=\"badge\">{count}</span> : null}\n    </div>\n  )\n}\n\n// When count = 0, renders: <div></div>\n// When count = 5, renders: <div><span class=\"badge\">5</span></div>\n```\n\n---\n\n## 7. JavaScript Performance\n\n**Impact: LOW-MEDIUM**\n\nMicro-optimizations for hot paths can add up to meaningful improvements.\n\n### 7.1 Batch DOM CSS Changes\n\n**Impact: MEDIUM (reduces reflows/repaints)**\n\nAvoid changing styles one property at a time. Group multiple CSS changes together via classes or `cssText` to minimize browser reflows.\n\n**Incorrect: multiple reflows**\n\n```typescript\nfunction updateElementStyles(element: HTMLElement) {\n  // Each line triggers a reflow\n  element.style.width = '100px'\n  element.style.height = '200px'\n  element.style.backgroundColor = 'blue'\n  element.style.border = '1px solid black'\n}\n```\n\n**Correct: add class - single reflow**\n\n```typescript\n// CSS file\n.highlighted-box {\n  width: 100px;\n  height: 200px;\n  background-color: blue;\n  border: 1px solid black;\n}\n\n// JavaScript\nfunction updateElementStyles(element: HTMLElement) {\n  element.classList.add('highlighted-box')\n}\n```\n\n**Correct: change cssText - single reflow**\n\n```typescript\nfunction updateElementStyles(element: HTMLElement) {\n  element.style.cssText = `\n    width: 100px;\n    height: 200px;\n    background-color: blue;\n    border: 1px solid black;\n  `\n}\n```\n\n**React example:**\n\n```tsx\n// Incorrect: changing styles one by one\nfunction Box({ isHighlighted }: { isHighlighted: boolean }) {\n  const ref = useRef<HTMLDivElement>(null)\n  \n  useEffect(() => {\n    if (ref.current && isHighlighted) {\n      ref.current.style.width = '100px'\n      ref.current.style.height = '200px'\n      ref.current.style.backgroundColor = 'blue'\n    }\n  }, [isHighlighted])\n  \n  return <div ref={ref}>Content</div>\n}\n\n// Correct: toggle class\nfunction Box({ isHighlighted }: { isHighlighted: boolean }) {\n  return (\n    <div className={isHighlighted ? 'highlighted-box' : ''}>\n      Content\n    </div>\n  )\n}\n```\n\nPrefer CSS classes over inline styles when possible. Classes are cached by the browser and provide better separation of concerns.\n\n### 7.2 Build Index Maps for Repeated Lookups\n\n**Impact: LOW-MEDIUM (1M ops to 2K ops)**\n\nMultiple `.find()` calls by the same key should use a Map.\n\n**Incorrect (O(n) per lookup):**\n\n```typescript\nfunction processOrders(orders: Order[], users: User[]) {\n  return orders.map(order => ({\n    ...order,\n    user: users.find(u => u.id === order.userId)\n  }))\n}\n```\n\n**Correct (O(1) per lookup):**\n\n```typescript\nfunction processOrders(orders: Order[], users: User[]) {\n  const userById = new Map(users.map(u => [u.id, u]))\n\n  return orders.map(order => ({\n    ...order,\n    user: userById.get(order.userId)\n  }))\n}\n```\n\nBuild map once (O(n)), then all lookups are O(1).\n\nFor 1000 orders × 1000 users: 1M ops → 2K ops.\n\n### 7.3 Cache Property Access in Loops\n\n**Impact: LOW-MEDIUM (reduces lookups)**\n\nCache object property lookups in hot paths.\n\n**Incorrect: 3 lookups × N iterations**\n\n```typescript\nfor (let i = 0; i < arr.length; i++) {\n  process(obj.config.settings.value)\n}\n```\n\n**Correct: 1 lookup total**\n\n```typescript\nconst value = obj.config.settings.value\nconst len = arr.length\nfor (let i = 0; i < len; i++) {\n  process(value)\n}\n```\n\n### 7.4 Cache Repeated Function Calls\n\n**Impact: MEDIUM (avoid redundant computation)**\n\nUse a module-level Map to cache function results when the same function is called repeatedly with the same inputs during render.\n\n**Incorrect: redundant computation**\n\n```typescript\nfunction ProjectList({ projects }: { projects: Project[] }) {\n  return (\n    <div>\n      {projects.map(project => {\n        // slugify() called 100+ times for same project names\n        const slug = slugify(project.name)\n        \n        return <ProjectCard key={project.id} slug={slug} />\n      })}\n    </div>\n  )\n}\n```\n\n**Correct: cached results**\n\n```typescript\n// Module-level cache\nconst slugifyCache = new Map<string, string>()\n\nfunction cachedSlugify(text: string): string {\n  if (slugifyCache.has(text)) {\n    return slugifyCache.get(text)!\n  }\n  const result = slugify(text)\n  slugifyCache.set(text, result)\n  return result\n}\n\nfunction ProjectList({ projects }: { projects: Project[] }) {\n  return (\n    <div>\n      {projects.map(project => {\n        // Computed only once per unique project name\n        const slug = cachedSlugify(project.name)\n        \n        return <ProjectCard key={project.id} slug={slug} />\n      })}\n    </div>\n  )\n}\n```\n\n**Simpler pattern for single-value functions:**\n\n```typescript\nlet isLoggedInCache: boolean | null = null\n\nfunction isLoggedIn(): boolean {\n  if (isLoggedInCache !== null) {\n    return isLoggedInCache\n  }\n  \n  isLoggedInCache = document.cookie.includes('auth=')\n  return isLoggedInCache\n}\n\n// Clear cache when auth changes\nfunction onAuthChange() {\n  isLoggedInCache = null\n}\n```\n\nUse a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.\n\nReference: [https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast)\n\n### 7.5 Cache Storage API Calls\n\n**Impact: LOW-MEDIUM (reduces expensive I/O)**\n\n`localStorage`, `sessionStorage`, and `document.cookie` are synchronous and expensive. Cache reads in memory.\n\n**Incorrect: reads storage on every call**\n\n```typescript\nfunction getTheme() {\n  return localStorage.getItem('theme') ?? 'light'\n}\n// Called 10 times = 10 storage reads\n```\n\n**Correct: Map cache**\n\n```typescript\nconst storageCache = new Map<string, string | null>()\n\nfunction getLocalStorage(key: string) {\n  if (!storageCache.has(key)) {\n    storageCache.set(key, localStorage.getItem(key))\n  }\n  return storageCache.get(key)\n}\n\nfunction setLocalStorage(key: string, value: string) {\n  localStorage.setItem(key, value)\n  storageCache.set(key, value)  // keep cache in sync\n}\n```\n\nUse a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.\n\n**Cookie caching:**\n\n```typescript\nlet cookieCache: Record<string, string> | null = null\n\nfunction getCookie(name: string) {\n  if (!cookieCache) {\n    cookieCache = Object.fromEntries(\n      document.cookie.split('; ').map(c => c.split('='))\n    )\n  }\n  return cookieCache[name]\n}\n```\n\n**Important: invalidate on external changes**\n\n```typescript\nwindow.addEventListener('storage', (e) => {\n  if (e.key) storageCache.delete(e.key)\n})\n\ndocument.addEventListener('visibilitychange', () => {\n  if (document.visibilityState === 'visible') {\n    storageCache.clear()\n  }\n})\n```\n\nIf storage can change externally (another tab, server-set cookies), invalidate cache:\n\n### 7.6 Combine Multiple Array Iterations\n\n**Impact: LOW-MEDIUM (reduces iterations)**\n\nMultiple `.filter()` or `.map()` calls iterate the array multiple times. Combine into one loop.\n\n**Incorrect: 3 iterations**\n\n```typescript\nconst admins = users.filter(u => u.isAdmin)\nconst testers = users.filter(u => u.isTester)\nconst inactive = users.filter(u => !u.isActive)\n```\n\n**Correct: 1 iteration**\n\n```typescript\nconst admins: User[] = []\nconst testers: User[] = []\nconst inactive: User[] = []\n\nfor (const user of users) {\n  if (user.isAdmin) admins.push(user)\n  if (user.isTester) testers.push(user)\n  if (!user.isActive) inactive.push(user)\n}\n```\n\n### 7.7 Early Length Check for Array Comparisons\n\n**Impact: MEDIUM-HIGH (avoids expensive operations when lengths differ)**\n\nWhen comparing arrays with expensive operations (sorting, deep equality, serialization), check lengths first. If lengths differ, the arrays cannot be equal.\n\nIn real-world applications, this optimization is especially valuable when the comparison runs in hot paths (event handlers, render loops).\n\n**Incorrect: always runs expensive comparison**\n\n```typescript\nfunction hasChanges(current: string[], original: string[]) {\n  // Always sorts and joins, even when lengths differ\n  return current.sort().join() !== original.sort().join()\n}\n```\n\nTwo O(n log n) sorts run even when `current.length` is 5 and `original.length` is 100. There is also overhead of joining the arrays and comparing the strings.\n\n**Correct (O(1) length check first):**\n\n```typescript\nfunction hasChanges(current: string[], original: string[]) {\n  // Early return if lengths differ\n  if (current.length !== original.length) {\n    return true\n  }\n  // Only sort/join when lengths match\n  const currentSorted = current.toSorted()\n  const originalSorted = original.toSorted()\n  for (let i = 0; i < currentSorted.length; i++) {\n    if (currentSorted[i] !== originalSorted[i]) {\n      return true\n    }\n  }\n  return false\n}\n```\n\nThis new approach is more efficient because:\n\n- It avoids the overhead of sorting and joining the arrays when lengths differ\n\n- It avoids consuming memory for the joined strings (especially important for large arrays)\n\n- It avoids mutating the original arrays\n\n- It returns early when a difference is found\n\n### 7.8 Early Return from Functions\n\n**Impact: LOW-MEDIUM (avoids unnecessary computation)**\n\nReturn early when result is determined to skip unnecessary processing.\n\n**Incorrect: processes all items even after finding answer**\n\n```typescript\nfunction validateUsers(users: User[]) {\n  let hasError = false\n  let errorMessage = ''\n  \n  for (const user of users) {\n    if (!user.email) {\n      hasError = true\n      errorMessage = 'Email required'\n    }\n    if (!user.name) {\n      hasError = true\n      errorMessage = 'Name required'\n    }\n    // Continues checking all users even after error found\n  }\n  \n  return hasError ? { valid: false, error: errorMessage } : { valid: true }\n}\n```\n\n**Correct: returns immediately on first error**\n\n```typescript\nfunction validateUsers(users: User[]) {\n  for (const user of users) {\n    if (!user.email) {\n      return { valid: false, error: 'Email required' }\n    }\n    if (!user.name) {\n      return { valid: false, error: 'Name required' }\n    }\n  }\n\n  return { valid: true }\n}\n```\n\n### 7.9 Hoist RegExp Creation\n\n**Impact: LOW-MEDIUM (avoids recreation)**\n\nDon't create RegExp inside render. Hoist to module scope or memoize with `useMemo()`.\n\n**Incorrect: new RegExp every render**\n\n```tsx\nfunction Highlighter({ text, query }: Props) {\n  const regex = new RegExp(`(${query})`, 'gi')\n  const parts = text.split(regex)\n  return <>{parts.map((part, i) => ...)}</>\n}\n```\n\n**Correct: memoize or hoist**\n\n```tsx\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nfunction Highlighter({ text, query }: Props) {\n  const regex = useMemo(\n    () => new RegExp(`(${escapeRegex(query)})`, 'gi'),\n    [query]\n  )\n  const parts = text.split(regex)\n  return <>{parts.map((part, i) => ...)}</>\n}\n```\n\n**Warning: global regex has mutable state**\n\n```typescript\nconst regex = /foo/g\nregex.test('foo')  // true, lastIndex = 3\nregex.test('foo')  // false, lastIndex = 0\n```\n\nGlobal regex (`/g`) has mutable `lastIndex` state:\n\n### 7.10 Use Loop for Min/Max Instead of Sort\n\n**Impact: LOW (O(n) instead of O(n log n))**\n\nFinding the smallest or largest element only requires a single pass through the array. Sorting is wasteful and slower.\n\n**Incorrect (O(n log n) - sort to find latest):**\n\n```typescript\ninterface Project {\n  id: string\n  name: string\n  updatedAt: number\n}\n\nfunction getLatestProject(projects: Project[]) {\n  const sorted = [...projects].sort((a, b) => b.updatedAt - a.updatedAt)\n  return sorted[0]\n}\n```\n\nSorts the entire array just to find the maximum value.\n\n**Incorrect (O(n log n) - sort for oldest and newest):**\n\n```typescript\nfunction getOldestAndNewest(projects: Project[]) {\n  const sorted = [...projects].sort((a, b) => a.updatedAt - b.updatedAt)\n  return { oldest: sorted[0], newest: sorted[sorted.length - 1] }\n}\n```\n\nStill sorts unnecessarily when only min/max are needed.\n\n**Correct (O(n) - single loop):**\n\n```typescript\nfunction getLatestProject(projects: Project[]) {\n  if (projects.length === 0) return null\n  \n  let latest = projects[0]\n  \n  for (let i = 1; i < projects.length; i++) {\n    if (projects[i].updatedAt > latest.updatedAt) {\n      latest = projects[i]\n    }\n  }\n  \n  return latest\n}\n\nfunction getOldestAndNewest(projects: Project[]) {\n  if (projects.length === 0) return { oldest: null, newest: null }\n  \n  let oldest = projects[0]\n  let newest = projects[0]\n  \n  for (let i = 1; i < projects.length; i++) {\n    if (projects[i].updatedAt < oldest.updatedAt) oldest = projects[i]\n    if (projects[i].updatedAt > newest.updatedAt) newest = projects[i]\n  }\n  \n  return { oldest, newest }\n}\n```\n\nSingle pass through the array, no copying, no sorting.\n\n**Alternative: Math.min/Math.max for small arrays**\n\n```typescript\nconst numbers = [5, 2, 8, 1, 9]\nconst min = Math.min(...numbers)\nconst max = Math.max(...numbers)\n```\n\nThis works for small arrays but can be slower for very large arrays due to spread operator limitations. Use the loop approach for reliability.\n\n### 7.11 Use Set/Map for O(1) Lookups\n\n**Impact: LOW-MEDIUM (O(n) to O(1))**\n\nConvert arrays to Set/Map for repeated membership checks.\n\n**Incorrect (O(n) per check):**\n\n```typescript\nconst allowedIds = ['a', 'b', 'c', ...]\nitems.filter(item => allowedIds.includes(item.id))\n```\n\n**Correct (O(1) per check):**\n\n```typescript\nconst allowedIds = new Set(['a', 'b', 'c', ...])\nitems.filter(item => allowedIds.has(item.id))\n```\n\n### 7.12 Use toSorted() Instead of sort() for Immutability\n\n**Impact: MEDIUM-HIGH (prevents mutation bugs in React state)**\n\n`.sort()` mutates the array in place, which can cause bugs with React state and props. Use `.toSorted()` to create a new sorted array without mutation.\n\n**Incorrect: mutates original array**\n\n```typescript\nfunction UserList({ users }: { users: User[] }) {\n  // Mutates the users prop array!\n  const sorted = useMemo(\n    () => users.sort((a, b) => a.name.localeCompare(b.name)),\n    [users]\n  )\n  return <div>{sorted.map(renderUser)}</div>\n}\n```\n\n**Correct: creates new array**\n\n```typescript\nfunction UserList({ users }: { users: User[] }) {\n  // Creates new sorted array, original unchanged\n  const sorted = useMemo(\n    () => users.toSorted((a, b) => a.name.localeCompare(b.name)),\n    [users]\n  )\n  return <div>{sorted.map(renderUser)}</div>\n}\n```\n\n**Why this matters in React:**\n\n1. Props/state mutations break React's immutability model - React expects props and state to be treated as read-only\n\n2. Causes stale closure bugs - Mutating arrays inside closures (callbacks, effects) can lead to unexpected behavior\n\n**Browser support: fallback for older browsers**\n\n```typescript\n// Fallback for older browsers\nconst sorted = [...items].sort((a, b) => a.value - b.value)\n```\n\n`.toSorted()` is available in all modern browsers (Chrome 110+, Safari 16+, Firefox 115+, Node.js 20+). For older environments, use spread operator:\n\n**Other immutable array methods:**\n\n- `.toSorted()` - immutable sort\n\n- `.toReversed()` - immutable reverse\n\n- `.toSpliced()` - immutable splice\n\n- `.with()` - immutable element replacement\n\n---\n\n## 8. Advanced Patterns\n\n**Impact: LOW**\n\nAdvanced patterns for specific cases that require careful implementation.\n\n### 8.1 Store Event Handlers in Refs\n\n**Impact: LOW (stable subscriptions)**\n\nStore callbacks in refs when used in effects that shouldn't re-subscribe on callback changes.\n\n**Incorrect: re-subscribes on every render**\n\n```tsx\nfunction useWindowEvent(event: string, handler: () => void) {\n  useEffect(() => {\n    window.addEventListener(event, handler)\n    return () => window.removeEventListener(event, handler)\n  }, [event, handler])\n}\n```\n\n**Correct: stable subscription**\n\n```tsx\nimport { useEffectEvent } from 'react'\n\nfunction useWindowEvent(event: string, handler: () => void) {\n  const onEvent = useEffectEvent(handler)\n\n  useEffect(() => {\n    window.addEventListener(event, onEvent)\n    return () => window.removeEventListener(event, onEvent)\n  }, [event])\n}\n```\n\n**Alternative: use `useEffectEvent` if you're on latest React:**\n\n`useEffectEvent` provides a cleaner API for the same pattern: it creates a stable function reference that always calls the latest version of the handler.\n\n### 8.2 useLatest for Stable Callback Refs\n\n**Impact: LOW (prevents effect re-runs)**\n\nAccess latest values in callbacks without adding them to dependency arrays. Prevents effect re-runs while avoiding stale closures.\n\n**Implementation:**\n\n```typescript\nfunction useLatest<T>(value: T) {\n  const ref = useRef(value)\n  useEffect(() => {\n    ref.current = value\n  }, [value])\n  return ref\n}\n```\n\n**Incorrect: effect re-runs on every callback change**\n\n```tsx\nfunction SearchInput({ onSearch }: { onSearch: (q: string) => void }) {\n  const [query, setQuery] = useState('')\n\n  useEffect(() => {\n    const timeout = setTimeout(() => onSearch(query), 300)\n    return () => clearTimeout(timeout)\n  }, [query, onSearch])\n}\n```\n\n**Correct: stable effect, fresh callback**\n\n```tsx\nfunction SearchInput({ onSearch }: { onSearch: (q: string) => void }) {\n  const [query, setQuery] = useState('')\n  const onSearchRef = useLatest(onSearch)\n\n  useEffect(() => {\n    const timeout = setTimeout(() => onSearchRef.current(query), 300)\n    return () => clearTimeout(timeout)\n  }, [query])\n}\n```\n\n---\n\n## References\n\n1. [https://react.dev](https://react.dev)\n2. [https://nextjs.org](https://nextjs.org)\n3. [https://swr.vercel.app](https://swr.vercel.app)\n4. [https://github.com/shuding/better-all](https://github.com/shuding/better-all)\n5. [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)\n6. [https://vercel.com/blog/how-we-optimized-package-imports-in-next-js](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js)\n7. [https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/README.md",
    "content": "# React Best Practices\n\nA structured repository for creating and maintaining React Best Practices optimized for agents and LLMs.\n\n## Structure\n\n- `rules/` - Individual rule files (one per rule)\n  - `_sections.md` - Section metadata (titles, impacts, descriptions)\n  - `_template.md` - Template for creating new rules\n  - `area-description.md` - Individual rule files\n- `src/` - Build scripts and utilities\n- `metadata.json` - Document metadata (version, organization, abstract)\n- __`AGENTS.md`__ - Compiled output (generated)\n- __`test-cases.json`__ - Test cases for LLM evaluation (generated)\n\n## Getting Started\n\n1. Install dependencies:\n   ```bash\n   pnpm install\n   ```\n\n2. Build AGENTS.md from rules:\n   ```bash\n   pnpm build\n   ```\n\n3. Validate rule files:\n   ```bash\n   pnpm validate\n   ```\n\n4. Extract test cases:\n   ```bash\n   pnpm extract-tests\n   ```\n\n## Creating a New Rule\n\n1. Copy `rules/_template.md` to `rules/area-description.md`\n2. Choose the appropriate area prefix:\n   - `async-` for Eliminating Waterfalls (Section 1)\n   - `bundle-` for Bundle Size Optimization (Section 2)\n   - `server-` for Server-Side Performance (Section 3)\n   - `client-` for Client-Side Data Fetching (Section 4)\n   - `rerender-` for Re-render Optimization (Section 5)\n   - `rendering-` for Rendering Performance (Section 6)\n   - `js-` for JavaScript Performance (Section 7)\n   - `advanced-` for Advanced Patterns (Section 8)\n3. Fill in the frontmatter and content\n4. Ensure you have clear examples with explanations\n5. Run `pnpm build` to regenerate AGENTS.md and test-cases.json\n\n## Rule File Structure\n\nEach rule file should follow this structure:\n\n```markdown\n---\ntitle: Rule Title Here\nimpact: MEDIUM\nimpactDescription: Optional description\ntags: tag1, tag2, tag3\n---\n\n## Rule Title Here\n\nBrief explanation of the rule and why it matters.\n\n**Incorrect (description of what's wrong):**\n\n```typescript\n// Bad code example\n```\n\n**Correct (description of what's right):**\n\n```typescript\n// Good code example\n```\n\nOptional explanatory text after examples.\n\nReference: [Link](https://example.com)\n\n## File Naming Convention\n\n- Files starting with `_` are special (excluded from build)\n- Rule files: `area-description.md` (e.g., `async-parallel.md`)\n- Section is automatically inferred from filename prefix\n- Rules are sorted alphabetically by title within each section\n- IDs (e.g., 1.1, 1.2) are auto-generated during build\n\n## Impact Levels\n\n- `CRITICAL` - Highest priority, major performance gains\n- `HIGH` - Significant performance improvements\n- `MEDIUM-HIGH` - Moderate-high gains\n- `MEDIUM` - Moderate performance improvements\n- `LOW-MEDIUM` - Low-medium gains\n- `LOW` - Incremental improvements\n\n## Scripts\n\n- `pnpm build` - Compile rules into AGENTS.md\n- `pnpm validate` - Validate all rule files\n- `pnpm extract-tests` - Extract test cases for LLM evaluation\n- `pnpm dev` - Build and validate\n\n## Contributing\n\nWhen adding or modifying rules:\n\n1. Use the correct filename prefix for your section\n2. Follow the `_template.md` structure\n3. Include clear bad/good examples with explanations\n4. Add appropriate tags\n5. Run `pnpm build` to regenerate AGENTS.md and test-cases.json\n6. Rules are automatically sorted by title - no need to manage numbers!\n\n## Acknowledgments\n\nOriginally created by [@shuding](https://x.com/shuding) at [Vercel](https://vercel.com).\n"
  },
  {
    "path": ".claude/skills/react-best-practices/SKILL.md",
    "content": "---\nname: vercel-react-best-practices\ndescription: React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.\n---\n\n# Vercel React Best Practices\n\nComprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Contains 45 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.\n\n## When to Apply\n\nReference these guidelines when:\n- Writing new React components or Next.js pages\n- Implementing data fetching (client or server-side)\n- Reviewing code for performance issues\n- Refactoring existing React/Next.js code\n- Optimizing bundle size or load times\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Eliminating Waterfalls | CRITICAL | `async-` |\n| 2 | Bundle Size Optimization | CRITICAL | `bundle-` |\n| 3 | Server-Side Performance | HIGH | `server-` |\n| 4 | Client-Side Data Fetching | MEDIUM-HIGH | `client-` |\n| 5 | Re-render Optimization | MEDIUM | `rerender-` |\n| 6 | Rendering Performance | MEDIUM | `rendering-` |\n| 7 | JavaScript Performance | LOW-MEDIUM | `js-` |\n| 8 | Advanced Patterns | LOW | `advanced-` |\n\n## Quick Reference\n\n### 1. Eliminating Waterfalls (CRITICAL)\n\n- `async-defer-await` - Move await into branches where actually used\n- `async-parallel` - Use Promise.all() for independent operations\n- `async-dependencies` - Use better-all for partial dependencies\n- `async-api-routes` - Start promises early, await late in API routes\n- `async-suspense-boundaries` - Use Suspense to stream content\n\n### 2. Bundle Size Optimization (CRITICAL)\n\n- `bundle-barrel-imports` - Import directly, avoid barrel files\n- `bundle-dynamic-imports` - Use next/dynamic for heavy components\n- `bundle-defer-third-party` - Load analytics/logging after hydration\n- `bundle-conditional` - Load modules only when feature is activated\n- `bundle-preload` - Preload on hover/focus for perceived speed\n\n### 3. Server-Side Performance (HIGH)\n\n- `server-cache-react` - Use React.cache() for per-request deduplication\n- `server-cache-lru` - Use LRU cache for cross-request caching\n- `server-serialization` - Minimize data passed to client components\n- `server-parallel-fetching` - Restructure components to parallelize fetches\n- `server-after-nonblocking` - Use after() for non-blocking operations\n\n### 4. Client-Side Data Fetching (MEDIUM-HIGH)\n\n- `client-swr-dedup` - Use SWR for automatic request deduplication\n- `client-event-listeners` - Deduplicate global event listeners\n\n### 5. Re-render Optimization (MEDIUM)\n\n- `rerender-defer-reads` - Don't subscribe to state only used in callbacks\n- `rerender-memo` - Extract expensive work into memoized components\n- `rerender-dependencies` - Use primitive dependencies in effects\n- `rerender-derived-state` - Subscribe to derived booleans, not raw values\n- `rerender-functional-setstate` - Use functional setState for stable callbacks\n- `rerender-lazy-state-init` - Pass function to useState for expensive values\n- `rerender-transitions` - Use startTransition for non-urgent updates\n\n### 6. Rendering Performance (MEDIUM)\n\n- `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element\n- `rendering-content-visibility` - Use content-visibility for long lists\n- `rendering-hoist-jsx` - Extract static JSX outside components\n- `rendering-svg-precision` - Reduce SVG coordinate precision\n- `rendering-hydration-no-flicker` - Use inline script for client-only data\n- `rendering-activity` - Use Activity component for show/hide\n- `rendering-conditional-render` - Use ternary, not && for conditionals\n\n### 7. JavaScript Performance (LOW-MEDIUM)\n\n- `js-batch-dom-css` - Group CSS changes via classes or cssText\n- `js-index-maps` - Build Map for repeated lookups\n- `js-cache-property-access` - Cache object properties in loops\n- `js-cache-function-results` - Cache function results in module-level Map\n- `js-cache-storage` - Cache localStorage/sessionStorage reads\n- `js-combine-iterations` - Combine multiple filter/map into one loop\n- `js-length-check-first` - Check array length before expensive comparison\n- `js-early-exit` - Return early from functions\n- `js-hoist-regexp` - Hoist RegExp creation outside loops\n- `js-min-max-loop` - Use loop for min/max instead of sort\n- `js-set-map-lookups` - Use Set/Map for O(1) lookups\n- `js-tosorted-immutable` - Use toSorted() for immutability\n\n### 8. Advanced Patterns (LOW)\n\n- `advanced-event-handler-refs` - Store event handlers in refs\n- `advanced-use-latest` - useLatest for stable callback refs\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples:\n\n```\nrules/async-parallel.md\nrules/bundle-barrel-imports.md\nrules/_sections.md\n```\n\nEach rule file contains:\n- Brief explanation of why it matters\n- Incorrect code example with explanation\n- Correct code example with explanation\n- Additional context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n"
  },
  {
    "path": ".claude/skills/react-best-practices/metadata.json",
    "content": "{\n  \"version\": \"0.1.0\",\n  \"organization\": \"Vercel Engineering\",\n  \"date\": \"January 2026\",\n  \"abstract\": \"Comprehensive performance optimization guide for React and Next.js applications, designed for AI agents and LLMs. Contains 40+ rules across 8 categories, prioritized by impact from critical (eliminating waterfalls, reducing bundle size) to incremental (advanced patterns). Each rule includes detailed explanations, real-world examples comparing incorrect vs. correct implementations, and specific impact metrics to guide automated refactoring and code generation.\",\n  \"references\": [\n    \"https://react.dev\",\n    \"https://nextjs.org\",\n    \"https://swr.vercel.app\",\n    \"https://github.com/shuding/better-all\",\n    \"https://github.com/isaacs/node-lru-cache\",\n    \"https://vercel.com/blog/how-we-optimized-package-imports-in-next-js\",\n    \"https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast\"\n  ]\n}\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/_sections.md",
    "content": "# Sections\n\nThis file defines all sections, their ordering, impact levels, and descriptions.\nThe section ID (in parentheses) is the filename prefix used to group rules.\n\n---\n\n## 1. Eliminating Waterfalls (async)\n\n**Impact:** CRITICAL  \n**Description:** Waterfalls are the #1 performance killer. Each sequential await adds full network latency. Eliminating them yields the largest gains.\n\n## 2. Bundle Size Optimization (bundle)\n\n**Impact:** CRITICAL  \n**Description:** Reducing initial bundle size improves Time to Interactive and Largest Contentful Paint.\n\n## 3. Server-Side Performance (server)\n\n**Impact:** HIGH  \n**Description:** Optimizing server-side rendering and data fetching eliminates server-side waterfalls and reduces response times.\n\n## 4. Client-Side Data Fetching (client)\n\n**Impact:** MEDIUM-HIGH  \n**Description:** Automatic deduplication and efficient data fetching patterns reduce redundant network requests.\n\n## 5. Re-render Optimization (rerender)\n\n**Impact:** MEDIUM  \n**Description:** Reducing unnecessary re-renders minimizes wasted computation and improves UI responsiveness.\n\n## 6. Rendering Performance (rendering)\n\n**Impact:** MEDIUM  \n**Description:** Optimizing the rendering process reduces the work the browser needs to do.\n\n## 7. JavaScript Performance (js)\n\n**Impact:** LOW-MEDIUM  \n**Description:** Micro-optimizations for hot paths can add up to meaningful improvements.\n\n## 8. Advanced Patterns (advanced)\n\n**Impact:** LOW  \n**Description:** Advanced patterns for specific cases that require careful implementation.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/_template.md",
    "content": "---\ntitle: Rule Title Here\nimpact: MEDIUM\nimpactDescription: Optional description of impact (e.g., \"20-50% improvement\")\ntags: tag1, tag2\n---\n\n## Rule Title Here\n\n**Impact: MEDIUM (optional impact description)**\n\nBrief explanation of the rule and why it matters. This should be clear and concise, explaining the performance implications.\n\n**Incorrect (description of what's wrong):**\n\n```typescript\n// Bad code example here\nconst bad = example()\n```\n\n**Correct (description of what's right):**\n\n```typescript\n// Good code example here\nconst good = example()\n```\n\nReference: [Link to documentation or resource](https://example.com)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/advanced-event-handler-refs.md",
    "content": "---\ntitle: Store Event Handlers in Refs\nimpact: LOW\nimpactDescription: stable subscriptions\ntags: advanced, hooks, refs, event-handlers, optimization\n---\n\n## Store Event Handlers in Refs\n\nStore callbacks in refs when used in effects that shouldn't re-subscribe on callback changes.\n\n**Incorrect (re-subscribes on every render):**\n\n```tsx\nfunction useWindowEvent(event: string, handler: () => void) {\n  useEffect(() => {\n    window.addEventListener(event, handler)\n    return () => window.removeEventListener(event, handler)\n  }, [event, handler])\n}\n```\n\n**Correct (stable subscription):**\n\n```tsx\nfunction useWindowEvent(event: string, handler: () => void) {\n  const handlerRef = useRef(handler)\n  useEffect(() => {\n    handlerRef.current = handler\n  }, [handler])\n\n  useEffect(() => {\n    const listener = () => handlerRef.current()\n    window.addEventListener(event, listener)\n    return () => window.removeEventListener(event, listener)\n  }, [event])\n}\n```\n\n**Alternative: use `useEffectEvent` if you're on latest React:**\n\n```tsx\nimport { useEffectEvent } from 'react'\n\nfunction useWindowEvent(event: string, handler: () => void) {\n  const onEvent = useEffectEvent(handler)\n\n  useEffect(() => {\n    window.addEventListener(event, onEvent)\n    return () => window.removeEventListener(event, onEvent)\n  }, [event])\n}\n```\n\n`useEffectEvent` provides a cleaner API for the same pattern: it creates a stable function reference that always calls the latest version of the handler.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/advanced-use-latest.md",
    "content": "---\ntitle: useLatest for Stable Callback Refs\nimpact: LOW\nimpactDescription: prevents effect re-runs\ntags: advanced, hooks, useLatest, refs, optimization\n---\n\n## useLatest for Stable Callback Refs\n\nAccess latest values in callbacks without adding them to dependency arrays. Prevents effect re-runs while avoiding stale closures.\n\n**Implementation:**\n\n```typescript\nfunction useLatest<T>(value: T) {\n  const ref = useRef(value)\n  useEffect(() => {\n    ref.current = value\n  }, [value])\n  return ref\n}\n```\n\n**Incorrect (effect re-runs on every callback change):**\n\n```tsx\nfunction SearchInput({ onSearch }: { onSearch: (q: string) => void }) {\n  const [query, setQuery] = useState('')\n\n  useEffect(() => {\n    const timeout = setTimeout(() => onSearch(query), 300)\n    return () => clearTimeout(timeout)\n  }, [query, onSearch])\n}\n```\n\n**Correct (stable effect, fresh callback):**\n\n```tsx\nfunction SearchInput({ onSearch }: { onSearch: (q: string) => void }) {\n  const [query, setQuery] = useState('')\n  const onSearchRef = useLatest(onSearch)\n\n  useEffect(() => {\n    const timeout = setTimeout(() => onSearchRef.current(query), 300)\n    return () => clearTimeout(timeout)\n  }, [query])\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/async-api-routes.md",
    "content": "---\ntitle: Prevent Waterfall Chains in API Routes\nimpact: CRITICAL\nimpactDescription: 2-10× improvement\ntags: api-routes, server-actions, waterfalls, parallelization\n---\n\n## Prevent Waterfall Chains in API Routes\n\nIn API routes and Server Actions, start independent operations immediately, even if you don't await them yet.\n\n**Incorrect (config waits for auth, data waits for both):**\n\n```typescript\nexport async function GET(request: Request) {\n  const session = await auth()\n  const config = await fetchConfig()\n  const data = await fetchData(session.user.id)\n  return Response.json({ data, config })\n}\n```\n\n**Correct (auth and config start immediately):**\n\n```typescript\nexport async function GET(request: Request) {\n  const sessionPromise = auth()\n  const configPromise = fetchConfig()\n  const session = await sessionPromise\n  const [config, data] = await Promise.all([\n    configPromise,\n    fetchData(session.user.id)\n  ])\n  return Response.json({ data, config })\n}\n```\n\nFor operations with more complex dependency chains, use `better-all` to automatically maximize parallelism (see Dependency-Based Parallelization).\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/async-defer-await.md",
    "content": "---\ntitle: Defer Await Until Needed\nimpact: HIGH\nimpactDescription: avoids blocking unused code paths\ntags: async, await, conditional, optimization\n---\n\n## Defer Await Until Needed\n\nMove `await` operations into the branches where they're actually used to avoid blocking code paths that don't need them.\n\n**Incorrect (blocks both branches):**\n\n```typescript\nasync function handleRequest(userId: string, skipProcessing: boolean) {\n  const userData = await fetchUserData(userId)\n  \n  if (skipProcessing) {\n    // Returns immediately but still waited for userData\n    return { skipped: true }\n  }\n  \n  // Only this branch uses userData\n  return processUserData(userData)\n}\n```\n\n**Correct (only blocks when needed):**\n\n```typescript\nasync function handleRequest(userId: string, skipProcessing: boolean) {\n  if (skipProcessing) {\n    // Returns immediately without waiting\n    return { skipped: true }\n  }\n  \n  // Fetch only when needed\n  const userData = await fetchUserData(userId)\n  return processUserData(userData)\n}\n```\n\n**Another example (early return optimization):**\n\n```typescript\n// Incorrect: always fetches permissions\nasync function updateResource(resourceId: string, userId: string) {\n  const permissions = await fetchPermissions(userId)\n  const resource = await getResource(resourceId)\n  \n  if (!resource) {\n    return { error: 'Not found' }\n  }\n  \n  if (!permissions.canEdit) {\n    return { error: 'Forbidden' }\n  }\n  \n  return await updateResourceData(resource, permissions)\n}\n\n// Correct: fetches only when needed\nasync function updateResource(resourceId: string, userId: string) {\n  const resource = await getResource(resourceId)\n  \n  if (!resource) {\n    return { error: 'Not found' }\n  }\n  \n  const permissions = await fetchPermissions(userId)\n  \n  if (!permissions.canEdit) {\n    return { error: 'Forbidden' }\n  }\n  \n  return await updateResourceData(resource, permissions)\n}\n```\n\nThis optimization is especially valuable when the skipped branch is frequently taken, or when the deferred operation is expensive.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/async-dependencies.md",
    "content": "---\ntitle: Dependency-Based Parallelization\nimpact: CRITICAL\nimpactDescription: 2-10× improvement\ntags: async, parallelization, dependencies, better-all\n---\n\n## Dependency-Based Parallelization\n\nFor operations with partial dependencies, use `better-all` to maximize parallelism. It automatically starts each task at the earliest possible moment.\n\n**Incorrect (profile waits for config unnecessarily):**\n\n```typescript\nconst [user, config] = await Promise.all([\n  fetchUser(),\n  fetchConfig()\n])\nconst profile = await fetchProfile(user.id)\n```\n\n**Correct (config and profile run in parallel):**\n\n```typescript\nimport { all } from 'better-all'\n\nconst { user, config, profile } = await all({\n  async user() { return fetchUser() },\n  async config() { return fetchConfig() },\n  async profile() {\n    return fetchProfile((await this.$.user).id)\n  }\n})\n```\n\nReference: [https://github.com/shuding/better-all](https://github.com/shuding/better-all)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/async-parallel.md",
    "content": "---\ntitle: Promise.all() for Independent Operations\nimpact: CRITICAL\nimpactDescription: 2-10× improvement\ntags: async, parallelization, promises, waterfalls\n---\n\n## Promise.all() for Independent Operations\n\nWhen async operations have no interdependencies, execute them concurrently using `Promise.all()`.\n\n**Incorrect (sequential execution, 3 round trips):**\n\n```typescript\nconst user = await fetchUser()\nconst posts = await fetchPosts()\nconst comments = await fetchComments()\n```\n\n**Correct (parallel execution, 1 round trip):**\n\n```typescript\nconst [user, posts, comments] = await Promise.all([\n  fetchUser(),\n  fetchPosts(),\n  fetchComments()\n])\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/async-suspense-boundaries.md",
    "content": "---\ntitle: Strategic Suspense Boundaries\nimpact: HIGH\nimpactDescription: faster initial paint\ntags: async, suspense, streaming, layout-shift\n---\n\n## Strategic Suspense Boundaries\n\nInstead of awaiting data in async components before returning JSX, use Suspense boundaries to show the wrapper UI faster while data loads.\n\n**Incorrect (wrapper blocked by data fetching):**\n\n```tsx\nasync function Page() {\n  const data = await fetchData() // Blocks entire page\n  \n  return (\n    <div>\n      <div>Sidebar</div>\n      <div>Header</div>\n      <div>\n        <DataDisplay data={data} />\n      </div>\n      <div>Footer</div>\n    </div>\n  )\n}\n```\n\nThe entire layout waits for data even though only the middle section needs it.\n\n**Correct (wrapper shows immediately, data streams in):**\n\n```tsx\nfunction Page() {\n  return (\n    <div>\n      <div>Sidebar</div>\n      <div>Header</div>\n      <div>\n        <Suspense fallback={<Skeleton />}>\n          <DataDisplay />\n        </Suspense>\n      </div>\n      <div>Footer</div>\n    </div>\n  )\n}\n\nasync function DataDisplay() {\n  const data = await fetchData() // Only blocks this component\n  return <div>{data.content}</div>\n}\n```\n\nSidebar, Header, and Footer render immediately. Only DataDisplay waits for data.\n\n**Alternative (share promise across components):**\n\n```tsx\nfunction Page() {\n  // Start fetch immediately, but don't await\n  const dataPromise = fetchData()\n  \n  return (\n    <div>\n      <div>Sidebar</div>\n      <div>Header</div>\n      <Suspense fallback={<Skeleton />}>\n        <DataDisplay dataPromise={dataPromise} />\n        <DataSummary dataPromise={dataPromise} />\n      </Suspense>\n      <div>Footer</div>\n    </div>\n  )\n}\n\nfunction DataDisplay({ dataPromise }: { dataPromise: Promise<Data> }) {\n  const data = use(dataPromise) // Unwraps the promise\n  return <div>{data.content}</div>\n}\n\nfunction DataSummary({ dataPromise }: { dataPromise: Promise<Data> }) {\n  const data = use(dataPromise) // Reuses the same promise\n  return <div>{data.summary}</div>\n}\n```\n\nBoth components share the same promise, so only one fetch occurs. Layout renders immediately while both components wait together.\n\n**When NOT to use this pattern:**\n\n- Critical data needed for layout decisions (affects positioning)\n- SEO-critical content above the fold\n- Small, fast queries where suspense overhead isn't worth it\n- When you want to avoid layout shift (loading → content jump)\n\n**Trade-off:** Faster initial paint vs potential layout shift. Choose based on your UX priorities.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/bundle-barrel-imports.md",
    "content": "---\ntitle: Avoid Barrel File Imports\nimpact: CRITICAL\nimpactDescription: 200-800ms import cost, slow builds\ntags: bundle, imports, tree-shaking, barrel-files, performance\n---\n\n## Avoid Barrel File Imports\n\nImport directly from source files instead of barrel files to avoid loading thousands of unused modules. **Barrel files** are entry points that re-export multiple modules (e.g., `index.js` that does `export * from './module'`).\n\nPopular icon and component libraries can have **up to 10,000 re-exports** in their entry file. For many React packages, **it takes 200-800ms just to import them**, affecting both development speed and production cold starts.\n\n**Why tree-shaking doesn't help:** When a library is marked as external (not bundled), the bundler can't optimize it. If you bundle it to enable tree-shaking, builds become substantially slower analyzing the entire module graph.\n\n**Incorrect (imports entire library):**\n\n```tsx\nimport { Check, X, Menu } from 'lucide-react'\n// Loads 1,583 modules, takes ~2.8s extra in dev\n// Runtime cost: 200-800ms on every cold start\n\nimport { Button, TextField } from '@mui/material'\n// Loads 2,225 modules, takes ~4.2s extra in dev\n```\n\n**Correct (imports only what you need):**\n\n```tsx\nimport Check from 'lucide-react/dist/esm/icons/check'\nimport X from 'lucide-react/dist/esm/icons/x'\nimport Menu from 'lucide-react/dist/esm/icons/menu'\n// Loads only 3 modules (~2KB vs ~1MB)\n\nimport Button from '@mui/material/Button'\nimport TextField from '@mui/material/TextField'\n// Loads only what you use\n```\n\n**Alternative (Next.js 13.5+):**\n\n```js\n// next.config.js - use optimizePackageImports\nmodule.exports = {\n  experimental: {\n    optimizePackageImports: ['lucide-react', '@mui/material']\n  }\n}\n\n// Then you can keep the ergonomic barrel imports:\nimport { Check, X, Menu } from 'lucide-react'\n// Automatically transformed to direct imports at build time\n```\n\nDirect imports provide 15-70% faster dev boot, 28% faster builds, 40% faster cold starts, and significantly faster HMR.\n\nLibraries commonly affected: `lucide-react`, `@mui/material`, `@mui/icons-material`, `@tabler/icons-react`, `react-icons`, `@headlessui/react`, `@radix-ui/react-*`, `lodash`, `ramda`, `date-fns`, `rxjs`, `react-use`.\n\nReference: [How we optimized package imports in Next.js](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/bundle-conditional.md",
    "content": "---\ntitle: Conditional Module Loading\nimpact: HIGH\nimpactDescription: loads large data only when needed\ntags: bundle, conditional-loading, lazy-loading\n---\n\n## Conditional Module Loading\n\nLoad large data or modules only when a feature is activated.\n\n**Example (lazy-load animation frames):**\n\n```tsx\nfunction AnimationPlayer({ enabled }: { enabled: boolean }) {\n  const [frames, setFrames] = useState<Frame[] | null>(null)\n\n  useEffect(() => {\n    if (enabled && !frames && typeof window !== 'undefined') {\n      import('./animation-frames.js')\n        .then(mod => setFrames(mod.frames))\n        .catch(() => setEnabled(false))\n    }\n  }, [enabled, frames])\n\n  if (!frames) return <Skeleton />\n  return <Canvas frames={frames} />\n}\n```\n\nThe `typeof window !== 'undefined'` check prevents bundling this module for SSR, optimizing server bundle size and build speed.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/bundle-defer-third-party.md",
    "content": "---\ntitle: Defer Non-Critical Third-Party Libraries\nimpact: MEDIUM\nimpactDescription: loads after hydration\ntags: bundle, third-party, analytics, defer\n---\n\n## Defer Non-Critical Third-Party Libraries\n\nAnalytics, logging, and error tracking don't block user interaction. Load them after hydration.\n\n**Incorrect (blocks initial bundle):**\n\n```tsx\nimport { Analytics } from '@vercel/analytics/react'\n\nexport default function RootLayout({ children }) {\n  return (\n    <html>\n      <body>\n        {children}\n        <Analytics />\n      </body>\n    </html>\n  )\n}\n```\n\n**Correct (loads after hydration):**\n\n```tsx\nimport dynamic from 'next/dynamic'\n\nconst Analytics = dynamic(\n  () => import('@vercel/analytics/react').then(m => m.Analytics),\n  { ssr: false }\n)\n\nexport default function RootLayout({ children }) {\n  return (\n    <html>\n      <body>\n        {children}\n        <Analytics />\n      </body>\n    </html>\n  )\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/bundle-dynamic-imports.md",
    "content": "---\ntitle: Dynamic Imports for Heavy Components\nimpact: CRITICAL\nimpactDescription: directly affects TTI and LCP\ntags: bundle, dynamic-import, code-splitting, next-dynamic\n---\n\n## Dynamic Imports for Heavy Components\n\nUse `next/dynamic` to lazy-load large components not needed on initial render.\n\n**Incorrect (Monaco bundles with main chunk ~300KB):**\n\n```tsx\nimport { MonacoEditor } from './monaco-editor'\n\nfunction CodePanel({ code }: { code: string }) {\n  return <MonacoEditor value={code} />\n}\n```\n\n**Correct (Monaco loads on demand):**\n\n```tsx\nimport dynamic from 'next/dynamic'\n\nconst MonacoEditor = dynamic(\n  () => import('./monaco-editor').then(m => m.MonacoEditor),\n  { ssr: false }\n)\n\nfunction CodePanel({ code }: { code: string }) {\n  return <MonacoEditor value={code} />\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/bundle-preload.md",
    "content": "---\ntitle: Preload Based on User Intent\nimpact: MEDIUM\nimpactDescription: reduces perceived latency\ntags: bundle, preload, user-intent, hover\n---\n\n## Preload Based on User Intent\n\nPreload heavy bundles before they're needed to reduce perceived latency.\n\n**Example (preload on hover/focus):**\n\n```tsx\nfunction EditorButton({ onClick }: { onClick: () => void }) {\n  const preload = () => {\n    if (typeof window !== 'undefined') {\n      void import('./monaco-editor')\n    }\n  }\n\n  return (\n    <button\n      onMouseEnter={preload}\n      onFocus={preload}\n      onClick={onClick}\n    >\n      Open Editor\n    </button>\n  )\n}\n```\n\n**Example (preload when feature flag is enabled):**\n\n```tsx\nfunction FlagsProvider({ children, flags }: Props) {\n  useEffect(() => {\n    if (flags.editorEnabled && typeof window !== 'undefined') {\n      void import('./monaco-editor').then(mod => mod.init())\n    }\n  }, [flags.editorEnabled])\n\n  return <FlagsContext.Provider value={flags}>\n    {children}\n  </FlagsContext.Provider>\n}\n```\n\nThe `typeof window !== 'undefined'` check prevents bundling preloaded modules for SSR, optimizing server bundle size and build speed.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/client-event-listeners.md",
    "content": "---\ntitle: Deduplicate Global Event Listeners\nimpact: LOW\nimpactDescription: single listener for N components\ntags: client, swr, event-listeners, subscription\n---\n\n## Deduplicate Global Event Listeners\n\nUse `useSWRSubscription()` to share global event listeners across component instances.\n\n**Incorrect (N instances = N listeners):**\n\n```tsx\nfunction useKeyboardShortcut(key: string, callback: () => void) {\n  useEffect(() => {\n    const handler = (e: KeyboardEvent) => {\n      if (e.metaKey && e.key === key) {\n        callback()\n      }\n    }\n    window.addEventListener('keydown', handler)\n    return () => window.removeEventListener('keydown', handler)\n  }, [key, callback])\n}\n```\n\nWhen using the `useKeyboardShortcut` hook multiple times, each instance will register a new listener.\n\n**Correct (N instances = 1 listener):**\n\n```tsx\nimport useSWRSubscription from 'swr/subscription'\n\n// Module-level Map to track callbacks per key\nconst keyCallbacks = new Map<string, Set<() => void>>()\n\nfunction useKeyboardShortcut(key: string, callback: () => void) {\n  // Register this callback in the Map\n  useEffect(() => {\n    if (!keyCallbacks.has(key)) {\n      keyCallbacks.set(key, new Set())\n    }\n    keyCallbacks.get(key)!.add(callback)\n\n    return () => {\n      const set = keyCallbacks.get(key)\n      if (set) {\n        set.delete(callback)\n        if (set.size === 0) {\n          keyCallbacks.delete(key)\n        }\n      }\n    }\n  }, [key, callback])\n\n  useSWRSubscription('global-keydown', () => {\n    const handler = (e: KeyboardEvent) => {\n      if (e.metaKey && keyCallbacks.has(e.key)) {\n        keyCallbacks.get(e.key)!.forEach(cb => cb())\n      }\n    }\n    window.addEventListener('keydown', handler)\n    return () => window.removeEventListener('keydown', handler)\n  })\n}\n\nfunction Profile() {\n  // Multiple shortcuts will share the same listener\n  useKeyboardShortcut('p', () => { /* ... */ }) \n  useKeyboardShortcut('k', () => { /* ... */ })\n  // ...\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/client-swr-dedup.md",
    "content": "---\ntitle: Use SWR for Automatic Deduplication\nimpact: MEDIUM-HIGH\nimpactDescription: automatic deduplication\ntags: client, swr, deduplication, data-fetching\n---\n\n## Use SWR for Automatic Deduplication\n\nSWR enables request deduplication, caching, and revalidation across component instances.\n\n**Incorrect (no deduplication, each instance fetches):**\n\n```tsx\nfunction UserList() {\n  const [users, setUsers] = useState([])\n  useEffect(() => {\n    fetch('/api/users')\n      .then(r => r.json())\n      .then(setUsers)\n  }, [])\n}\n```\n\n**Correct (multiple instances share one request):**\n\n```tsx\nimport useSWR from 'swr'\n\nfunction UserList() {\n  const { data: users } = useSWR('/api/users', fetcher)\n}\n```\n\n**For immutable data:**\n\n```tsx\nimport { useImmutableSWR } from '@/lib/swr'\n\nfunction StaticContent() {\n  const { data } = useImmutableSWR('/api/config', fetcher)\n}\n```\n\n**For mutations:**\n\n```tsx\nimport { useSWRMutation } from 'swr/mutation'\n\nfunction UpdateButton() {\n  const { trigger } = useSWRMutation('/api/user', updateUser)\n  return <button onClick={() => trigger()}>Update</button>\n}\n```\n\nReference: [https://swr.vercel.app](https://swr.vercel.app)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-batch-dom-css.md",
    "content": "---\ntitle: Batch DOM CSS Changes\nimpact: MEDIUM\nimpactDescription: reduces reflows/repaints\ntags: javascript, dom, css, performance, reflow\n---\n\n## Batch DOM CSS Changes\n\nAvoid changing styles one property at a time. Group multiple CSS changes together via classes or `cssText` to minimize browser reflows.\n\n**Incorrect (multiple reflows):**\n\n```typescript\nfunction updateElementStyles(element: HTMLElement) {\n  // Each line triggers a reflow\n  element.style.width = '100px'\n  element.style.height = '200px'\n  element.style.backgroundColor = 'blue'\n  element.style.border = '1px solid black'\n}\n```\n\n**Correct (add class - single reflow):**\n\n```typescript\n// CSS file\n.highlighted-box {\n  width: 100px;\n  height: 200px;\n  background-color: blue;\n  border: 1px solid black;\n}\n\n// JavaScript\nfunction updateElementStyles(element: HTMLElement) {\n  element.classList.add('highlighted-box')\n}\n```\n\n**Correct (change cssText - single reflow):**\n\n```typescript\nfunction updateElementStyles(element: HTMLElement) {\n  element.style.cssText = `\n    width: 100px;\n    height: 200px;\n    background-color: blue;\n    border: 1px solid black;\n  `\n}\n```\n\n**React example:**\n\n```tsx\n// Incorrect: changing styles one by one\nfunction Box({ isHighlighted }: { isHighlighted: boolean }) {\n  const ref = useRef<HTMLDivElement>(null)\n  \n  useEffect(() => {\n    if (ref.current && isHighlighted) {\n      ref.current.style.width = '100px'\n      ref.current.style.height = '200px'\n      ref.current.style.backgroundColor = 'blue'\n    }\n  }, [isHighlighted])\n  \n  return <div ref={ref}>Content</div>\n}\n\n// Correct: toggle class\nfunction Box({ isHighlighted }: { isHighlighted: boolean }) {\n  return (\n    <div className={isHighlighted ? 'highlighted-box' : ''}>\n      Content\n    </div>\n  )\n}\n```\n\nPrefer CSS classes over inline styles when possible. Classes are cached by the browser and provide better separation of concerns.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-cache-function-results.md",
    "content": "---\ntitle: Cache Repeated Function Calls\nimpact: MEDIUM\nimpactDescription: avoid redundant computation\ntags: javascript, cache, memoization, performance\n---\n\n## Cache Repeated Function Calls\n\nUse a module-level Map to cache function results when the same function is called repeatedly with the same inputs during render.\n\n**Incorrect (redundant computation):**\n\n```typescript\nfunction ProjectList({ projects }: { projects: Project[] }) {\n  return (\n    <div>\n      {projects.map(project => {\n        // slugify() called 100+ times for same project names\n        const slug = slugify(project.name)\n        \n        return <ProjectCard key={project.id} slug={slug} />\n      })}\n    </div>\n  )\n}\n```\n\n**Correct (cached results):**\n\n```typescript\n// Module-level cache\nconst slugifyCache = new Map<string, string>()\n\nfunction cachedSlugify(text: string): string {\n  if (slugifyCache.has(text)) {\n    return slugifyCache.get(text)!\n  }\n  const result = slugify(text)\n  slugifyCache.set(text, result)\n  return result\n}\n\nfunction ProjectList({ projects }: { projects: Project[] }) {\n  return (\n    <div>\n      {projects.map(project => {\n        // Computed only once per unique project name\n        const slug = cachedSlugify(project.name)\n        \n        return <ProjectCard key={project.id} slug={slug} />\n      })}\n    </div>\n  )\n}\n```\n\n**Simpler pattern for single-value functions:**\n\n```typescript\nlet isLoggedInCache: boolean | null = null\n\nfunction isLoggedIn(): boolean {\n  if (isLoggedInCache !== null) {\n    return isLoggedInCache\n  }\n  \n  isLoggedInCache = document.cookie.includes('auth=')\n  return isLoggedInCache\n}\n\n// Clear cache when auth changes\nfunction onAuthChange() {\n  isLoggedInCache = null\n}\n```\n\nUse a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.\n\nReference: [How we made the Vercel Dashboard twice as fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-cache-property-access.md",
    "content": "---\ntitle: Cache Property Access in Loops\nimpact: LOW-MEDIUM\nimpactDescription: reduces lookups\ntags: javascript, loops, optimization, caching\n---\n\n## Cache Property Access in Loops\n\nCache object property lookups in hot paths.\n\n**Incorrect (3 lookups × N iterations):**\n\n```typescript\nfor (let i = 0; i < arr.length; i++) {\n  process(obj.config.settings.value)\n}\n```\n\n**Correct (1 lookup total):**\n\n```typescript\nconst value = obj.config.settings.value\nconst len = arr.length\nfor (let i = 0; i < len; i++) {\n  process(value)\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-cache-storage.md",
    "content": "---\ntitle: Cache Storage API Calls\nimpact: LOW-MEDIUM\nimpactDescription: reduces expensive I/O\ntags: javascript, localStorage, storage, caching, performance\n---\n\n## Cache Storage API Calls\n\n`localStorage`, `sessionStorage`, and `document.cookie` are synchronous and expensive. Cache reads in memory.\n\n**Incorrect (reads storage on every call):**\n\n```typescript\nfunction getTheme() {\n  return localStorage.getItem('theme') ?? 'light'\n}\n// Called 10 times = 10 storage reads\n```\n\n**Correct (Map cache):**\n\n```typescript\nconst storageCache = new Map<string, string | null>()\n\nfunction getLocalStorage(key: string) {\n  if (!storageCache.has(key)) {\n    storageCache.set(key, localStorage.getItem(key))\n  }\n  return storageCache.get(key)\n}\n\nfunction setLocalStorage(key: string, value: string) {\n  localStorage.setItem(key, value)\n  storageCache.set(key, value)  // keep cache in sync\n}\n```\n\nUse a Map (not a hook) so it works everywhere: utilities, event handlers, not just React components.\n\n**Cookie caching:**\n\n```typescript\nlet cookieCache: Record<string, string> | null = null\n\nfunction getCookie(name: string) {\n  if (!cookieCache) {\n    cookieCache = Object.fromEntries(\n      document.cookie.split('; ').map(c => c.split('='))\n    )\n  }\n  return cookieCache[name]\n}\n```\n\n**Important (invalidate on external changes):**\n\nIf storage can change externally (another tab, server-set cookies), invalidate cache:\n\n```typescript\nwindow.addEventListener('storage', (e) => {\n  if (e.key) storageCache.delete(e.key)\n})\n\ndocument.addEventListener('visibilitychange', () => {\n  if (document.visibilityState === 'visible') {\n    storageCache.clear()\n  }\n})\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-combine-iterations.md",
    "content": "---\ntitle: Combine Multiple Array Iterations\nimpact: LOW-MEDIUM\nimpactDescription: reduces iterations\ntags: javascript, arrays, loops, performance\n---\n\n## Combine Multiple Array Iterations\n\nMultiple `.filter()` or `.map()` calls iterate the array multiple times. Combine into one loop.\n\n**Incorrect (3 iterations):**\n\n```typescript\nconst admins = users.filter(u => u.isAdmin)\nconst testers = users.filter(u => u.isTester)\nconst inactive = users.filter(u => !u.isActive)\n```\n\n**Correct (1 iteration):**\n\n```typescript\nconst admins: User[] = []\nconst testers: User[] = []\nconst inactive: User[] = []\n\nfor (const user of users) {\n  if (user.isAdmin) admins.push(user)\n  if (user.isTester) testers.push(user)\n  if (!user.isActive) inactive.push(user)\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-early-exit.md",
    "content": "---\ntitle: Early Return from Functions\nimpact: LOW-MEDIUM\nimpactDescription: avoids unnecessary computation\ntags: javascript, functions, optimization, early-return\n---\n\n## Early Return from Functions\n\nReturn early when result is determined to skip unnecessary processing.\n\n**Incorrect (processes all items even after finding answer):**\n\n```typescript\nfunction validateUsers(users: User[]) {\n  let hasError = false\n  let errorMessage = ''\n  \n  for (const user of users) {\n    if (!user.email) {\n      hasError = true\n      errorMessage = 'Email required'\n    }\n    if (!user.name) {\n      hasError = true\n      errorMessage = 'Name required'\n    }\n    // Continues checking all users even after error found\n  }\n  \n  return hasError ? { valid: false, error: errorMessage } : { valid: true }\n}\n```\n\n**Correct (returns immediately on first error):**\n\n```typescript\nfunction validateUsers(users: User[]) {\n  for (const user of users) {\n    if (!user.email) {\n      return { valid: false, error: 'Email required' }\n    }\n    if (!user.name) {\n      return { valid: false, error: 'Name required' }\n    }\n  }\n\n  return { valid: true }\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-hoist-regexp.md",
    "content": "---\ntitle: Hoist RegExp Creation\nimpact: LOW-MEDIUM\nimpactDescription: avoids recreation\ntags: javascript, regexp, optimization, memoization\n---\n\n## Hoist RegExp Creation\n\nDon't create RegExp inside render. Hoist to module scope or memoize with `useMemo()`.\n\n**Incorrect (new RegExp every render):**\n\n```tsx\nfunction Highlighter({ text, query }: Props) {\n  const regex = new RegExp(`(${query})`, 'gi')\n  const parts = text.split(regex)\n  return <>{parts.map((part, i) => ...)}</>\n}\n```\n\n**Correct (memoize or hoist):**\n\n```tsx\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n\nfunction Highlighter({ text, query }: Props) {\n  const regex = useMemo(\n    () => new RegExp(`(${escapeRegex(query)})`, 'gi'),\n    [query]\n  )\n  const parts = text.split(regex)\n  return <>{parts.map((part, i) => ...)}</>\n}\n```\n\n**Warning (global regex has mutable state):**\n\nGlobal regex (`/g`) has mutable `lastIndex` state:\n\n```typescript\nconst regex = /foo/g\nregex.test('foo')  // true, lastIndex = 3\nregex.test('foo')  // false, lastIndex = 0\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-index-maps.md",
    "content": "---\ntitle: Build Index Maps for Repeated Lookups\nimpact: LOW-MEDIUM\nimpactDescription: 1M ops to 2K ops\ntags: javascript, map, indexing, optimization, performance\n---\n\n## Build Index Maps for Repeated Lookups\n\nMultiple `.find()` calls by the same key should use a Map.\n\n**Incorrect (O(n) per lookup):**\n\n```typescript\nfunction processOrders(orders: Order[], users: User[]) {\n  return orders.map(order => ({\n    ...order,\n    user: users.find(u => u.id === order.userId)\n  }))\n}\n```\n\n**Correct (O(1) per lookup):**\n\n```typescript\nfunction processOrders(orders: Order[], users: User[]) {\n  const userById = new Map(users.map(u => [u.id, u]))\n\n  return orders.map(order => ({\n    ...order,\n    user: userById.get(order.userId)\n  }))\n}\n```\n\nBuild map once (O(n)), then all lookups are O(1).\nFor 1000 orders × 1000 users: 1M ops → 2K ops.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-length-check-first.md",
    "content": "---\ntitle: Early Length Check for Array Comparisons\nimpact: MEDIUM-HIGH\nimpactDescription: avoids expensive operations when lengths differ\ntags: javascript, arrays, performance, optimization, comparison\n---\n\n## Early Length Check for Array Comparisons\n\nWhen comparing arrays with expensive operations (sorting, deep equality, serialization), check lengths first. If lengths differ, the arrays cannot be equal.\n\nIn real-world applications, this optimization is especially valuable when the comparison runs in hot paths (event handlers, render loops).\n\n**Incorrect (always runs expensive comparison):**\n\n```typescript\nfunction hasChanges(current: string[], original: string[]) {\n  // Always sorts and joins, even when lengths differ\n  return current.sort().join() !== original.sort().join()\n}\n```\n\nTwo O(n log n) sorts run even when `current.length` is 5 and `original.length` is 100. There is also overhead of joining the arrays and comparing the strings.\n\n**Correct (O(1) length check first):**\n\n```typescript\nfunction hasChanges(current: string[], original: string[]) {\n  // Early return if lengths differ\n  if (current.length !== original.length) {\n    return true\n  }\n  // Only sort/join when lengths match\n  const currentSorted = current.toSorted()\n  const originalSorted = original.toSorted()\n  for (let i = 0; i < currentSorted.length; i++) {\n    if (currentSorted[i] !== originalSorted[i]) {\n      return true\n    }\n  }\n  return false\n}\n```\n\nThis new approach is more efficient because:\n- It avoids the overhead of sorting and joining the arrays when lengths differ\n- It avoids consuming memory for the joined strings (especially important for large arrays)\n- It avoids mutating the original arrays\n- It returns early when a difference is found\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-min-max-loop.md",
    "content": "---\ntitle: Use Loop for Min/Max Instead of Sort\nimpact: LOW\nimpactDescription: O(n) instead of O(n log n)\ntags: javascript, arrays, performance, sorting, algorithms\n---\n\n## Use Loop for Min/Max Instead of Sort\n\nFinding the smallest or largest element only requires a single pass through the array. Sorting is wasteful and slower.\n\n**Incorrect (O(n log n) - sort to find latest):**\n\n```typescript\ninterface Project {\n  id: string\n  name: string\n  updatedAt: number\n}\n\nfunction getLatestProject(projects: Project[]) {\n  const sorted = [...projects].sort((a, b) => b.updatedAt - a.updatedAt)\n  return sorted[0]\n}\n```\n\nSorts the entire array just to find the maximum value.\n\n**Incorrect (O(n log n) - sort for oldest and newest):**\n\n```typescript\nfunction getOldestAndNewest(projects: Project[]) {\n  const sorted = [...projects].sort((a, b) => a.updatedAt - b.updatedAt)\n  return { oldest: sorted[0], newest: sorted[sorted.length - 1] }\n}\n```\n\nStill sorts unnecessarily when only min/max are needed.\n\n**Correct (O(n) - single loop):**\n\n```typescript\nfunction getLatestProject(projects: Project[]) {\n  if (projects.length === 0) return null\n  \n  let latest = projects[0]\n  \n  for (let i = 1; i < projects.length; i++) {\n    if (projects[i].updatedAt > latest.updatedAt) {\n      latest = projects[i]\n    }\n  }\n  \n  return latest\n}\n\nfunction getOldestAndNewest(projects: Project[]) {\n  if (projects.length === 0) return { oldest: null, newest: null }\n  \n  let oldest = projects[0]\n  let newest = projects[0]\n  \n  for (let i = 1; i < projects.length; i++) {\n    if (projects[i].updatedAt < oldest.updatedAt) oldest = projects[i]\n    if (projects[i].updatedAt > newest.updatedAt) newest = projects[i]\n  }\n  \n  return { oldest, newest }\n}\n```\n\nSingle pass through the array, no copying, no sorting.\n\n**Alternative (Math.min/Math.max for small arrays):**\n\n```typescript\nconst numbers = [5, 2, 8, 1, 9]\nconst min = Math.min(...numbers)\nconst max = Math.max(...numbers)\n```\n\nThis works for small arrays but can be slower for very large arrays due to spread operator limitations. Use the loop approach for reliability.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-set-map-lookups.md",
    "content": "---\ntitle: Use Set/Map for O(1) Lookups\nimpact: LOW-MEDIUM\nimpactDescription: O(n) to O(1)\ntags: javascript, set, map, data-structures, performance\n---\n\n## Use Set/Map for O(1) Lookups\n\nConvert arrays to Set/Map for repeated membership checks.\n\n**Incorrect (O(n) per check):**\n\n```typescript\nconst allowedIds = ['a', 'b', 'c', ...]\nitems.filter(item => allowedIds.includes(item.id))\n```\n\n**Correct (O(1) per check):**\n\n```typescript\nconst allowedIds = new Set(['a', 'b', 'c', ...])\nitems.filter(item => allowedIds.has(item.id))\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/js-tosorted-immutable.md",
    "content": "---\ntitle: Use toSorted() Instead of sort() for Immutability\nimpact: MEDIUM-HIGH\nimpactDescription: prevents mutation bugs in React state\ntags: javascript, arrays, immutability, react, state, mutation\n---\n\n## Use toSorted() Instead of sort() for Immutability\n\n`.sort()` mutates the array in place, which can cause bugs with React state and props. Use `.toSorted()` to create a new sorted array without mutation.\n\n**Incorrect (mutates original array):**\n\n```typescript\nfunction UserList({ users }: { users: User[] }) {\n  // Mutates the users prop array!\n  const sorted = useMemo(\n    () => users.sort((a, b) => a.name.localeCompare(b.name)),\n    [users]\n  )\n  return <div>{sorted.map(renderUser)}</div>\n}\n```\n\n**Correct (creates new array):**\n\n```typescript\nfunction UserList({ users }: { users: User[] }) {\n  // Creates new sorted array, original unchanged\n  const sorted = useMemo(\n    () => users.toSorted((a, b) => a.name.localeCompare(b.name)),\n    [users]\n  )\n  return <div>{sorted.map(renderUser)}</div>\n}\n```\n\n**Why this matters in React:**\n\n1. Props/state mutations break React's immutability model - React expects props and state to be treated as read-only\n2. Causes stale closure bugs - Mutating arrays inside closures (callbacks, effects) can lead to unexpected behavior\n\n**Browser support (fallback for older browsers):**\n\n`.toSorted()` is available in all modern browsers (Chrome 110+, Safari 16+, Firefox 115+, Node.js 20+). For older environments, use spread operator:\n\n```typescript\n// Fallback for older browsers\nconst sorted = [...items].sort((a, b) => a.value - b.value)\n```\n\n**Other immutable array methods:**\n\n- `.toSorted()` - immutable sort\n- `.toReversed()` - immutable reverse\n- `.toSpliced()` - immutable splice\n- `.with()` - immutable element replacement\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-activity.md",
    "content": "---\ntitle: Use Activity Component for Show/Hide\nimpact: MEDIUM\nimpactDescription: preserves state/DOM\ntags: rendering, activity, visibility, state-preservation\n---\n\n## Use Activity Component for Show/Hide\n\nUse React's `<Activity>` to preserve state/DOM for expensive components that frequently toggle visibility.\n\n**Usage:**\n\n```tsx\nimport { Activity } from 'react'\n\nfunction Dropdown({ isOpen }: Props) {\n  return (\n    <Activity mode={isOpen ? 'visible' : 'hidden'}>\n      <ExpensiveMenu />\n    </Activity>\n  )\n}\n```\n\nAvoids expensive re-renders and state loss.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md",
    "content": "---\ntitle: Animate SVG Wrapper Instead of SVG Element\nimpact: LOW\nimpactDescription: enables hardware acceleration\ntags: rendering, svg, css, animation, performance\n---\n\n## Animate SVG Wrapper Instead of SVG Element\n\nMany browsers don't have hardware acceleration for CSS3 animations on SVG elements. Wrap SVG in a `<div>` and animate the wrapper instead.\n\n**Incorrect (animating SVG directly - no hardware acceleration):**\n\n```tsx\nfunction LoadingSpinner() {\n  return (\n    <svg \n      className=\"animate-spin\"\n      width=\"24\" \n      height=\"24\" \n      viewBox=\"0 0 24 24\"\n    >\n      <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" />\n    </svg>\n  )\n}\n```\n\n**Correct (animating wrapper div - hardware accelerated):**\n\n```tsx\nfunction LoadingSpinner() {\n  return (\n    <div className=\"animate-spin\">\n      <svg \n        width=\"24\" \n        height=\"24\" \n        viewBox=\"0 0 24 24\"\n      >\n        <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" />\n      </svg>\n    </div>\n  )\n}\n```\n\nThis applies to all CSS transforms and transitions (`transform`, `opacity`, `translate`, `scale`, `rotate`). The wrapper div allows browsers to use GPU acceleration for smoother animations.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-conditional-render.md",
    "content": "---\ntitle: Use Explicit Conditional Rendering\nimpact: LOW\nimpactDescription: prevents rendering 0 or NaN\ntags: rendering, conditional, jsx, falsy-values\n---\n\n## Use Explicit Conditional Rendering\n\nUse explicit ternary operators (`? :`) instead of `&&` for conditional rendering when the condition can be `0`, `NaN`, or other falsy values that render.\n\n**Incorrect (renders \"0\" when count is 0):**\n\n```tsx\nfunction Badge({ count }: { count: number }) {\n  return (\n    <div>\n      {count && <span className=\"badge\">{count}</span>}\n    </div>\n  )\n}\n\n// When count = 0, renders: <div>0</div>\n// When count = 5, renders: <div><span class=\"badge\">5</span></div>\n```\n\n**Correct (renders nothing when count is 0):**\n\n```tsx\nfunction Badge({ count }: { count: number }) {\n  return (\n    <div>\n      {count > 0 ? <span className=\"badge\">{count}</span> : null}\n    </div>\n  )\n}\n\n// When count = 0, renders: <div></div>\n// When count = 5, renders: <div><span class=\"badge\">5</span></div>\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-content-visibility.md",
    "content": "---\ntitle: CSS content-visibility for Long Lists\nimpact: HIGH\nimpactDescription: faster initial render\ntags: rendering, css, content-visibility, long-lists\n---\n\n## CSS content-visibility for Long Lists\n\nApply `content-visibility: auto` to defer off-screen rendering.\n\n**CSS:**\n\n```css\n.message-item {\n  content-visibility: auto;\n  contain-intrinsic-size: 0 80px;\n}\n```\n\n**Example:**\n\n```tsx\nfunction MessageList({ messages }: { messages: Message[] }) {\n  return (\n    <div className=\"overflow-y-auto h-screen\">\n      {messages.map(msg => (\n        <div key={msg.id} className=\"message-item\">\n          <Avatar user={msg.author} />\n          <div>{msg.content}</div>\n        </div>\n      ))}\n    </div>\n  )\n}\n```\n\nFor 1000 messages, browser skips layout/paint for ~990 off-screen items (10× faster initial render).\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-hoist-jsx.md",
    "content": "---\ntitle: Hoist Static JSX Elements\nimpact: LOW\nimpactDescription: avoids re-creation\ntags: rendering, jsx, static, optimization\n---\n\n## Hoist Static JSX Elements\n\nExtract static JSX outside components to avoid re-creation.\n\n**Incorrect (recreates element every render):**\n\n```tsx\nfunction LoadingSkeleton() {\n  return <div className=\"animate-pulse h-20 bg-gray-200\" />\n}\n\nfunction Container() {\n  return (\n    <div>\n      {loading && <LoadingSkeleton />}\n    </div>\n  )\n}\n```\n\n**Correct (reuses same element):**\n\n```tsx\nconst loadingSkeleton = (\n  <div className=\"animate-pulse h-20 bg-gray-200\" />\n)\n\nfunction Container() {\n  return (\n    <div>\n      {loading && loadingSkeleton}\n    </div>\n  )\n}\n```\n\nThis is especially helpful for large and static SVG nodes, which can be expensive to recreate on every render.\n\n**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, the compiler automatically hoists static JSX elements and optimizes component re-renders, making manual hoisting unnecessary.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md",
    "content": "---\ntitle: Prevent Hydration Mismatch Without Flickering\nimpact: MEDIUM\nimpactDescription: avoids visual flicker and hydration errors\ntags: rendering, ssr, hydration, localStorage, flicker\n---\n\n## Prevent Hydration Mismatch Without Flickering\n\nWhen rendering content that depends on client-side storage (localStorage, cookies), avoid both SSR breakage and post-hydration flickering by injecting a synchronous script that updates the DOM before React hydrates.\n\n**Incorrect (breaks SSR):**\n\n```tsx\nfunction ThemeWrapper({ children }: { children: ReactNode }) {\n  // localStorage is not available on server - throws error\n  const theme = localStorage.getItem('theme') || 'light'\n  \n  return (\n    <div className={theme}>\n      {children}\n    </div>\n  )\n}\n```\n\nServer-side rendering will fail because `localStorage` is undefined.\n\n**Incorrect (visual flickering):**\n\n```tsx\nfunction ThemeWrapper({ children }: { children: ReactNode }) {\n  const [theme, setTheme] = useState('light')\n  \n  useEffect(() => {\n    // Runs after hydration - causes visible flash\n    const stored = localStorage.getItem('theme')\n    if (stored) {\n      setTheme(stored)\n    }\n  }, [])\n  \n  return (\n    <div className={theme}>\n      {children}\n    </div>\n  )\n}\n```\n\nComponent first renders with default value (`light`), then updates after hydration, causing a visible flash of incorrect content.\n\n**Correct (no flicker, no hydration mismatch):**\n\n```tsx\nfunction ThemeWrapper({ children }: { children: ReactNode }) {\n  return (\n    <>\n      <div id=\"theme-wrapper\">\n        {children}\n      </div>\n      <script\n        dangerouslySetInnerHTML={{\n          __html: `\n            (function() {\n              try {\n                var theme = localStorage.getItem('theme') || 'light';\n                var el = document.getElementById('theme-wrapper');\n                if (el) el.className = theme;\n              } catch (e) {}\n            })();\n          `,\n        }}\n      />\n    </>\n  )\n}\n```\n\nThe inline script executes synchronously before showing the element, ensuring the DOM already has the correct value. No flickering, no hydration mismatch.\n\nThis pattern is especially useful for theme toggles, user preferences, authentication states, and any client-only data that should render immediately without flashing default values.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rendering-svg-precision.md",
    "content": "---\ntitle: Optimize SVG Precision\nimpact: LOW\nimpactDescription: reduces file size\ntags: rendering, svg, optimization, svgo\n---\n\n## Optimize SVG Precision\n\nReduce SVG coordinate precision to decrease file size. The optimal precision depends on the viewBox size, but in general reducing precision should be considered.\n\n**Incorrect (excessive precision):**\n\n```svg\n<path d=\"M 10.293847 20.847362 L 30.938472 40.192837\" />\n```\n\n**Correct (1 decimal place):**\n\n```svg\n<path d=\"M 10.3 20.8 L 30.9 40.2\" />\n```\n\n**Automate with SVGO:**\n\n```bash\nnpx svgo --precision=1 --multipass icon.svg\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-defer-reads.md",
    "content": "---\ntitle: Defer State Reads to Usage Point\nimpact: MEDIUM\nimpactDescription: avoids unnecessary subscriptions\ntags: rerender, searchParams, localStorage, optimization\n---\n\n## Defer State Reads to Usage Point\n\nDon't subscribe to dynamic state (searchParams, localStorage) if you only read it inside callbacks.\n\n**Incorrect (subscribes to all searchParams changes):**\n\n```tsx\nfunction ShareButton({ chatId }: { chatId: string }) {\n  const searchParams = useSearchParams()\n\n  const handleShare = () => {\n    const ref = searchParams.get('ref')\n    shareChat(chatId, { ref })\n  }\n\n  return <button onClick={handleShare}>Share</button>\n}\n```\n\n**Correct (reads on demand, no subscription):**\n\n```tsx\nfunction ShareButton({ chatId }: { chatId: string }) {\n  const handleShare = () => {\n    const params = new URLSearchParams(window.location.search)\n    const ref = params.get('ref')\n    shareChat(chatId, { ref })\n  }\n\n  return <button onClick={handleShare}>Share</button>\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-dependencies.md",
    "content": "---\ntitle: Narrow Effect Dependencies\nimpact: LOW\nimpactDescription: minimizes effect re-runs\ntags: rerender, useEffect, dependencies, optimization\n---\n\n## Narrow Effect Dependencies\n\nSpecify primitive dependencies instead of objects to minimize effect re-runs.\n\n**Incorrect (re-runs on any user field change):**\n\n```tsx\nuseEffect(() => {\n  console.log(user.id)\n}, [user])\n```\n\n**Correct (re-runs only when id changes):**\n\n```tsx\nuseEffect(() => {\n  console.log(user.id)\n}, [user.id])\n```\n\n**For derived state, compute outside effect:**\n\n```tsx\n// Incorrect: runs on width=767, 766, 765...\nuseEffect(() => {\n  if (width < 768) {\n    enableMobileMode()\n  }\n}, [width])\n\n// Correct: runs only on boolean transition\nconst isMobile = width < 768\nuseEffect(() => {\n  if (isMobile) {\n    enableMobileMode()\n  }\n}, [isMobile])\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-derived-state.md",
    "content": "---\ntitle: Subscribe to Derived State\nimpact: MEDIUM\nimpactDescription: reduces re-render frequency\ntags: rerender, derived-state, media-query, optimization\n---\n\n## Subscribe to Derived State\n\nSubscribe to derived boolean state instead of continuous values to reduce re-render frequency.\n\n**Incorrect (re-renders on every pixel change):**\n\n```tsx\nfunction Sidebar() {\n  const width = useWindowWidth()  // updates continuously\n  const isMobile = width < 768\n  return <nav className={isMobile ? 'mobile' : 'desktop'}>\n}\n```\n\n**Correct (re-renders only when boolean changes):**\n\n```tsx\nfunction Sidebar() {\n  const isMobile = useMediaQuery('(max-width: 767px)')\n  return <nav className={isMobile ? 'mobile' : 'desktop'}>\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-functional-setstate.md",
    "content": "---\ntitle: Use Functional setState Updates\nimpact: MEDIUM\nimpactDescription: prevents stale closures and unnecessary callback recreations\ntags: react, hooks, useState, useCallback, callbacks, closures\n---\n\n## Use Functional setState Updates\n\nWhen updating state based on the current state value, use the functional update form of setState instead of directly referencing the state variable. This prevents stale closures, eliminates unnecessary dependencies, and creates stable callback references.\n\n**Incorrect (requires state as dependency):**\n\n```tsx\nfunction TodoList() {\n  const [items, setItems] = useState(initialItems)\n  \n  // Callback must depend on items, recreated on every items change\n  const addItems = useCallback((newItems: Item[]) => {\n    setItems([...items, ...newItems])\n  }, [items])  // ❌ items dependency causes recreations\n  \n  // Risk of stale closure if dependency is forgotten\n  const removeItem = useCallback((id: string) => {\n    setItems(items.filter(item => item.id !== id))\n  }, [])  // ❌ Missing items dependency - will use stale items!\n  \n  return <ItemsEditor items={items} onAdd={addItems} onRemove={removeItem} />\n}\n```\n\nThe first callback is recreated every time `items` changes, which can cause child components to re-render unnecessarily. The second callback has a stale closure bug—it will always reference the initial `items` value.\n\n**Correct (stable callbacks, no stale closures):**\n\n```tsx\nfunction TodoList() {\n  const [items, setItems] = useState(initialItems)\n  \n  // Stable callback, never recreated\n  const addItems = useCallback((newItems: Item[]) => {\n    setItems(curr => [...curr, ...newItems])\n  }, [])  // ✅ No dependencies needed\n  \n  // Always uses latest state, no stale closure risk\n  const removeItem = useCallback((id: string) => {\n    setItems(curr => curr.filter(item => item.id !== id))\n  }, [])  // ✅ Safe and stable\n  \n  return <ItemsEditor items={items} onAdd={addItems} onRemove={removeItem} />\n}\n```\n\n**Benefits:**\n\n1. **Stable callback references** - Callbacks don't need to be recreated when state changes\n2. **No stale closures** - Always operates on the latest state value\n3. **Fewer dependencies** - Simplifies dependency arrays and reduces memory leaks\n4. **Prevents bugs** - Eliminates the most common source of React closure bugs\n\n**When to use functional updates:**\n\n- Any setState that depends on the current state value\n- Inside useCallback/useMemo when state is needed\n- Event handlers that reference state\n- Async operations that update state\n\n**When direct updates are fine:**\n\n- Setting state to a static value: `setCount(0)`\n- Setting state from props/arguments only: `setName(newName)`\n- State doesn't depend on previous value\n\n**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, the compiler can automatically optimize some cases, but functional updates are still recommended for correctness and to prevent stale closure bugs.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-lazy-state-init.md",
    "content": "---\ntitle: Use Lazy State Initialization\nimpact: MEDIUM\nimpactDescription: wasted computation on every render\ntags: react, hooks, useState, performance, initialization\n---\n\n## Use Lazy State Initialization\n\nPass a function to `useState` for expensive initial values. Without the function form, the initializer runs on every render even though the value is only used once.\n\n**Incorrect (runs on every render):**\n\n```tsx\nfunction FilteredList({ items }: { items: Item[] }) {\n  // buildSearchIndex() runs on EVERY render, even after initialization\n  const [searchIndex, setSearchIndex] = useState(buildSearchIndex(items))\n  const [query, setQuery] = useState('')\n  \n  // When query changes, buildSearchIndex runs again unnecessarily\n  return <SearchResults index={searchIndex} query={query} />\n}\n\nfunction UserProfile() {\n  // JSON.parse runs on every render\n  const [settings, setSettings] = useState(\n    JSON.parse(localStorage.getItem('settings') || '{}')\n  )\n  \n  return <SettingsForm settings={settings} onChange={setSettings} />\n}\n```\n\n**Correct (runs only once):**\n\n```tsx\nfunction FilteredList({ items }: { items: Item[] }) {\n  // buildSearchIndex() runs ONLY on initial render\n  const [searchIndex, setSearchIndex] = useState(() => buildSearchIndex(items))\n  const [query, setQuery] = useState('')\n  \n  return <SearchResults index={searchIndex} query={query} />\n}\n\nfunction UserProfile() {\n  // JSON.parse runs only on initial render\n  const [settings, setSettings] = useState(() => {\n    const stored = localStorage.getItem('settings')\n    return stored ? JSON.parse(stored) : {}\n  })\n  \n  return <SettingsForm settings={settings} onChange={setSettings} />\n}\n```\n\nUse lazy initialization when computing initial values from localStorage/sessionStorage, building data structures (indexes, maps), reading from the DOM, or performing heavy transformations.\n\nFor simple primitives (`useState(0)`), direct references (`useState(props.value)`), or cheap literals (`useState({})`), the function form is unnecessary.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-memo.md",
    "content": "---\ntitle: Extract to Memoized Components\nimpact: MEDIUM\nimpactDescription: enables early returns\ntags: rerender, memo, useMemo, optimization\n---\n\n## Extract to Memoized Components\n\nExtract expensive work into memoized components to enable early returns before computation.\n\n**Incorrect (computes avatar even when loading):**\n\n```tsx\nfunction Profile({ user, loading }: Props) {\n  const avatar = useMemo(() => {\n    const id = computeAvatarId(user)\n    return <Avatar id={id} />\n  }, [user])\n\n  if (loading) return <Skeleton />\n  return <div>{avatar}</div>\n}\n```\n\n**Correct (skips computation when loading):**\n\n```tsx\nconst UserAvatar = memo(function UserAvatar({ user }: { user: User }) {\n  const id = useMemo(() => computeAvatarId(user), [user])\n  return <Avatar id={id} />\n})\n\nfunction Profile({ user, loading }: Props) {\n  if (loading) return <Skeleton />\n  return (\n    <div>\n      <UserAvatar user={user} />\n    </div>\n  )\n}\n```\n\n**Note:** If your project has [React Compiler](https://react.dev/learn/react-compiler) enabled, manual memoization with `memo()` and `useMemo()` is not necessary. The compiler automatically optimizes re-renders.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/rerender-transitions.md",
    "content": "---\ntitle: Use Transitions for Non-Urgent Updates\nimpact: MEDIUM\nimpactDescription: maintains UI responsiveness\ntags: rerender, transitions, startTransition, performance\n---\n\n## Use Transitions for Non-Urgent Updates\n\nMark frequent, non-urgent state updates as transitions to maintain UI responsiveness.\n\n**Incorrect (blocks UI on every scroll):**\n\n```tsx\nfunction ScrollTracker() {\n  const [scrollY, setScrollY] = useState(0)\n  useEffect(() => {\n    const handler = () => setScrollY(window.scrollY)\n    window.addEventListener('scroll', handler, { passive: true })\n    return () => window.removeEventListener('scroll', handler)\n  }, [])\n}\n```\n\n**Correct (non-blocking updates):**\n\n```tsx\nimport { startTransition } from 'react'\n\nfunction ScrollTracker() {\n  const [scrollY, setScrollY] = useState(0)\n  useEffect(() => {\n    const handler = () => {\n      startTransition(() => setScrollY(window.scrollY))\n    }\n    window.addEventListener('scroll', handler, { passive: true })\n    return () => window.removeEventListener('scroll', handler)\n  }, [])\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/server-after-nonblocking.md",
    "content": "---\ntitle: Use after() for Non-Blocking Operations\nimpact: MEDIUM\nimpactDescription: faster response times\ntags: server, async, logging, analytics, side-effects\n---\n\n## Use after() for Non-Blocking Operations\n\nUse Next.js's `after()` to schedule work that should execute after a response is sent. This prevents logging, analytics, and other side effects from blocking the response.\n\n**Incorrect (blocks response):**\n\n```tsx\nimport { logUserAction } from '@/app/utils'\n\nexport async function POST(request: Request) {\n  // Perform mutation\n  await updateDatabase(request)\n  \n  // Logging blocks the response\n  const userAgent = request.headers.get('user-agent') || 'unknown'\n  await logUserAction({ userAgent })\n  \n  return new Response(JSON.stringify({ status: 'success' }), {\n    status: 200,\n    headers: { 'Content-Type': 'application/json' }\n  })\n}\n```\n\n**Correct (non-blocking):**\n\n```tsx\nimport { after } from 'next/server'\nimport { headers, cookies } from 'next/headers'\nimport { logUserAction } from '@/app/utils'\n\nexport async function POST(request: Request) {\n  // Perform mutation\n  await updateDatabase(request)\n  \n  // Log after response is sent\n  after(async () => {\n    const userAgent = (await headers()).get('user-agent') || 'unknown'\n    const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'\n    \n    logUserAction({ sessionCookie, userAgent })\n  })\n  \n  return new Response(JSON.stringify({ status: 'success' }), {\n    status: 200,\n    headers: { 'Content-Type': 'application/json' }\n  })\n}\n```\n\nThe response is sent immediately while logging happens in the background.\n\n**Common use cases:**\n\n- Analytics tracking\n- Audit logging\n- Sending notifications\n- Cache invalidation\n- Cleanup tasks\n\n**Important notes:**\n\n- `after()` runs even if the response fails or redirects\n- Works in Server Actions, Route Handlers, and Server Components\n\nReference: [https://nextjs.org/docs/app/api-reference/functions/after](https://nextjs.org/docs/app/api-reference/functions/after)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/server-cache-lru.md",
    "content": "---\ntitle: Cross-Request LRU Caching\nimpact: HIGH\nimpactDescription: caches across requests\ntags: server, cache, lru, cross-request\n---\n\n## Cross-Request LRU Caching\n\n`React.cache()` only works within one request. For data shared across sequential requests (user clicks button A then button B), use an LRU cache.\n\n**Implementation:**\n\n```typescript\nimport { LRUCache } from 'lru-cache'\n\nconst cache = new LRUCache<string, any>({\n  max: 1000,\n  ttl: 5 * 60 * 1000  // 5 minutes\n})\n\nexport async function getUser(id: string) {\n  const cached = cache.get(id)\n  if (cached) return cached\n\n  const user = await db.user.findUnique({ where: { id } })\n  cache.set(id, user)\n  return user\n}\n\n// Request 1: DB query, result cached\n// Request 2: cache hit, no DB query\n```\n\nUse when sequential user actions hit multiple endpoints needing the same data within seconds.\n\n**With Vercel's [Fluid Compute](https://vercel.com/docs/fluid-compute):** LRU caching is especially effective because multiple concurrent requests can share the same function instance and cache. This means the cache persists across requests without needing external storage like Redis.\n\n**In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching.\n\nReference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache)\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/server-cache-react.md",
    "content": "---\ntitle: Per-Request Deduplication with React.cache()\nimpact: MEDIUM\nimpactDescription: deduplicates within request\ntags: server, cache, react-cache, deduplication\n---\n\n## Per-Request Deduplication with React.cache()\n\nUse `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.\n\n**Usage:**\n\n```typescript\nimport { cache } from 'react'\n\nexport const getCurrentUser = cache(async () => {\n  const session = await auth()\n  if (!session?.user?.id) return null\n  return await db.user.findUnique({\n    where: { id: session.user.id }\n  })\n})\n```\n\nWithin a single request, multiple calls to `getCurrentUser()` execute the query only once.\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/server-parallel-fetching.md",
    "content": "---\ntitle: Parallel Data Fetching with Component Composition\nimpact: CRITICAL\nimpactDescription: eliminates server-side waterfalls\ntags: server, rsc, parallel-fetching, composition\n---\n\n## Parallel Data Fetching with Component Composition\n\nReact Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.\n\n**Incorrect (Sidebar waits for Page's fetch to complete):**\n\n```tsx\nexport default async function Page() {\n  const header = await fetchHeader()\n  return (\n    <div>\n      <div>{header}</div>\n      <Sidebar />\n    </div>\n  )\n}\n\nasync function Sidebar() {\n  const items = await fetchSidebarItems()\n  return <nav>{items.map(renderItem)}</nav>\n}\n```\n\n**Correct (both fetch simultaneously):**\n\n```tsx\nasync function Header() {\n  const data = await fetchHeader()\n  return <div>{data}</div>\n}\n\nasync function Sidebar() {\n  const items = await fetchSidebarItems()\n  return <nav>{items.map(renderItem)}</nav>\n}\n\nexport default function Page() {\n  return (\n    <div>\n      <Header />\n      <Sidebar />\n    </div>\n  )\n}\n```\n\n**Alternative with children prop:**\n\n```tsx\nasync function Layout({ children }: { children: ReactNode }) {\n  const header = await fetchHeader()\n  return (\n    <div>\n      <div>{header}</div>\n      {children}\n    </div>\n  )\n}\n\nasync function Sidebar() {\n  const items = await fetchSidebarItems()\n  return <nav>{items.map(renderItem)}</nav>\n}\n\nexport default function Page() {\n  return (\n    <Layout>\n      <Sidebar />\n    </Layout>\n  )\n}\n```\n"
  },
  {
    "path": ".claude/skills/react-best-practices/rules/server-serialization.md",
    "content": "---\ntitle: Minimize Serialization at RSC Boundaries\nimpact: HIGH\nimpactDescription: reduces data transfer size\ntags: server, rsc, serialization, props\n---\n\n## Minimize Serialization at RSC Boundaries\n\nThe React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.\n\n**Incorrect (serializes all 50 fields):**\n\n```tsx\nasync function Page() {\n  const user = await fetchUser()  // 50 fields\n  return <Profile user={user} />\n}\n\n'use client'\nfunction Profile({ user }: { user: User }) {\n  return <div>{user.name}</div>  // uses 1 field\n}\n```\n\n**Correct (serializes only 1 field):**\n\n```tsx\nasync function Page() {\n  const user = await fetchUser()\n  return <Profile name={user.name} />\n}\n\n'use client'\nfunction Profile({ name }: { name: string }) {\n  return <div>{name}</div>\n}\n```\n"
  },
  {
    "path": ".dockerignore",
    "content": "node_modules\n.next\ndist\n.turbo\n.git\n*.log\n.env*\n!.env.template\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: ridafkih\n"
  },
  {
    "path": ".github/workflows/checks.yml",
    "content": "name: Check Code Standards\n\non:\n  pull_request:\n    branches: [main]\n\njobs:\n  types:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: oven-sh/setup-bun@v2\n      - run: bun install --frozen-lockfile\n      - run: bun run types\n\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: oven-sh/setup-bun@v2\n      - run: bun install --frozen-lockfile\n      - run: bun run lint\n\n  unused:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: oven-sh/setup-bun@v2\n      - run: bun install --frozen-lockfile\n      - run: bun run unused\n\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: oven-sh/setup-bun@v2\n      - run: bun install --frozen-lockfile\n      - run: bun run test\n"
  },
  {
    "path": ".github/workflows/docker-publish.yml",
    "content": "name: Publish Docker Images\n\non:\n  push:\n    tags:\n      - \"v*.*.*\"\n\nconcurrency:\n  group: publish-${{ github.ref }}\n  cancel-in-progress: false\n\nenv:\n  REGISTRY: ghcr.io\n\njobs:\n  build-core:\n    strategy:\n      matrix:\n        arch: [amd64, arm64]\n        package:\n          - name: api\n            dockerfile: services/api/Dockerfile\n          - name: cron\n            dockerfile: services/cron/Dockerfile\n          - name: worker\n            dockerfile: services/worker/Dockerfile\n          - name: mcp\n            dockerfile: services/mcp/Dockerfile\n          - name: web\n            dockerfile: applications/web/Dockerfile\n        include:\n          - arch: amd64\n            runner: ubuntu-24.04\n          - arch: arm64\n            runner: ubuntu-24.04-arm\n    runs-on: ${{ matrix.runner }}\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: docker/setup-buildx-action@v3\n      - uses: docker/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - id: meta\n        uses: docker/metadata-action@v5\n        with:\n          images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/keeper-${{ matrix.package.name }}\n          tags: |\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref, '-') }}\n            type=raw,value=latest,enable=${{ !contains(github.ref, '-') }}\n          flavor: suffix=-${{ matrix.arch }}\n      - uses: docker/build-push-action@v6\n        with:\n          context: .\n          file: ${{ matrix.package.dockerfile }}\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n          cache-from: type=gha,scope=${{ matrix.package.name }}-${{ matrix.arch }}\n          cache-to: type=gha,mode=max,scope=${{ matrix.package.name }}-${{ matrix.arch }}\n\n  build-convenience:\n    strategy:\n      matrix:\n        package: [standalone, services]\n        arch: [amd64, arm64]\n        include:\n          - arch: amd64\n            runner: ubuntu-24.04\n          - arch: arm64\n            runner: ubuntu-24.04-arm\n    runs-on: ${{ matrix.runner }}\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: docker/setup-buildx-action@v3\n      - uses: docker/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - id: meta\n        uses: docker/metadata-action@v5\n        with:\n          images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/keeper-${{ matrix.package }}\n          tags: |\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref, '-') }}\n            type=raw,value=latest,enable=${{ !contains(github.ref, '-') }}\n          flavor: suffix=-${{ matrix.arch }}\n      - uses: docker/build-push-action@v6\n        with:\n          context: .\n          file: docker/${{ matrix.package }}/Dockerfile\n          push: true\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n          cache-from: type=gha,scope=${{ matrix.package }}-${{ matrix.arch }}\n          cache-to: type=gha,mode=max,scope=${{ matrix.package }}-${{ matrix.arch }}\n\n  merge-core-manifests:\n    runs-on: ubuntu-latest\n    needs: build-core\n    permissions:\n      contents: read\n      packages: write\n    strategy:\n      matrix:\n        package:\n          - api\n          - cron\n          - worker\n          - mcp\n          - web\n    steps:\n      - uses: docker/setup-buildx-action@v3\n      - uses: docker/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - id: meta\n        uses: docker/metadata-action@v5\n        with:\n          images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/keeper-${{ matrix.package }}\n          tags: |\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref, '-') }}\n            type=raw,value=latest,enable=${{ !contains(github.ref, '-') }}\n      - name: Create multi-arch manifest\n        env:\n          TAGS: ${{ steps.meta.outputs.tags }}\n        run: |\n          for tag in $TAGS; do\n            docker buildx imagetools create -t \"$tag\" \\\n              \"${tag}-amd64\" \\\n              \"${tag}-arm64\"\n          done\n\n  merge-convenience-manifests:\n    runs-on: ubuntu-latest\n    needs: build-convenience\n    permissions:\n      contents: read\n      packages: write\n    strategy:\n      matrix:\n        package: [standalone, services]\n    steps:\n      - uses: docker/setup-buildx-action@v3\n      - uses: docker/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - id: meta\n        uses: docker/metadata-action@v5\n        with:\n          images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/keeper-${{ matrix.package }}\n          tags: |\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}},enable=${{ !contains(github.ref, '-') }}\n            type=raw,value=latest,enable=${{ !contains(github.ref, '-') }}\n      - name: Create multi-arch manifest\n        env:\n          TAGS: ${{ steps.meta.outputs.tags }}\n        run: |\n          for tag in $TAGS; do\n            docker buildx imagetools create -t \"$tag\" \\\n              \"${tag}-amd64\" \\\n              \"${tag}-arm64\"\n          done\n\n  deploy-ec2:\n    runs-on: ubuntu-latest\n    needs: merge-core-manifests\n    if: ${{ !contains(github.ref, '-') }}\n    concurrency:\n      group: production-deploy\n      cancel-in-progress: false\n    permissions:\n      contents: read\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: appleboy/scp-action@v0.1.7\n        with:\n          host: ${{ secrets.EC2_HOST }}\n          username: ubuntu\n          key: ${{ secrets.EC2_SSH_KEY }}\n          source: \"deploy/compose.yaml,deploy/Caddyfile,docker/caddy/Dockerfile\"\n          target: /home/ubuntu\n\n      - uses: appleboy/ssh-action@v1.2.4\n        with:\n          host: ${{ secrets.EC2_HOST }}\n          username: ubuntu\n          key: ${{ secrets.EC2_SSH_KEY }}\n          script: |\n            set -euo pipefail\n\n            exec 9>/tmp/keeper-deploy.lock\n            flock 9\n\n            cd /home/ubuntu\n\n            cd deploy\n            docker compose pull\n            docker compose up -d --build --remove-orphans --wait\n            docker image prune -af --filter \"until=24h\"\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\n.env\n.idea\n.DS_Store\n.turbo/\ndist/\n*.tsbuildinfo\nscreenshots/\napplications/mobile/\n.pki/\n"
  },
  {
    "path": ".oxlintrc.json",
    "content": "{\n  \"$schema\": \"./node_modules/oxlint/configuration_schema.json\",\n  \"plugins\": [\"import\", \"typescript\", \"unicorn\", \"promise\"],\n  \"env\": {\n    \"browser\": true,\n    \"node\": true,\n    \"es2024\": true\n  },\n  \"globals\": {\n    \"Bun\": \"readonly\"\n  },\n  \"categories\": {\n    \"correctness\": \"error\",\n    \"suspicious\": \"error\",\n    \"pedantic\": \"error\",\n    \"perf\": \"error\",\n    \"style\": \"error\",\n    \"restriction\": \"error\"\n  },\n  \"rules\": {\n    \"eqeqeq\": [\"error\", \"always\"],\n    \"@typescript-eslint/no-explicit-any\": \"error\",\n    \"@typescript-eslint/no-unused-vars\": \"error\",\n    \"@typescript-eslint/consistent-type-imports\": \"error\",\n    \"@typescript-eslint/explicit-module-boundary-types\": \"off\",\n    \"@typescript-eslint/explicit-function-return-type\": \"off\",\n    \"import/no-cycle\": \"error\",\n    \"import/no-self-import\": \"error\",\n    \"import/no-named-export\": \"off\",\n    \"import/prefer-default-export\": \"off\",\n    \"import/max-dependencies\": \"off\",\n    \"import/no-anonymous-default-export\": \"off\",\n    \"import/consistent-type-specifier-style\": \"off\",\n    \"import/no-duplicates\": \"off\",\n    \"import/no-nodejs-modules\": \"off\",\n    \"import/no-relative-parent-imports\": \"off\",\n    \"unicorn/no-null\": \"off\",\n    \"unicorn/prefer-global-this\": \"off\",\n    \"unicorn/prefer-top-level-await\": \"off\",\n    \"unicorn/no-process-exit\": \"off\",\n    \"react/jsx-max-depth\": \"off\",\n    \"react/react-in-jsx-scope\": \"off\",\n    \"react/jsx-filename-extension\": \"off\",\n    \"react/no-unescaped-entities\": \"off\",\n    \"react/jsx-props-no-spreading\": \"off\",\n    \"promise/avoid-new\": \"off\",\n    \"promise/prefer-await-to-then\": \"off\",\n    \"promise/prefer-await-to-callbacks\": \"off\",\n    \"no-duplicate-imports\": \"off\",\n    \"no-default-export\": \"off\",\n    \"no-await-in-loop\": \"off\",\n    \"no-plusplus\": \"off\",\n    \"no-continue\": \"off\",\n    \"no-magic-numbers\": \"off\",\n    \"no-warning-comments\": \"off\",\n    \"no-eq-null\": \"off\",\n    \"max-lines-per-function\": \"off\",\n    \"max-statements\": \"off\",\n    \"max-lines\": \"off\",\n    \"max-params\": \"off\",\n    \"max-classes-per-file\": \"off\",\n    \"sort-imports\": \"off\",\n    \"sort-keys\": \"off\",\n    \"id-length\": [\"error\", { \"exceptions\": [\"x\", \"y\"] }]\n  },\n  \"ignorePatterns\": [\n    \"**/node_modules/**\",\n    \"**/dist/**\",\n    \"**/.next/**\",\n    \"**/.turbo/**\",\n    \"**/coverage/**\"\n  ]\n}\n"
  },
  {
    "path": "Caddyfile",
    "content": "keeper.localhost {\n\ttls internal\n\n\treverse_proxy host.docker.internal:5173\n}\n\n:80 {\n\treverse_proxy host.docker.internal:5173\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<http://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "NOTICE",
    "content": "Copyright (C) 2025 Rida F'kih\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published\nby the Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n"
  },
  {
    "path": "README.md",
    "content": "![](./applications/web/public/open-graph.png)\n\n# About\n\nKeeper is a simple & open-source calendar syncing tool. It allows you to pull events from remotely hosted iCal or ICS links, and push them to one or many calendars so the time slots can align across them all.\n\n# Features\n\n- Aggregating calendar events from remote sources\n- Event content agnostic syncing engine\n- Push aggregate events to one or more calendars\n- MCP (Model Context Protocol) server for AI agent calendar access\n- Open source under AGPL-3.0\n- Easy to self-host\n- Easy-to-purge remote events\n\n# Bug Reports & Feature Requests\n\nIf you encounter a bug or have an idea for a feature, you may [open an issue on GitHub](https://github.com/ridafkih/keeper.sh/issues) and it will be triaged and addressed as soon as possible.\n\n# Contributing\n\nHigh-value and high-quality contributions are appreciated. Before working on large features you intend to see merged, please open an issue first to discuss beforehand.\n\n## Local Development\n\nThe dev environment runs behind HTTPS at `https://keeper.localhost` using a [Caddy](https://caddyserver.com/) reverse proxy with automatic TLS. The `.localhost` TLD resolves to `127.0.0.1` automatically per [RFC 6761](https://datatracker.ietf.org/doc/html/rfc6761) — no `/etc/hosts` entry is needed.\n\n### Prerequisites\n\n- [Bun](https://bun.sh/) (v1.3.11+)\n- [Docker](https://docs.docker.com/get-started/) & Docker Compose\n\n### Getting Started\n\n```bash\nbun install\n```\n\n#### Generate and Trust a Root CA\n\nThe dev environment runs behind HTTPS via Caddy. You need to generate a local root certificate authority and trust it so your browser accepts the certificate.\n\n```bash\nmkdir -p .pki\nopenssl req -x509 -new -nodes \\\n  -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \\\n  -keyout .pki/root.key -out .pki/root.crt \\\n  -days 3650 -subj \"/CN=Keeper.sh CA\"\n```\n\nThen trust it on your platform:\n\n**macOS**\n\n```bash\nsudo security add-trusted-cert -d -r trustRoot \\\n  -k /Library/Keychains/System.keychain .pki/root.crt\n```\n\n**Linux**\n\n```bash\nsudo cp .pki/root.crt /usr/local/share/ca-certificates/keeper-dev-root.crt\nsudo update-ca-certificates\n```\n\n#### Start the Dev Environment\n\n```bash\nbun dev\n```\n\nThis starts PostgreSQL, Redis, and a Caddy reverse proxy via Docker Compose, along with the API, web, MCP, and cron services locally. Once running, open `https://keeper.localhost`.\n\n### Architecture\n\n| Service  | Local Port | Accessed Via                         |\n| -------- | ---------- | ------------------------------------ |\n| Caddy    | 443        | `https://keeper.localhost`           |\n| Web      | 5173       | Proxied by Caddy                     |\n| API      | 3000       | Proxied by Web at `/api`             |\n| MCP      | 3001       | Proxied by Web at `/mcp`             |\n| Postgres | 5432       | `postgresql://postgres:postgres@localhost:5432/postgres` |\n| Redis    | 6379       | `redis://localhost:6379`             |\n\n# Qs\n\n## Why does this exist?\n\nBecause I needed it. Ever since starting [Sedna](https://sedna.sh/)—the AI governance platform—I've had to work across three calendars. One for my business, one for work, and one for personal.\n\nMeetings have landed on top of one-another a frustratingly high number of times.\n\n## Why not use _this other service_?\n\nI've probably tried it. It was probably too finicky, ended up making me waste hours of my time having to delete stale events it didn't seem to want to track anymore, or just didn't sync reliably.\n\n## How does the syncing engine work?\n\n- If we have a local event but no corresponding \"source → destination\" mapping for an event, we push the event to the destination calendar.\n- If we have a mapping for an event, but the source ID is not present on the source any longer, we delete the event from the destination.\n- Any events with markers of having been created by Keeper, but with no corresponding local tracking, we remove it. This is only done for backwards compatibility.\n\nEvents are flagged as having been created by Keeper either using a `@keeper.sh` suffix on the remote UID, or in the case of a platform like Outlook that doesn't support custom UIDs, we just put it in a `\"keeper.sh\"` category.\n\n# Cloud Hosted\n\nI've made Keeper easy to self-host, but whether you simply want to support the project or don't want to deal with the hassle or overhead of configuring and running your own infrastructure cloud hosting is always an option.\n\nHead to [keeper.sh](https://keeper.sh) to get started with the cloud-hosted version. Use code `README` for 25% off.\n\n|                       | Free       | Pro (Cloud-Hosted) | Pro (Self-Hosted) |\n| --------------------- | ---------- | ------------------ | ----------------- |\n| **Monthly Price**     | $0 USD     | $5 USD             | $0                |\n| **Annual Price**      | $0 USD     | $42 USD (-30%)     | $0                |\n| **Refresh Interval**  | 30 minutes | 1 minute           | 1 minute          |\n| **Source Limit**      | 2          | ∞                  | ∞                 |\n| **Destination Limit** | 1          | ∞                  | ∞                 |\n\n# Self Hosted\n\nBy hosting Keeper yourself, you get all premium features for free, can guarantee data governance and autonomy, and it's fun. If you'll be self-hosting, please consider supporting me and development of the project by sponsoring me on GitHub.\n\nThere are seven images currently available, two of them are designed for convenience, while the five are designed to serve the granular underlying services.\n\n> [!NOTE]\n>\n> **Migrating from a previous version?** If you are upgrading from the older Next.js-based release, see the [migration guide](https://github.com/ridafkih/keeper.sh/issues/140) for environment variable changes. The new web server will also print a migration notice at startup if it detects old environment variables.\n\n## Environment Variables\n\n| Name                           | Service(s)    | Description                                                                                                                                                         |\n| ------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| DATABASE_URL                   | `api`, `cron`, `worker`, `mcp` | PostgreSQL connection URL.<br><br>e.g. `postgres://user:pass@postgres:5432/keeper`                                                                                  |\n| REDIS_URL                      | `api`, `cron`, `worker` | Redis connection URL. Must be the same Redis instance across all services.<br><br>e.g. `redis://redis:6379`                                                        |\n| WORKER_JOB_QUEUE_ENABLED       | `cron`        | Required. Set to `true` to enqueue sync jobs to the worker queue, or `false` to disable. If unset, the cron service will exit with a migration notice.              |\n| BETTER_AUTH_URL                | `api`, `mcp`  | The base URL used for auth redirects.<br><br>e.g. `http://localhost:3000`                                                                                           |\n| BETTER_AUTH_SECRET             | `api`, `mcp`  | Secret key for session signing.<br><br>e.g. `openssl rand -base64 32`                                                                                               |\n| API_PORT                       | `api`         | Port the Bun API listens on. Defaults to `3001` in container images.                                                                                                |\n| ENV                            | `web`         | Optional. Runtime environment. One of `development`, `production`, or `test`. Defaults to `production`.                                                             |\n| PORT                           | `web`         | Port the web server listens on. Defaults to `3000` in container images.                                                                                             |\n| VITE_API_URL                   | `web`         | The URL the web server uses to proxy requests to the Bun API.<br><br>e.g. `http://api:3001`                                                                         |\n| COMMERCIAL_MODE                | `api`, `cron` | Enable Polar billing flow. Set to `true` if using Polar for subscriptions.                                                                                          |\n| POLAR_ACCESS_TOKEN             | `api`, `cron` | Optional. Polar API token for subscription management.                                                                                                              |\n| POLAR_MODE                     | `api`, `cron` | Optional. Polar environment, `sandbox` or `production`.                                                                                                             |\n| POLAR_WEBHOOK_SECRET           | `api`         | Optional. Secret to verify Polar webhooks.                                                                                                                          |\n| ENCRYPTION_KEY                 | `api`, `cron`, `worker` | Key for encrypting CalDAV credentials at rest.<br><br>e.g. `openssl rand -base64 32`                                                                                |\n| RESEND_API_KEY                 | `api`         | Optional. API key for sending emails via Resend.                                                                                                                    |\n| PASSKEY_RP_ID                  | `api`         | Optional. Relying party ID for passkey authentication.                                                                                                              |\n| PASSKEY_RP_NAME                | `api`         | Optional. Relying party display name for passkeys.                                                                                                                  |\n| PASSKEY_ORIGIN                 | `api`         | Optional. Origin allowed for passkey flows (e.g., `https://keeper.example.com`).                                                                                    |\n| GOOGLE_CLIENT_ID               | `api`, `cron`, `worker` | Optional. Required for Google Calendar integration.                                                                                                                 |\n| GOOGLE_CLIENT_SECRET           | `api`, `cron`, `worker` | Optional. Required for Google Calendar integration.                                                                                                                 |\n| MICROSOFT_CLIENT_ID            | `api`, `cron`, `worker` | Optional. Required for Microsoft Outlook integration.                                                                                                               |\n| MICROSOFT_CLIENT_SECRET        | `api`, `cron`, `worker` | Optional. Required for Microsoft Outlook integration.                                                                                                               |\n| POSTGRES_PASSWORD              | `standalone`  | Optional. Custom password for the internal PostgreSQL database in `keeper-standalone`. If unset, defaults to `keeper`. The database is not exposed outside the container, so this is low risk, but can be set for defense in depth. |\n| BLOCK_PRIVATE_RESOLUTION       | `api`, `cron` | Optional. Set to `true` to block outbound fetches (ICS subscriptions, CalDAV servers) from resolving to private/reserved network addresses. Prevents SSRF. Defaults to `false` for backward compatibility with self-hosted setups that use local CalDAV/ICS servers. |\n| PRIVATE_RESOLUTION_WHITELIST          | `api`, `cron` | Optional. When `BLOCK_PRIVATE_RESOLUTION` is `true`, this comma-separated list of hostnames or IPs is exempt from the restriction.<br><br>e.g. `192.168.1.50,radicale.local,10.0.2.12` |\n| TRUSTED_ORIGINS                | `api`         | Optional. Comma-separated list of additional trusted origins for CSRF protection.<br><br>e.g. `http://192.168.1.100,http://keeper.local,https://keeper.example.com` |\n| MCP_PUBLIC_URL                 | `api`, `mcp`  | Optional. Public URL of the MCP resource. Enables OAuth on the API and identifies the MCP server to clients.<br><br>e.g. `https://keeper.example.com/mcp`           |\n| VITE_MCP_URL                   | `web`         | Optional. Internal URL the web server uses to proxy `/mcp` requests to the MCP service.<br><br>e.g. `http://mcp:3002`                                              |\n| MCP_PORT                       | `mcp`         | Optional. Port the MCP server listens on.<br><br>e.g. `3002`                                                                                                       |\n| OTEL_EXPORTER_OTLP_ENDPOINT    | `api`, `cron`, `worker`, `mcp`, `web` | Optional. When set, enables forwarding structured logs to an OpenTelemetry collector via [`pino-opentelemetry-transport`](https://github.com/Vunovati/pino-opentelemetry-transport). The transport runs in a dedicated worker thread and does not affect application performance.<br><br>e.g. `https://otel-collector.example.com:4318` |\n| OTEL_EXPORTER_OTLP_PROTOCOL    | `api`, `cron`, `worker`, `mcp`, `web` | Optional. Protocol used by the OTLP exporter. Defaults to `http/protobuf` per the OpenTelemetry spec.<br><br>e.g. `http/protobuf`, `grpc`, `http/json` |\n| OTEL_EXPORTER_OTLP_HEADERS     | `api`, `cron`, `worker`, `mcp`, `web` | Optional. Headers sent with every OTLP export request. Use this for authentication (e.g. Basic auth or API keys).<br><br>e.g. `Authorization=Basic dXNlcjpwYXNz` |\n\nThe following environment variables are baked into the web image at **build time**. They are pre-configured in the official Docker images and only need to be set if you are building from source.\n\n| Name                              | Description                                                        |\n| --------------------------------- | ------------------------------------------------------------------ |\n| VITE_COMMERCIAL_MODE              | Toggle commercial mode in the web UI (`true`/`false`).             |\n| POLAR_PRO_MONTHLY_PRODUCT_ID      | Optional. Polar monthly product ID to power in-app upgrade links.  |\n| POLAR_PRO_YEARLY_PRODUCT_ID       | Optional. Polar yearly product ID to power in-app upgrade links.   |\n| VITE_VISITORS_NOW_TOKEN           | Optional. [visitors.now](https://visitors.now) token for analytics |\n| VITE_GOOGLE_ADS_ID                | Optional. Google Ads conversion tracking ID (e.g., `AW-123456789`) |\n| VITE_GOOGLE_ADS_CONVERSION_LABEL  | Optional. Google Ads conversion label for purchase tracking        |\n\n> [!NOTE]\n>\n> - `keeper-standalone` auto-configures everything internally — both the web server and Bun API sit behind a single Caddy reverse proxy on port `80`.\n> - `keeper-services` runs the web, API, cron, and worker services inside one container. The web server proxies `/api` requests internally, so only port `3000` needs to be exposed.\n> - For individual images, only the `web` container needs to be exposed. The API is accessed internally via `VITE_API_URL`.\n\n## Images\n\n| Tag                        | Description                                                                                                                                              | Included Services                                                                        |\n| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |\n| `keeper-standalone:2.9`    | The \"standalone\" image is everything you need to get up and running with Keeper with as little configuration as possible.                                | `keeper-web`, `keeper-api`, `keeper-cron`, `keeper-worker`, `redis`, `postgresql`, `caddy` |\n| `keeper-services:2.9`      | If you'd like for the Redis & Database to exist outside of the container, you can use the \"services\" image to launch without them included in the image. | `keeper-web`, `keeper-api`, `keeper-cron`, `keeper-worker`                                 |\n| `keeper-web:2.9`           | An image containing the Vite SSR web interface.                                                                                                          | `keeper-web`                                                                              |\n| `keeper-api:2.9`           | An image containing the Bun API service.                                                                                                                 | `keeper-api`                                                                              |\n| `keeper-cron:2.9`          | An image containing the Bun cron service. Requires `keeper-worker` for destination syncing.                                                              | `keeper-cron`                                                                             |\n| `keeper-worker:2.9`        | An image containing the BullMQ worker that processes calendar sync jobs enqueued by `keeper-cron`.                                                       | `keeper-worker`                                                                           |\n| `keeper-mcp:2.9`           | An image containing the MCP server for AI agent calendar access. Optional — only needed if using MCP clients.                                            | `keeper-mcp`                                                                              |\n\n> [!TIP]\n>\n> Pin your images to a major.minor version tag (e.g., `2.9`) rather than `latest`. This prevents breaking changes from automatically applying when you pull new images.\n\n## Prerequisites\n\n### Docker & Docker Compose\n\nIn order to install Docker Compose, please refer to the [official Docker documentation.](https://docs.docker.com/compose/install/).\n\n### Google OAuth Credentials\n\n> [!TIP]\n>\n> This is optional, although you will not be able to set Google Calendar as a destination without this.\n\nReference the [official Google Cloud Platform documentation](https://support.google.com/cloud/answer/15549257) to generate valid credentials for Google OAuth. You must grant your consent screen the `calendar.events`, `calendar.calendarlist.readonly`, and `userinfo.email` scopes.\n\nOnce this is configured, set the client ID and client secret as the `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` environment variables at runtime.\n\n### Microsoft Azure Credentials\n\n> [!TIP]\n>\n> Once again, this is optional. If you do not configure this, you will not be able to configure Microsoft Outlook as a destination.\n\nMicrosoft does not appear to do documentation well, the best I could find for non-legacy instructions on configuring OAuth is this [community thread.](https://learn.microsoft.com/en-us/answers/questions/4705805/how-to-set-up-oauth-2-0-for-outlook). The required scopes are `Calendars.ReadWrite`, `User.Read`, and `offline_access`. The client ID and secret for Microsoft go into the `MICROSOFT_CLIENT_ID` and `MICROSOFT_CLIENT_SECRET` environment variables respectively.\n\n## Standalone Container\n\nWhile you'd typically want to run containers granularly, if you just want to get up and running, a convenience image `keeper-standalone:2.9` has been provided. This container contains the `cron`, `worker`, `web`, `api` services as well as a configured `redis`, `database`, and `caddy` instance that puts everything behind the same port. While this is the easiest way to spin up Keeper, it is not recognized as best-practice.\n\n### Generate `keeper-standalone` Environment Variables\n\nThe following will generate a `.env` file that contains the key used to generate sessions, as well as the key that is used to encrypt CalDAV credentials at rest.\n\n> [!IMPORTANT]\n>\n> If you plan on accessing Keeper from a URL _other than_ http://localhost,\n> you will need to set the `TRUSTED_ORIGINS` environment variable. This should\n> be a comma-delimited list of protocol-hostname inclusive origins you will be using.\n>\n> Here is an example where we would be accessing Keeper from the LAN IP and where we\n> are routing Keeper through a reverse proxy that hosts it at https://keeper.example.com/\n>\n> ```bash\n> TRUSTED_ORIGINS=http://10.0.0.2,https://keeper.example.com\n> ```\n>\n> Without this, you will fail CSRF checks on the `better-auth` package.\n\n```bash\ncat > .env << EOF\n# BETTER_AUTH_SECRET and ENCRYPTION_KEY are required.\n# TRUSTED_ORIGINS is required if you plan on accessing Keeper from an\n# origin other than http://localhost/\nBETTER_AUTH_SECRET=$(openssl rand -base64 32)\nENCRYPTION_KEY=$(openssl rand -base64 32)\nTRUSTED_ORIGINS=\nGOOGLE_CLIENT_ID=\nGOOGLE_CLIENT_SECRET=\nMICROSOFT_CLIENT_ID=\nMICROSOFT_CLIENT_SECRET=\nEOF\n```\n\n### Run `keeper-standalone` with Docker\n\nIf you'd like to just run using the Docker CLI, you can use the following command. I would however recommend [using a compose.yaml](#run-standalone-with-docker-compose) file.\n\n```bash\ndocker run -d \\\n  -p 80:80 \\\n  -v keeper-data:/var/lib/postgresql/data \\\n  --env-file .env \\\n  ghcr.io/ridafkih/keeper-standalone:2.9\n```\n\n### Run `keeper-standalone` with Docker Compose\n\nIf you'd prefer to use a `compose.yaml` file, the following is an example. Remember to [populate your .env file first](#generate-keeper-standalone-environment-variables).\n\n```yaml\nservices:\n  keeper:\n    image: ghcr.io/ridafkih/keeper-standalone:2.9\n    ports:\n      - \"80:80\"\n    volumes:\n      - keeper-data:/var/lib/postgresql/data\n    environment:\n      BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}\n      ENCRYPTION_KEY: ${ENCRYPTION_KEY}\n      TRUSTED_ORIGINS: ${TRUSTED_ORIGINS}\n      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}\n      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}\n      MICROSOFT_CLIENT_ID: ${MICROSOFT_CLIENT_ID:-}\n      MICROSOFT_CLIENT_SECRET: ${MICROSOFT_CLIENT_SECRET:-}\n\nvolumes:\n  keeper-data:\n```\n\nOnce that's configured, you can launch Keeper using the following command.\n\n```bash\ndocker compose up -d\n```\n\nWith all said and done, you can access Keeper at http://localhost/. You can use a reverse-proxy like Nginx or Caddy to put Keeper behind a domain on your network.\n\n## Collective Services Image\n\nIf you'd like to bring your own Redis and PostgreSQL, you can use the `keeper-services` image. This contains the `cron`, `web` and `api` services in one.\n\n### Generate `keeper-services` Environment Variables\n\n```bash\ncat > .env << EOF\n# DATABASE_URL and REDIS_URL are required.\n# *_CLIENT_ID and *_CLIENT_SECRET are optional.\nBETTER_AUTH_SECRET=$(openssl rand -base64 32)\nENCRYPTION_KEY=$(openssl rand -base64 32)\nDATABASE_URL=postgres://keeper:keeper@postgres:5432/keeper\nREDIS_URL=redis://redis:6379\nBETTER_AUTH_URL=http://localhost:3000\nGOOGLE_CLIENT_ID=\nGOOGLE_CLIENT_SECRET=\nMICROSOFT_CLIENT_ID=\nMICROSOFT_CLIENT_SECRET=\nEOF\n```\n\n### Run `keeper-services` with Docker Compose\n\nOnce you've populated your environment variables, you can choose to run `redis` and `postgres` alongside the `keeper-services` image to get up and running.\n\n```yaml\nservices:\n  postgres:\n    image: postgres:17\n    environment:\n      POSTGRES_USER: keeper\n      POSTGRES_PASSWORD: keeper\n      POSTGRES_DB: keeper\n    volumes:\n      - postgres-data:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U keeper -d keeper\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    volumes:\n      - redis-data:/data\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  keeper:\n    image: ghcr.io/ridafkih/keeper-services:latest\n    environment:\n      DATABASE_URL: ${DATABASE_URL}\n      REDIS_URL: ${REDIS_URL}\n      BETTER_AUTH_URL: ${BETTER_AUTH_URL}\n      BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}\n      ENCRYPTION_KEY: ${ENCRYPTION_KEY}\n      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}\n      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}\n      MICROSOFT_CLIENT_ID: ${MICROSOFT_CLIENT_ID:-}\n      MICROSOFT_CLIENT_SECRET: ${MICROSOFT_CLIENT_SECRET:-}\n    ports:\n      - \"3000:3000\"\n    depends_on:\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n\nvolumes:\n  postgres-data:\n  redis-data:\n```\n\nOnce that's configured, you can launch Keeper using the following command.\n\n```bash\ndocker compose up -d\n```\n\n## Individual Service Images\n\nWhile running services individually is considered best-practice, it is verbose and more complicated to configure. Each service is hosted in its own image.\n\n### Generate Individual Service Environment Variables\n\n```bash\ncat > .env << EOF\n# The only optional variables are *_CLIENT_ID, *_CLIENT_SECRET\nBETTER_AUTH_SECRET=$(openssl rand -base64 32)\nENCRYPTION_KEY=$(openssl rand -base64 32)\nVITE_API_URL=http://api:3001\nPOSTGRES_USER=keeper\nPOSTGRES_PASSWORD=keeper\nPOSTGRES_DB=keeper\nREDIS_URL=redis://redis:6379\nBETTER_AUTH_URL=http://localhost:3000\nGOOGLE_CLIENT_ID=\nGOOGLE_CLIENT_SECRET=\nMICROSOFT_CLIENT_ID=\nMICROSOFT_CLIENT_SECRET=\nEOF\n```\n\n### Configure Individual Service `compose.yaml`\n\n```yaml\nservices:\n  postgres:\n    image: postgres:17\n    environment:\n      POSTGRES_USER: ${POSTGRES_USER}\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n      POSTGRES_DB: ${POSTGRES_DB}\n    volumes:\n      - postgres-data:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U keeper -d keeper\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    volumes:\n      - redis-data:/data\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\n  api:\n    image: ghcr.io/ridafkih/keeper-api:latest\n    environment:\n      API_PORT: 3001\n      DATABASE_URL: postgres://keeper:keeper@postgres:5432/keeper\n      REDIS_URL: redis://redis:6379\n      BETTER_AUTH_URL: ${BETTER_AUTH_URL}\n      BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}\n      ENCRYPTION_KEY: ${ENCRYPTION_KEY}\n      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}\n      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}\n      MICROSOFT_CLIENT_ID: ${MICROSOFT_CLIENT_ID:-}\n      MICROSOFT_CLIENT_SECRET: ${MICROSOFT_CLIENT_SECRET:-}\n    depends_on:\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n\n  cron:\n    image: ghcr.io/ridafkih/keeper-cron:latest\n    environment:\n      DATABASE_URL: postgres://keeper:keeper@postgres:5432/keeper\n      REDIS_URL: redis://redis:6379\n      ENCRYPTION_KEY: ${ENCRYPTION_KEY}\n      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}\n      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}\n      MICROSOFT_CLIENT_ID: ${MICROSOFT_CLIENT_ID:-}\n      MICROSOFT_CLIENT_SECRET: ${MICROSOFT_CLIENT_SECRET:-}\n    depends_on:\n      postgres:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n\n  web:\n    image: ghcr.io/ridafkih/keeper-web:latest\n    environment:\n      VITE_API_URL: ${VITE_API_URL}\n      PORT: 3000\n    ports:\n      - \"3000:3000\"\n    depends_on:\n      api:\n        condition: service_started\n\nvolumes:\n  postgres-data:\n  redis-data:\n```\n\nOnce that's configured, you can launch Keeper using the following command.\n\n```bash\ndocker compose up -d\n```\n\n# MCP (Model Context Protocol)\n\nKeeper includes an optional MCP server that lets AI agents (such as Claude) access your calendar data through a standardized protocol. The MCP server authenticates via OAuth 2.1 with a consent flow hosted by the web application.\n\n## Available Tools\n\n| Tool              | Description                                                                                          |\n| ----------------- | ---------------------------------------------------------------------------------------------------- |\n| `list_calendars`  | List all calendars connected to Keeper, including provider name and account.                          |\n| `get_events`      | Get calendar events within a date range. Accepts ISO 8601 datetimes and an IANA timezone identifier. |\n| `get_event_count` | Get the total number of calendar events synced to Keeper.                                            |\n\n## Connecting an MCP Client\n\nTo connect an MCP-compatible client (e.g. Claude Code, Claude Desktop), point it at your MCP server URL. The client will be guided through the OAuth consent flow to authorize read access to your calendar data.\n\nExample Claude Code MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"keeper\": {\n      \"type\": \"url\",\n      \"url\": \"https://keeper.example.com/mcp\"\n    }\n  }\n}\n```\n\n## Self-Hosted MCP Setup\n\n> [!NOTE]\n>\n> MCP is fully optional. All MCP-related environment variables are optional across every service and image. If they are not set, Keeper starts normally without MCP functionality. Existing self-hosted deployments are unaffected.\n\nThe MCP server is proxied through the web service at `/mcp`, the same way the API is proxied at `/api`. MCP is **not** bundled in the `keeper-standalone` or `keeper-services` convenience images — run the `keeper-mcp` image as a separate container alongside them.\n\nTo enable MCP on a self-hosted instance:\n\n1. Run the `keeper-mcp` container with `MCP_PORT`, `MCP_PUBLIC_URL`, `DATABASE_URL`, `BETTER_AUTH_SECRET`, and `BETTER_AUTH_URL`.\n2. Set `MCP_PUBLIC_URL` on the `api` service to the same value (e.g. `https://keeper.example.com/mcp`).\n3. Set `VITE_MCP_URL` on the `web` service to the internal URL of the MCP container (e.g. `http://mcp:3002`).\n\n# Modules\n\n## Applications\n\n1. [@keeper.sh/api](./applications/api)\n2. [@keeper.sh/cron](./applications/cron)\n3. [@keeper.sh/mcp](./applications/mcp)\n4. [@keeper.sh/web](./applications/canary-web)\n5. @keeper.sh/cli _(Coming Soon)_\n6. @keeper.sh/mobile _(Coming Soon)_\n7. @keeper.sh/ssh _(Coming Soon)_\n\n## Modules\n\n1. [@keeper.sh/auth](./packages/auth)\n1. [@keeper.sh/auth-plugin-username-only](./packages/auth-plugin-username-only)\n1. [@keeper.sh/broadcast](./packages/broadcast)\n1. [@keeper.sh/broadcast-client](./packages/broadcast-client)\n1. [@keeper.sh/calendar](./packages/calendar)\n1. [@keeper.sh/constants](./packages/constants)\n1. [@keeper.sh/data-schemas](./packages/data-schemas)\n1. [@keeper.sh/database](./packages/database)\n1. [@keeper.sh/date-utils](./packages/date-utils)\n1. [@keeper.sh/encryption](./packages/encryption)\n1. [@keeper.sh/env](./packages/env)\n1. [@keeper.sh/fixtures](./packages/fixtures)\n1. [@keeper.sh/keeper-api](./packages/keeper-api)\n1. [@keeper.sh/oauth](./packages/oauth)\n1. [@keeper.sh/oauth-google](./packages/oauth-google)\n1. [@keeper.sh/oauth-microsoft](./packages/oauth-microsoft)\n1. [@keeper.sh/premium](./packages/premium)\n1. [@keeper.sh/provider-caldav](./packages/provider-caldav)\n1. [@keeper.sh/provider-core](./packages/provider-core)\n1. [@keeper.sh/provider-fastmail](./packages/provider-fastmail)\n1. [@keeper.sh/provider-google-calendar](./packages/provider-google-calendar)\n1. [@keeper.sh/provider-icloud](./packages/provider-icloud)\n1. [@keeper.sh/provider-outlook](./packages/provider-outlook)\n1. [@keeper.sh/provider-registry](./packages/provider-registry)\n1. [@keeper.sh/pull-calendar](./packages/pull-calendar)\n1. [@keeper.sh/sync-calendar](./packages/sync-calendar)\n1. [@keeper.sh/sync-events](./packages/sync-events)\n1. [@keeper.sh/typescript-config](./packages/typescript-config)\n"
  },
  {
    "path": "applications/web/.eslintrc.cjs",
    "content": "module.exports = {\n  root: true,\n  env: { browser: true, es2020: true },\n  extends: [\n    'eslint:recommended',\n    'plugin:@typescript-eslint/recommended',\n    'plugin:react-hooks/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parser: '@typescript-eslint/parser',\n  plugins: ['react-refresh'],\n  rules: {\n    'react-refresh/only-export-components': [\n      'warn',\n      { allowConstantExport: true },\n    ],\n  },\n}\n"
  },
  {
    "path": "applications/web/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "applications/web/Dockerfile",
    "content": "FROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/web --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd applications/web build\n\nFROM base AS runtime\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\nCOPY --from=build /app/applications/web/dist ./applications/web/dist\nCOPY --from=build /app/applications/web/public ./applications/web/public\nCOPY --from=prune /app/out/full/packages/otelemetry ./packages/otelemetry\nRUN bun link --cwd packages/otelemetry\nCOPY --from=source /app/applications/web/entrypoint.sh ./applications/web/entrypoint.sh\nRUN chmod +x ./applications/web/entrypoint.sh\n\nWORKDIR /app/applications/web\n\nENV ENV=production\nEXPOSE 3000\n\nENTRYPOINT [\"./entrypoint.sh\"]\n"
  },
  {
    "path": "applications/web/README.md",
    "content": "# React + TypeScript + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n\n## Expanding the ESLint configuration\n\nIf you are developing a production application, we recommend updating the configuration to enable type aware lint rules:\n\n- Configure the top-level `parserOptions` property like this:\n\n```js\nexport default {\n  // other rules...\n  parserOptions: {\n    ecmaVersion: 'latest',\n    sourceType: 'module',\n    project: ['./tsconfig.json', './tsconfig.node.json'],\n    tsconfigRootDir: __dirname,\n  },\n}\n```\n\n- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`\n- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`\n- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list\n"
  },
  {
    "path": "applications/web/entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\nexec bun dist/server-entry/index.js 2>&1 | keeper-otelemetry\n"
  },
  {
    "path": "applications/web/eslint.config.js",
    "content": "import js from \"@eslint/js\";\nimport tseslint from \"@typescript-eslint/eslint-plugin\";\nimport tsparser from \"@typescript-eslint/parser\";\nimport reactHooks from \"eslint-plugin-react-hooks\";\nimport reactRefresh from \"eslint-plugin-react-refresh\";\n\nexport default [\n  { ignores: [\"dist\"] },\n  {\n    files: [\"**/*.{ts,tsx}\"],\n    languageOptions: {\n      parser: tsparser,\n      ecmaVersion: 2020,\n      globals: { window: true, document: true },\n    },\n    plugins: {\n      \"@typescript-eslint\": tseslint,\n      \"react-hooks\": reactHooks,\n      \"react-refresh\": reactRefresh,\n    },\n    rules: {\n      ...tseslint.configs.recommended.rules,\n      ...reactHooks.configs.recommended.rules,\n      \"react-refresh/only-export-components\": [\"warn\", { allowConstantExport: true }],\n    },\n  },\n  {\n    files: [\"**/routes/**/*.{ts,tsx}\"],\n    rules: { \"react-refresh/only-export-components\": \"off\" },\n  },\n];\n"
  },
  {
    "path": "applications/web/index.html",
    "content": "<!doctype html>\n<html>\n  <head>\n    <link rel=\"stylesheet\" href=\"/src/index.css\" />\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "applications/web/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/web\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"bun src/server/index.ts\",\n    \"build\": \"vite build --outDir dist/client && vite build --ssr src/server.tsx --outDir dist/server && bun scripts/build.ts\",\n    \"lint\": \"eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0\",\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"bun x --bun vitest run\",\n    \"preview\": \"vite preview\",\n    \"start\": \"bun scripts/start.ts\"\n  },\n  \"dependencies\": {\n    \"@better-auth/passkey\": \"^1.5.5\",\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"@keeper.sh/otelemetry\": \"workspace:*\",\n    \"@polar-sh/checkout\": \"^0.2.0\",\n    \"@tanstack/react-router\": \"^1.163.3\",\n    \"arktype\": \"^2.2.0\",\n    \"better-auth\": \"^1.5.5\",\n    \"clsx\": \"^2.1.1\",\n    \"entrykit\": \"^0.1.3\",\n    \"fast-xml-parser\": \"^5.4.2\",\n    \"jotai\": \"^2.18.0\",\n    \"linkedom\": \"^0.18.12\",\n    \"lucide-react\": \"^0.576.0\",\n    \"motion\": \"^12.34.4\",\n    \"react\": \"^19.2.4\",\n    \"react-dom\": \"^19.2.4\",\n    \"streamdown\": \"^2.4.0\",\n    \"swr\": \"^2.4.1\",\n    \"tailwind-variants\": \"^3.2.2\",\n    \"widelogger\": \"^0.7.0\",\n    \"yaml\": \"^2.8.2\"\n  },\n  \"devDependencies\": {\n    \"@babel/preset-typescript\": \"^7.28.5\",\n    \"@eslint/js\": \"^10.0.1\",\n    \"@rolldown/plugin-babel\": \"^0.2.0\",\n    \"@tailwindcss/vite\": \"^4.2.1\",\n    \"@tanstack/router-plugin\": \"^1.164.0\",\n    \"@types/react\": \"^19.2.14\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.56.1\",\n    \"@typescript-eslint/parser\": \"^8.56.1\",\n    \"@vitejs/plugin-react\": \"^6.0.0\",\n    \"babel-plugin-react-compiler\": \"^1.0.0\",\n    \"eslint\": \"^10.0.2\",\n    \"eslint-plugin-react-hooks\": \"^7.0.1\",\n    \"eslint-plugin-react-refresh\": \"^0.5.2\",\n    \"tailwindcss\": \"^4.2.1\",\n    \"typescript\": \"^5.9.3\",\n    \"vite\": \"^8.0.0\",\n    \"vite-plugin-svgr\": \"^4.5.0\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "applications/web/plugins/blog.ts",
    "content": "import { readFileSync, readdirSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport type { Plugin } from \"vite\";\nimport { type } from \"arktype\";\nimport { parse as parseYaml } from \"yaml\";\n\nconst blogPostMetadataSchema = type({\n  \"+\": \"reject\",\n  blurb: \"string >= 1\",\n  createdAt: \"string.date.iso\",\n  description: \"string >= 1\",\n  \"slug?\": /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\n  tags: \"string[]\",\n  title: \"string >= 1\",\n  updatedAt: \"string.date.iso\",\n});\n\ntype BlogPostMetadata = typeof blogPostMetadataSchema.infer;\n\ninterface ProcessedBlogPost {\n  content: string;\n  metadata: BlogPostMetadata;\n  slug: string;\n}\n\nfunction toIsoDate(value: string): string {\n  return value.slice(0, 10);\n}\n\nfunction normalizeMetadataInput(value: unknown): unknown {\n  if (typeof value !== \"object\" || value === null) return value;\n  const normalized: Record<string, unknown> = { ...value };\n\n  if (normalized.createdAt instanceof Date) {\n    normalized.createdAt = normalized.createdAt.toISOString();\n  }\n  if (normalized.updatedAt instanceof Date) {\n    normalized.updatedAt = normalized.updatedAt.toISOString();\n  }\n\n  return normalized;\n}\n\nfunction splitFrontmatter(\n  raw: string,\n  filePath: string,\n): { content: string; data: unknown } {\n  const match = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/);\n  if (!match) {\n    throw new Error(\n      `Blog post \"${filePath}\" must start with a YAML frontmatter block.`,\n    );\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = parseYaml(match[1]);\n  } catch (error) {\n    const message =\n      error instanceof Error ? error.message : \"Unknown YAML parse error\";\n    throw new Error(\n      `Blog frontmatter parsing failed for \"${filePath}\": ${message}`,\n    );\n  }\n\n  return {\n    content: raw.slice(match[0].length).trimStart(),\n    data: parsed ?? {},\n  };\n}\n\nfunction parseMetadata(value: unknown, filePath: string): BlogPostMetadata {\n  const result = blogPostMetadataSchema(normalizeMetadataInput(value));\n  if (result instanceof type.errors) {\n    throw new Error(\n      `Blog metadata is invalid for \"${filePath}\": ${result}`,\n    );\n  }\n\n  if (result.tags.length === 0) {\n    throw new Error(\n      `Blog metadata tags must contain at least one tag in \"${filePath}\".`,\n    );\n  }\n\n  return {\n    ...result,\n    createdAt: toIsoDate(result.createdAt),\n    updatedAt: toIsoDate(result.updatedAt),\n  };\n}\n\nfunction createSlug(title: string): string {\n  return title\n    .toLowerCase()\n    .trim()\n    .replace(/['\"]/g, \"\")\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n}\n\nfunction removeRedundantLeadingHeading(\n  content: string,\n  title: string,\n): string {\n  const lines = content.split(\"\\n\");\n  const firstLine = lines[0]?.trim() ?? \"\";\n\n  if (!firstLine.startsWith(\"# \")) return content;\n\n  const headingText = firstLine.slice(2).trim().toLowerCase();\n  if (headingText !== title.trim().toLowerCase()) return content;\n\n  let nextIndex = 1;\n  while (nextIndex < lines.length && lines[nextIndex].trim().length === 0) {\n    nextIndex += 1;\n  }\n\n  return lines.slice(nextIndex).join(\"\\n\");\n}\n\nfunction processBlogDirectory(blogDir: string): ProcessedBlogPost[] {\n  const files = readdirSync(blogDir)\n    .filter((f) => f.endsWith(\".mdx\"))\n    .sort();\n\n  const slugCounts = new Map<string, number>();\n\n  const posts = files.map((file) => {\n    const filePath = join(blogDir, file);\n    const raw = readFileSync(filePath, \"utf-8\");\n    const { content: rawContent, data } = splitFrontmatter(raw, file);\n    const metadata = parseMetadata(data, file);\n    const content = removeRedundantLeadingHeading(rawContent, metadata.title);\n\n    const hasCustomSlug = typeof metadata.slug === \"string\";\n    const baseSlug = hasCustomSlug ? metadata.slug : createSlug(metadata.title);\n    const seenCount = slugCounts.get(baseSlug) ?? 0;\n\n    if (hasCustomSlug && seenCount > 0) {\n      throw new Error(`Duplicate blog slug \"${baseSlug}\" found in metadata.`);\n    }\n\n    slugCounts.set(baseSlug, seenCount + 1);\n    const slug = seenCount === 0 ? baseSlug : `${baseSlug}-${seenCount + 1}`;\n\n    return { content, metadata, slug };\n  });\n\n  return posts.sort((a, b) =>\n    b.metadata.createdAt.localeCompare(a.metadata.createdAt),\n  );\n}\n\nconst VIRTUAL_MODULE_ID = \"virtual:blog-posts\";\nconst RESOLVED_ID = `\\0${VIRTUAL_MODULE_ID}`;\n\nexport function blogPlugin(): Plugin {\n  let blogDir: string;\n\n  return {\n    name: \"keeper-blog\",\n\n    configResolved(config) {\n      blogDir = resolve(config.root, \"src/content/blog\");\n    },\n\n    resolveId(id) {\n      if (id === VIRTUAL_MODULE_ID) return RESOLVED_ID;\n    },\n\n    load(id) {\n      if (id !== RESOLVED_ID) return;\n\n      const posts = processBlogDirectory(blogDir);\n      return `export const blogPosts = ${JSON.stringify(posts)};`;\n    },\n\n    handleHotUpdate({ file, server }) {\n      if (file.startsWith(blogDir) && file.endsWith(\".mdx\")) {\n        const module = server.moduleGraph.getModuleById(RESOLVED_ID);\n        if (module) {\n          server.moduleGraph.invalidateModule(module);\n          return [module];\n        }\n      }\n    },\n  };\n}\n"
  },
  {
    "path": "applications/web/plugins/sitemap.ts",
    "content": "import { readdirSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport type { Plugin } from \"vite\";\nimport { XMLBuilder } from \"fast-xml-parser\";\nimport { parse as parseYaml } from \"yaml\";\n\nconst SITE_URL = \"https://keeper.sh\";\nconst FRONTMATTER_PATTERN = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\ninterface SitemapEntry {\n  loc: string;\n  lastmod: string;\n}\n\nconst staticEntries: SitemapEntry[] = [\n  { loc: `${SITE_URL}/`, lastmod: \"2026-03-09\" },\n  { loc: `${SITE_URL}/blog`, lastmod: \"2026-03-09\" },\n  { loc: `${SITE_URL}/privacy`, lastmod: \"2025-12-01\" },\n  { loc: `${SITE_URL}/terms`, lastmod: \"2025-12-01\" },\n];\n\nfunction parseFrontmatter(raw: string): Record<string, unknown> {\n  const [, match] = raw.match(FRONTMATTER_PATTERN);\n  if (!match) return {};\n  return parseYaml(match);\n}\n\nfunction discoverBlogEntries(blogDir: string): SitemapEntry[] {\n  const files = readdirSync(blogDir).filter((f) => f.endsWith(\".mdx\"));\n\n  return files.map((file) => {\n    const raw = readFileSync(join(blogDir, file), \"utf-8\");\n    const frontmatter = parseFrontmatter(raw);\n\n    if (typeof frontmatter.slug !== \"string\") {\n      throw new Error(`Blog post \"${file}\" is missing a slug.`);\n    }\n\n    if (typeof frontmatter.updatedAt !== \"string\") {\n      throw new Error(`Blog post \"${file}\" is missing updatedAt.`);\n    }\n\n    return {\n      loc: `${SITE_URL}/blog/${frontmatter.slug}`,\n      lastmod: frontmatter.updatedAt.slice(0, 10),\n    };\n  });\n}\n\nconst xmlBuilder = new XMLBuilder({\n  format: true,\n  ignoreAttributes: false,\n  suppressEmptyNode: true,\n});\n\nfunction buildSitemapXml(entries: SitemapEntry[]): string {\n  const document = {\n    \"?xml\": { \"@_version\": \"1.0\", \"@_encoding\": \"UTF-8\" },\n    urlset: {\n      \"@_xmlns\": \"http://www.sitemaps.org/schemas/sitemap/0.9\",\n      url: entries.map((entry) => ({\n        loc: entry.loc,\n        lastmod: entry.lastmod,\n      })),\n    },\n  };\n\n  return String(xmlBuilder.build(document));\n}\n\nexport function sitemapPlugin(): Plugin {\n  let blogDir: string;\n\n  return {\n    name: \"keeper-sitemap\",\n    apply: \"build\",\n\n    configResolved(config) {\n      blogDir = resolve(config.root, \"src/content/blog\");\n    },\n\n    generateBundle() {\n      const blogEntries = discoverBlogEntries(blogDir);\n      const entries = [...staticEntries, ...blogEntries];\n\n      this.emitFile({\n        type: \"asset\",\n        fileName: \"sitemap.xml\",\n        source: buildSitemapXml(entries),\n      });\n    },\n  };\n}\n"
  },
  {
    "path": "applications/web/public/llms-full.txt",
    "content": "# Keeper.sh — Full Context\n\n> Open-source calendar event syncing. Synchronize events between your personal, work, business and school calendars.\n\nKeeper.sh is an open-source (AGPL-3.0) calendar synchronization service built by Rida F'kih. It keeps time slots aligned across multiple calendar providers using a pull-compare-push sync engine. The project is self-hostable and offers a hosted version at keeper.sh.\n\n## Problem\n\nPeople with calendars across multiple providers (Google Calendar, Outlook, iCloud, FastMail) end up with fragmented availability. Different people see incomplete windows into their schedule, causing constant overlap and scheduling friction. Existing tools were too manual, had finicky sync behavior, lacked privacy controls, or didn't offer self-hosting.\n\n## How It Works\n\n### Sync Engine\n\nKeeper.sh uses a pull-compare-push architecture. On each sync cycle:\n\n1. **Pull**: Events are fetched from configured source calendars\n2. **Compare**: Events are compared against known state\n3. **Push**: Changes are pushed to destination calendars\n\nCore sync operations:\n- **Add**: Source event with no mapping on destination gets created\n- **Delete**: Mapping exists but source event is gone — destination event gets removed\n- **Cleanup**: Keeper-created events with no mapping are cleaned up\n\nEvents created by Keeper are tagged with a `@keeper.sh` suffix on their remote UID. For Outlook (which doesn't support custom UIDs), a `\"keeper.sh\"` category is used instead.\n\nRace conditions are prevented using Redis-backed generation counters. If two syncs target the same calendar simultaneously, the later one backs off.\n\nFor Google and Outlook, Keeper uses incremental sync tokens — only fetching what changed since the last sync, making cycles fast even for calendars with thousands of events.\n\n### Supported Providers\n\n**OAuth providers:**\n- **Google Calendar** — full read/write, supports filtering Focus Time, Working Location, and Out of Office events\n- **Microsoft Outlook** — full read/write via Microsoft Graph API\n\n**CalDAV-based providers:**\n- **FastMail** — pre-configured CalDAV\n- **iCloud** — pre-configured CalDAV with app-specific password support\n- **Generic CalDAV** — any CalDAV-compatible server\n- **iCal/ICS feeds** — read-only URL-based calendars\n\nEach calendar has capability flags: \"pull\" (read events from) and \"push\" (write events to). iCal feeds are pull-only. OAuth and CalDAV calendars support both.\n\n### Privacy Controls\n\nBy default, only busy/free time blocks are shared. Event titles, descriptions, locations, and attendee lists are stripped before syncing.\n\nPer-source calendar settings:\n- Include or exclude event titles (replace with \"Busy\")\n- Include or exclude descriptions and locations\n- Custom event name templates using `{{event_name}}` or `{{calendar_name}}` placeholders\n- Skip all-day events\n- Skip Google-specific event types (Focus Time, Working Location, Out of Office)\n\n### iCal Feed\n\nKeeper generates a unique, token-authenticated URL combining events from selected source calendars. Subscribable from any calendar app supporting iCal (Apple Calendar, Thunderbird, etc.). Respects all privacy settings.\n\n### Source and Destination Mappings\n\nConnect calendar accounts, then configure which calendars are sources and which are destinations. A single source can push to multiple destinations. A single destination can receive from multiple sources.\n\nSetup flow:\n1. Connect an account (OAuth, CalDAV, or iCal URL)\n2. Select calendars\n3. Rename for clearer labels\n4. Map sources to destinations\n\n## Pricing\n\n- **Free**: 2 linked accounts, 2 calendars per account, 30-minute sync intervals, aggregated iCal feed\n- **Pro ($5/month)**: Unlimited accounts, unlimited calendars, 1-minute sync intervals, priority support\n\nSelf-hosted instances get Pro-tier features by default.\n\n## Self-Hosting\n\nThe entire stack runs on PostgreSQL, Redis, Bun, and Vite + React.\n\nThree deployment models:\n- **Standalone**: Single `compose.yaml` bundling Caddy, PostgreSQL, Redis, API, web, and cron\n- **Services-only**: Application containers only (bring your own PostgreSQL and Redis)\n- **Individual containers**: Separate `keeper-web`, `keeper-api`, `keeper-cron`, and `keeper-mcp` images\n\nGoogle Calendar and Outlook require OAuth app setup (Google Cloud / Azure). CalDAV providers and iCal feeds work without OAuth.\n\n## MCP (Model Context Protocol)\n\nKeeper includes an optional MCP server that gives AI agents (such as Claude) read-only access to calendar data. The server authenticates via OAuth 2.1 with a user consent flow and is proxied through the web service at `/mcp`.\n\n### Available Tools\n\n- **list_calendars** — List all calendars connected to Keeper, including provider name and account\n- **get_events** — Get calendar events within a date range (ISO 8601 datetimes + IANA timezone)\n- **get_event_count** — Get the total number of synced calendar events\n\n### Connecting\n\nPoint any MCP-compatible client at the `/mcp` endpoint of a Keeper instance. The client will be guided through the OAuth consent flow to authorize read access.\n\nMCP is fully optional — all related environment variables are optional across every service. Existing deployments are unaffected when upgrading.\n\n## Technical Architecture\n\n- **CalDAV as universal protocol**: RFC 4791 as the common layer for FastMail, iCloud, and standards-compliant servers\n- **Encrypted credentials at rest**: CalDAV passwords and OAuth tokens encrypted with configurable key\n- **Content hashing for iCal feeds**: Skips processing if feed content unchanged, keeps snapshots for 6 hours\n- **Real-time sync status**: WebSocket endpoint broadcasts sync progress to dashboard\n- **MCP via OAuth 2.1**: Separate MCP server with JWT-based session resolution, proxied through the web service at `/mcp`\n\n## Links\n\n- Homepage: https://keeper.sh\n- Blog: https://keeper.sh/blog\n- Privacy Policy: https://keeper.sh/privacy\n- Terms & Conditions: https://keeper.sh/terms\n- GitHub: https://github.com/ridafkih/keeper.sh\n\n## Maintainer\n\nMaintained by Rida F'kih (https://rida.dev)\n"
  },
  {
    "path": "applications/web/public/llms.txt",
    "content": "# Keeper.sh\n\n> Open-source calendar event syncing. Synchronize events between your personal, work, business and school calendars.\n\nKeeper.sh is an open-source (AGPL-3.0) calendar synchronization service that keeps time slots aligned across multiple calendar providers. It uses a pull-compare-push architecture to sync events between Google Calendar, Outlook, FastMail, iCloud, CalDAV, and iCal feeds.\n\n## Key Features\n\n- Universal calendar sync across Google Calendar, Outlook, Apple Calendar, FastMail, CalDAV, and iCal feeds\n- Privacy-first: only busy/free time blocks are shared by default, with granular controls for titles, descriptions, and locations\n- Aggregated iCal feed generation for sharing availability externally\n- MCP (Model Context Protocol) server for AI agent calendar access via OAuth 2.1\n- Self-hostable with Docker Compose (standalone, services-only, or individual containers)\n- Free tier (30-minute sync, 2 accounts) and Pro tier ($5/month, 1-minute sync, unlimited)\n\n## Links\n\n- [Homepage](https://keeper.sh)\n- [Blog](https://keeper.sh/blog)\n- [Privacy Policy](https://keeper.sh/privacy)\n- [Terms & Conditions](https://keeper.sh/terms)\n- [GitHub Repository](https://github.com/ridafkih/keeper.sh)\n- [Full LLM Context](https://keeper.sh/llms-full.txt)\n"
  },
  {
    "path": "applications/web/public/robots.txt",
    "content": "User-agent: *\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: GPTBot\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: ChatGPT-User\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: ClaudeBot\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: PerplexityBot\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: Google-Extended\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: Amazonbot\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: Applebot\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: Bytespider\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nUser-agent: Cohere-AI\nAllow: /\nDisallow: /dashboard\nDisallow: /auth\nDisallow: /login\nDisallow: /register\nDisallow: /verify-email\nDisallow: /verify-authentication\nDisallow: /reset-password\nDisallow: /forgot-password\n\nSitemap: https://keeper.sh/sitemap.xml\n"
  },
  {
    "path": "applications/web/public/site.webmanifest",
    "content": "{\n  \"name\": \"Keeper.sh\",\n  \"short_name\": \"Keeper\",\n  \"start_url\": \"/\",\n  \"icons\": [\n    {\n      \"src\": \"/180x180-light-on-dark.png\",\n      \"sizes\": \"180x180\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/180x180-light-on-dark.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\",\n      \"purpose\": \"any\"\n    },\n    {\n      \"src\": \"/512x512-on-light.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n  ],\n  \"theme_color\": \"#FAFAFA\",\n  \"background_color\": \"#FAFAFA\",\n  \"display\": \"standalone\"\n}\n"
  },
  {
    "path": "applications/web/scripts/build.ts",
    "content": "import { build } from \"bun\";\n\nawait build({\n  entrypoints: [\"src/server/index.ts\"],\n  outdir: \"./dist/server-entry\",\n  target: \"bun\",\n  splitting: false,\n  external: [\n    \"entrykit\",\n    \"linkedom\",\n    \"fast-xml-parser\",\n    \"vite\",\n    \"yaml\",\n    \"widelogger\",\n    \"pino-opentelemetry-transport\",\n  ],\n});\n"
  },
  {
    "path": "applications/web/scripts/start.ts",
    "content": "import { existsSync } from \"node:fs\";\n\nconst serverEntryUrl = new URL(\"../dist/server-entry/index.js\", import.meta.url);\n\nif (!existsSync(serverEntryUrl)) {\n  throw new Error(\n    \"Missing production server entry at applications/web/dist/server-entry/index.js. Run `bun run build` before `bun run start`.\",\n  );\n}\n\nawait import(serverEntryUrl.href);\n"
  },
  {
    "path": "applications/web/src/components/analytics-scripts.tsx",
    "content": "import { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\nimport { useLocation } from \"@tanstack/react-router\";\nimport type { PublicRuntimeConfig } from \"@/lib/runtime-config\";\nimport {\n  identify,\n  resolveEffectiveConsent,\n  track,\n} from \"@/lib/analytics\";\nimport { useSession } from \"@/hooks/use-session\";\n\nconst subscribe = (callback: () => void): (() => void) => {\n  window.addEventListener(\"storage\", callback);\n  return () => window.removeEventListener(\"storage\", callback);\n};\n\nconst getServerSnapshot = (): boolean => false;\n\nfunction resolveConsentLabel(hasConsent: boolean): \"granted\" | \"denied\" {\n  if (hasConsent) return \"granted\";\n  return \"denied\";\n}\n\nfunction AnalyticsScripts({ runtimeConfig }: { runtimeConfig: PublicRuntimeConfig }) {\n  const { gdprApplies, googleAdsId, visitorsNowToken } = runtimeConfig;\n  const getSnapshot = useCallback(\n    () => resolveEffectiveConsent(gdprApplies),\n    [gdprApplies],\n  );\n  const hasConsent = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n  const location = useLocation();\n  const consentState = resolveConsentLabel(hasConsent);\n  const { user } = useSession();\n  const identifiedUserId = useRef<string | null>(null);\n\n  useEffect(() => {\n    track(\"page_view\", { path: location.pathname });\n  }, [location.pathname]);\n\n  useEffect(() => {\n    if (!user) return;\n    if (identifiedUserId.current === user.id) return;\n\n    identifiedUserId.current = user.id;\n    identify({ id: user.id, email: user.email, name: user.name }, { gdprApplies });\n  }, [user, gdprApplies]);\n\n  return (\n    <>\n      {visitorsNowToken && (\n        <script\n          defer\n          src=\"https://cdn.visitors.now/v.js\"\n          data-token={visitorsNowToken}\n          {...(hasConsent && { \"data-persist\": true })}\n        />\n      )}\n      {googleAdsId && (\n        <>\n          <script\n            defer\n            dangerouslySetInnerHTML={{\n              __html: `\n                window.dataLayer = window.dataLayer || [];\n                function gtag(){dataLayer.push(arguments);}\n                gtag('consent', 'default', {\n                  'ad_storage': '${consentState}',\n                  'ad_user_data': '${consentState}',\n                  'ad_personalization': '${consentState}',\n                  'analytics_storage': '${consentState}',\n                  'wait_for_update': 500\n                });\n              `,\n            }}\n          />\n          <script\n            async\n            src={`https://www.googletagmanager.com/gtag/js?id=${googleAdsId}`}\n          />\n          <script\n            dangerouslySetInnerHTML={{\n              __html: `\n                window.dataLayer = window.dataLayer || [];\n                function gtag(){dataLayer.push(arguments);}\n                gtag('js', new Date());\n                gtag('config', '${googleAdsId}');\n              `,\n            }}\n          />\n        </>\n      )}\n    </>\n  );\n}\n\nexport { AnalyticsScripts };\n"
  },
  {
    "path": "applications/web/src/components/cookie-consent.tsx",
    "content": "import { useCallback, useState } from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport { AnimatePresence, LazyMotion } from \"motion/react\";\nimport * as m from \"motion/react-m\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { TextLink } from \"@/components/ui/primitives/text-link\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { hasConsentChoice, setAnalyticsConsent, track } from \"@/lib/analytics\";\n\nconst CARD_ENTER = { opacity: 0, y: 10, filter: \"blur(4px)\" };\nconst CARD_VISIBLE = { opacity: 1, y: 0, filter: \"blur(0px)\" };\nconst CARD_EXIT = { opacity: 0, y: 10, filter: \"blur(4px)\" };\nconst COLLAPSE_ANIMATE = { height: \"auto\" };\nconst COLLAPSE_EXIT = { height: 0 };\nconst CARD_TRANSITION = { duration: 0.2 };\nconst COLLAPSE_TRANSITION = { duration: 0.2, delay: 0.15 };\n\nfunction resolveConsentEventName(consent: boolean): string {\n  if (consent) return \"consent_granted\";\n  return \"consent_denied\";\n}\n\nfunction ConsentBannerContent({ children }: PropsWithChildren) {\n  return (\n    <div className=\"flex items-center gap-3\">\n      {children}\n    </div>\n  );\n}\n\nfunction ConsentBannerActions({ children }: PropsWithChildren) {\n  return (\n    <div className=\"flex gap-1 shrink-0\">\n      {children}\n    </div>\n  );\n}\n\nfunction ConsentBannerCard({ children }: PropsWithChildren) {\n  return (\n    <div className=\"rounded-2xl bg-background border border-interactive-border shadow-xs px-3 py-2 pointer-events-auto\">\n      {children}\n    </div>\n  );\n}\n\nfunction CookieConsent() {\n  const [visible, setVisible] = useState(() => !hasConsentChoice());\n\n  const handleChoice = useCallback((consent: boolean): void => {\n    track(resolveConsentEventName(consent));\n    setAnalyticsConsent(consent);\n    setVisible(false);\n  }, []);\n\n  return (\n    <div className=\"sticky bottom-0 z-50 px-4 pb-4 pointer-events-none\">\n      <div className=\"mx-auto flex max-w-3xl justify-end\">\n        <LazyMotion features={loadMotionFeatures}>\n          <AnimatePresence>\n            {visible && (\n              <m.div\n                className=\"flex flex-col items-start overflow-visible\"\n                initial={false}\n                animate={COLLAPSE_ANIMATE}\n                exit={COLLAPSE_EXIT}\n                transition={COLLAPSE_TRANSITION}\n              >\n                <m.div\n                  initial={CARD_ENTER}\n                  animate={CARD_VISIBLE}\n                  exit={CARD_EXIT}\n                  transition={CARD_TRANSITION}\n                >\n                  <ConsentBannerCard>\n                    <ConsentBannerContent>\n                      <Text as=\"span\" size=\"sm\">\n                        Can Keeper{\" \"}\n                        <TextLink to=\"/privacy\" size=\"sm\">\n                          use cookies for analytics?\n                        </TextLink>\n                      </Text>\n                      <ConsentBannerActions>\n                        <Button size=\"compact\" variant=\"border\" onClick={() => handleChoice(true)}>\n                          <ButtonText>Yes</ButtonText>\n                        </Button>\n                        <Button size=\"compact\" variant=\"border\" onClick={() => handleChoice(false)}>\n                          <ButtonText>No</ButtonText>\n                        </Button>\n                      </ConsentBannerActions>\n                    </ConsentBannerContent>\n                  </ConsentBannerCard>\n                </m.div>\n              </m.div>\n            )}\n          </AnimatePresence>\n        </LazyMotion>\n      </div>\n    </div>\n  );\n}\n\nexport { CookieConsent };\n"
  },
  {
    "path": "applications/web/src/components/ui/composites/navigation-menu/navigation-menu-editable.tsx",
    "content": "import { use, useEffect, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type ReactNode } from \"react\";\nimport Pencil from \"lucide-react/dist/esm/icons/pencil\";\nimport { cn } from \"@/utils/cn\";\nimport { ItemDisabledContext, MenuVariantContext } from \"./navigation-menu.contexts\";\nimport {\n  DISABLED_LABEL_TONE,\n  LABEL_TONE,\n  navigationMenuItemIconStyle,\n  navigationMenuItemStyle,\n} from \"./navigation-menu.styles\";\nimport { NavigationMenuItemLabel } from \"./navigation-menu-items\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\ntype NavigationMenuEditableItemProps = {\n  onCommit: (value: string) => Promise<void> | void;\n  label?: string;\n  children?: ReactNode;\n  defaultEditing?: boolean;\n  disabled?: boolean;\n  className?: string;\n} & ({ value: string } | { getValue: () => string });\n\nexport function NavigationMenuEditableItem(props: NavigationMenuEditableItemProps) {\n  const {\n    onCommit,\n    label,\n    children,\n    defaultEditing,\n    disabled,\n    className,\n  } = props;\n\n  const resolveValue = () => \"getValue\" in props ? props.getValue() : props.value;\n\n  const [editing, setEditing] = useState(defaultEditing ?? false);\n\n  const startEditing = () => setEditing(true);\n  const stopEditing = () => setEditing(false);\n\n  if (editing) {\n    return (\n      <EditableItemInput\n        value={resolveValue()}\n        label={label}\n        className={className}\n        onCommit={async (trimmed) => {\n          await onCommit(trimmed);\n          stopEditing();\n        }}\n        onCancel={stopEditing}\n      />\n    );\n  }\n\n  return (\n    <EditableItemDisplay\n      label={label}\n      disabled={disabled}\n      className={className}\n      onStartEditing={startEditing}\n    >\n      {children ?? <EditableItemDefaultValue value={resolveValue()} label={label} />}\n    </EditableItemDisplay>\n  );\n}\n\ntype NavigationMenuEditableTemplateItemProps = {\n  onCommit: (value: string) => Promise<void> | void;\n  label?: string;\n  valueContent?: ReactNode;\n  children?: ReactNode;\n  renderInput: (value: string) => ReactNode;\n  defaultEditing?: boolean;\n  disabled?: boolean;\n  className?: string;\n} & ({ value: string } | { getValue: () => string });\n\nexport function NavigationMenuEditableTemplateItem(props: NavigationMenuEditableTemplateItemProps) {\n  const {\n    onCommit,\n    label,\n    valueContent,\n    children,\n    renderInput,\n    defaultEditing,\n    disabled,\n    className,\n  } = props;\n\n  const resolveValue = () => \"getValue\" in props ? props.getValue() : props.value;\n\n  const [editing, setEditing] = useState(defaultEditing ?? false);\n\n  const startEditing = () => setEditing(true);\n  const stopEditing = () => setEditing(false);\n\n  if (editing) {\n    return (\n      <EditableTemplateItemInput\n        value={resolveValue()}\n        label={label}\n        renderInput={renderInput}\n        className={className}\n        onCommit={async (trimmed) => {\n          await onCommit(trimmed);\n          stopEditing();\n        }}\n        onCancel={stopEditing}\n      />\n    );\n  }\n\n  return (\n    <EditableItemDisplay\n      label={label}\n      disabled={disabled}\n      className={className}\n      onStartEditing={startEditing}\n    >\n      {children ?? <EditableItemDefaultValue value={valueContent ?? resolveValue()} label={label} />}\n    </EditableItemDisplay>\n  );\n}\n\nfunction useEditableCommit(\n  value: string,\n  onCommit: (value: string) => Promise<void> | void,\n  onCancel: () => void,\n) {\n  const inputRef = useRef<HTMLInputElement>(null);\n  const committingRef = useRef(false);\n\n  const commit = async () => {\n    if (committingRef.current) return;\n\n    const trimmed = inputRef.current?.value.trim();\n    if (!trimmed || trimmed === value) {\n      onCancel();\n      return;\n    }\n\n    committingRef.current = true;\n    try {\n      await onCommit(trimmed);\n    } finally {\n      committingRef.current = false;\n    }\n  };\n\n  const handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n    if (event.key === \"Enter\") {\n      event.preventDefault();\n      void commit();\n    }\n\n    if (event.key === \"Escape\") {\n      onCancel();\n    }\n  };\n\n  const inputProps = {\n    ref: inputRef,\n    type: \"text\" as const,\n    defaultValue: value,\n    autoComplete: \"off\",\n    onBlur: () => {\n      void commit();\n    },\n    onKeyDown: handleKeyDown,\n    autoFocus: true,\n  };\n\n  return { inputProps };\n}\n\nfunction EditableItemInput({\n  value,\n  label,\n  className,\n  onCommit,\n  onCancel,\n}: {\n  value: string;\n  label?: string;\n  className?: string;\n  onCommit: (value: string) => Promise<void> | void;\n  onCancel: () => void;\n}) {\n  const variant = use(MenuVariantContext);\n  const { inputProps } = useEditableCommit(value, onCommit, onCancel);\n  const inputClass = cn(\n    \"min-w-0 text-sm tracking-tight bg-transparent cursor-text outline-none\",\n    label ? \"flex-1 text-right\" : \"flex-1\",\n  );\n\n  return (\n    <li className=\"relative z-10 rounded-[0.875rem] has-focus:ring-2 has-focus:ring-ring\">\n      <div className={navigationMenuItemStyle({ variant, interactive: false, className })}>\n        {label && <NavigationMenuItemLabel className=\"shrink-0\">{label}</NavigationMenuItemLabel>}\n        <input {...inputProps} className={cn(inputClass, \"text-foreground-muted\")} />\n      </div>\n    </li>\n  );\n}\n\nfunction EditableTemplateItemInput({\n  value,\n  label,\n  className,\n  renderInput,\n  onCommit,\n  onCancel,\n}: {\n  value: string;\n  label?: string;\n  className?: string;\n  renderInput: (value: string) => ReactNode;\n  onCommit: (value: string) => Promise<void> | void;\n  onCancel: () => void;\n}) {\n  const variant = use(MenuVariantContext);\n  const { inputProps } = useEditableCommit(value, onCommit, onCancel);\n  const inputClass = cn(\n    \"min-w-0 text-sm tracking-tight bg-transparent cursor-text outline-none\",\n    label ? \"flex-1 text-right\" : \"flex-1\",\n  );\n\n  return (\n    <li className=\"relative z-10 rounded-[0.875rem] has-focus:ring-2 has-focus:ring-ring\">\n      <div className={navigationMenuItemStyle({ variant, interactive: false, className })}>\n        {label && <NavigationMenuItemLabel className=\"shrink-0\">{label}</NavigationMenuItemLabel>}\n        <div className={cn(inputClass, \"grid items-center\")}>\n          <input\n            {...inputProps}\n            className={cn(\n              \"col-start-1 row-start-1 w-full text-sm tracking-tight bg-transparent text-transparent caret-foreground-muted cursor-text outline-none\",\n              label && \"text-right\",\n            )}\n          />\n          <TemplateInputOverlay\n            inputRef={inputProps.ref}\n            defaultValue={value}\n            renderInput={renderInput}\n            label={label}\n          />\n        </div>\n      </div>\n    </li>\n  );\n}\n\nfunction TemplateInputOverlay({\n  inputRef,\n  defaultValue,\n  renderInput,\n  label,\n}: {\n  inputRef: React.RefObject<HTMLInputElement | null>;\n  defaultValue: string;\n  renderInput: (value: string) => ReactNode;\n  label?: string;\n}) {\n  const [liveValue, setLiveValue] = useState(defaultValue);\n  const overlayRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const input = inputRef.current;\n    if (!input) return;\n\n    const handleInput = () => setLiveValue(input.value);\n    const handleScroll = () => {\n      if (overlayRef.current) overlayRef.current.scrollLeft = input.scrollLeft;\n    };\n\n    input.addEventListener(\"input\", handleInput);\n    input.addEventListener(\"scroll\", handleScroll);\n    return () => {\n      input.removeEventListener(\"input\", handleInput);\n      input.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [inputRef]);\n\n  return (\n    <div\n      ref={overlayRef}\n      className={cn(\n        \"col-start-1 row-start-1 pointer-events-none text-sm tracking-tight whitespace-pre overflow-hidden\",\n        label && \"text-right\",\n      )}\n    >\n      {renderInput(liveValue)}\n    </div>\n  );\n}\n\nfunction EditableItemDefaultValue({ value, label }: { value: ReactNode; label?: string }) {\n  const variant = use(MenuVariantContext);\n  const disabled = use(ItemDisabledContext);\n\n  return (\n    <Text\n      size=\"sm\"\n      tone={(disabled ? DISABLED_LABEL_TONE : LABEL_TONE)[variant ?? \"default\"]}\n      className={cn(\"min-w-0 truncate\", label && \"flex-1 text-right\")}\n    >\n      {value}\n    </Text>\n  );\n}\n\nfunction EditableItemDisplay({\n  label,\n  children,\n  disabled: disabledProp,\n  className,\n  onStartEditing,\n}: {\n  label?: string;\n  children?: ReactNode;\n  disabled?: boolean;\n  className?: string;\n  onStartEditing: () => void;\n}) {\n  const variant = use(MenuVariantContext);\n  const disabledFromContext = use(ItemDisabledContext);\n  const disabled = disabledProp || disabledFromContext;\n\n  return (\n    <li>\n      <ItemDisabledContext value={disabled}>\n        <button\n          type=\"button\"\n          onClick={() => !disabled && onStartEditing()}\n          disabled={disabled}\n          className={navigationMenuItemStyle({ variant, interactive: !disabled, className })}\n        >\n          {label && <NavigationMenuItemLabel className=\"shrink-0\">{label}</NavigationMenuItemLabel>}\n          {children}\n          <Pencil\n            size={14}\n            className={navigationMenuItemIconStyle({\n              variant,\n              disabled,\n              className: label ? \"shrink-0\" : \"ml-auto\",\n            })}\n          />\n        </button>\n      </ItemDisabledContext>\n    </li>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/composites/navigation-menu/navigation-menu-items.tsx",
    "content": "import type { ComponentPropsWithoutRef, PropsWithChildren } from \"react\";\nimport { use } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport ArrowRight from \"lucide-react/dist/esm/icons/arrow-right\";\nimport { cn } from \"@/utils/cn\";\nimport {\n  InsidePopoverContext,\n  ItemDisabledContext,\n  ItemIsLinkContext,\n  MenuVariantContext,\n} from \"./navigation-menu.contexts\";\nimport {\n  DISABLED_LABEL_TONE,\n  LABEL_TONE,\n  navigationMenuItemIconStyle,\n  navigationMenuItemStyle,\n  navigationMenuStyle,\n  navigationMenuToggleThumb,\n  navigationMenuToggleTrack,\n  type MenuVariant,\n} from \"./navigation-menu.styles\";\nimport { CheckboxIndicator } from \"@/components/ui/primitives/checkbox\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\ntype NavigationMenuProps = PropsWithChildren<{\n  variant?: MenuVariant;\n  className?: string;\n}>;\n\nexport function NavigationMenu({\n  children,\n  variant,\n  className,\n}: NavigationMenuProps) {\n  return (\n    <MenuVariantContext value={variant ?? \"default\"}>\n      <ul className={navigationMenuStyle({ variant, className })}>{children}</ul>\n    </MenuVariantContext>\n  );\n}\n\ntype NavigationMenuItemProps = PropsWithChildren<{\n  className?: string;\n}>;\n\ntype NavigationMenuLinkItemProps = PropsWithChildren<{\n  to?: ComponentPropsWithoutRef<typeof Link>[\"to\"];\n  onMouseEnter?: () => void;\n  disabled?: boolean;\n  className?: string;\n}>;\n\ntype NavigationMenuButtonItemProps = PropsWithChildren<{\n  onClick?: () => void;\n  disabled?: boolean;\n  className?: string;\n}>;\n\ntype NavigationMenuItemLabelProps = PropsWithChildren<{\n  className?: string;\n}>;\n\ntype NavigationMenuItemTrailingProps = PropsWithChildren<{\n  className?: string;\n}>;\n\nexport function NavigationMenuItem({\n  className,\n  children,\n}: NavigationMenuItemProps) {\n  const variant = use(MenuVariantContext);\n  const insidePopover = use(InsidePopoverContext);\n  const itemClass = navigationMenuItemStyle({ variant, interactive: false, className });\n  const Wrapper = insidePopover ? \"div\" : \"li\";\n  const content = <ItemIsLinkContext value={false}>{children}</ItemIsLinkContext>;\n\n  return (\n    <Wrapper>\n      <div className={itemClass}>{content}</div>\n    </Wrapper>\n  );\n}\n\nexport function NavigationMenuLinkItem({\n  to,\n  onMouseEnter,\n  disabled,\n  className,\n  children,\n}: NavigationMenuLinkItemProps) {\n  const variant = use(MenuVariantContext);\n  const insidePopover = use(InsidePopoverContext);\n  const interactive = Boolean(to) && !disabled;\n  const itemClass = navigationMenuItemStyle({ variant, interactive, className });\n  const Wrapper = insidePopover ? \"div\" : \"li\";\n  const content = <ItemIsLinkContext value={interactive}>{children}</ItemIsLinkContext>;\n\n  return (\n    <Wrapper>\n      <ItemDisabledContext value={Boolean(disabled)}>\n        {interactive ? (\n          <Link\n            draggable=\"false\"\n            to={to}\n            className={itemClass}\n            onMouseEnter={onMouseEnter}\n          >\n            {content}\n          </Link>\n        ) : (\n          <div className={itemClass} aria-disabled={disabled}>\n            {content}\n          </div>\n        )}\n      </ItemDisabledContext>\n    </Wrapper>\n  );\n}\n\nexport function NavigationMenuButtonItem({\n  onClick,\n  disabled,\n  className,\n  children,\n}: NavigationMenuButtonItemProps) {\n  const variant = use(MenuVariantContext);\n  const insidePopover = use(InsidePopoverContext);\n  const interactive = Boolean(onClick) && !disabled;\n  const itemClass = navigationMenuItemStyle({ variant, interactive, className });\n  const Wrapper = insidePopover ? \"div\" : \"li\";\n  const content = <ItemIsLinkContext value={false}>{children}</ItemIsLinkContext>;\n\n  return (\n    <Wrapper>\n      <ItemDisabledContext value={Boolean(disabled)}>\n        <button type=\"button\" onClick={onClick} disabled={disabled} className={itemClass}>\n          {content}\n        </button>\n      </ItemDisabledContext>\n    </Wrapper>\n  );\n}\n\nexport function NavigationMenuItemIcon({ children }: PropsWithChildren) {\n  const variant = use(MenuVariantContext);\n  const disabled = use(ItemDisabledContext);\n\n  return <div className={navigationMenuItemIconStyle({ variant, disabled })}>{children}</div>;\n}\n\nexport function NavigationMenuItemLabel({\n  children,\n  className,\n}: NavigationMenuItemLabelProps) {\n  const variant = use(MenuVariantContext);\n  const disabled = use(ItemDisabledContext);\n  const toneMap = disabled ? DISABLED_LABEL_TONE : LABEL_TONE;\n\n  return (\n    <Text\n      size=\"sm\"\n      tone={toneMap[variant ?? \"default\"]}\n      align=\"left\"\n      className={cn(\"min-w-0 truncate\", className)}\n    >\n      {children}\n    </Text>\n  );\n}\n\nexport function NavigationMenuEmptyItem({ children }: PropsWithChildren) {\n  const variant = use(MenuVariantContext);\n\n  return (\n    <li>\n      <div className={navigationMenuItemStyle({ variant, interactive: false })}>\n        <Text\n          size=\"sm\"\n          tone={LABEL_TONE[variant ?? \"default\"]}\n          align=\"center\"\n          className=\"w-full\"\n        >\n          {children}\n        </Text>\n      </div>\n    </li>\n  );\n}\n\nexport function NavigationMenuItemTrailing({\n  children,\n  className,\n}: NavigationMenuItemTrailingProps) {\n  const isLink = use(ItemIsLinkContext);\n  const variant = use(MenuVariantContext);\n\n  return (\n    <div className={cn(\"flex grow min-w-0 items-center gap-1 justify-end\", className)}>\n      {children}\n      {isLink && (\n        <ArrowRight\n          className={cn(\"shrink-0\", navigationMenuItemIconStyle({ variant }))}\n          size={15}\n        />\n      )}\n    </div>\n  );\n}\n\ntype NavigationMenuToggleableItemProps = PropsWithChildren<{\n  checked: boolean;\n  onCheckedChange: (checked: boolean) => void;\n  disabled?: boolean;\n  className?: string;\n}>;\n\nexport function NavigationMenuCheckboxItem({\n  checked,\n  onCheckedChange,\n  disabled,\n  className,\n  children,\n}: NavigationMenuToggleableItemProps) {\n  const variant = use(MenuVariantContext);\n\n  return (\n    <li>\n      <ItemDisabledContext value={Boolean(disabled)}>\n        <button\n          type=\"button\"\n          role=\"checkbox\"\n          aria-checked={checked}\n          disabled={disabled}\n          onClick={() => !disabled && onCheckedChange(!checked)}\n          className={navigationMenuItemStyle({ variant, interactive: !disabled, className })}\n        >\n          {children}\n          <CheckboxIndicator checked={checked} variant={variant} className=\"ml-auto\" />\n        </button>\n      </ItemDisabledContext>\n    </li>\n  );\n}\n\nexport function NavigationMenuToggleItem({\n  checked,\n  onCheckedChange,\n  disabled,\n  className,\n  children,\n}: NavigationMenuToggleableItemProps) {\n  const variant = use(MenuVariantContext);\n\n  return (\n    <li>\n      <ItemDisabledContext value={Boolean(disabled)}>\n        <button\n          type=\"button\"\n          role=\"switch\"\n          aria-checked={checked}\n          disabled={disabled}\n          onClick={() => !disabled && onCheckedChange(!checked)}\n          className={navigationMenuItemStyle({ variant, interactive: !disabled, className })}\n        >\n          {children}\n          <div\n            className={navigationMenuToggleTrack({\n              variant,\n              checked,\n              disabled,\n              className: \"ml-auto\",\n            })}\n          >\n            <div className={navigationMenuToggleThumb({ variant, checked })} />\n          </div>\n        </button>\n      </ItemDisabledContext>\n    </li>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/composites/navigation-menu/navigation-menu-popover.tsx",
    "content": "import { use, useCallback, useEffect, useRef, useState, type PropsWithChildren, type ReactNode } from \"react\";\nimport { useSetAtom } from \"jotai\";\nimport { AnimatePresence, LazyMotion } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\nimport ChevronsUpDown from \"lucide-react/dist/esm/icons/chevrons-up-down\";\nimport { cn } from \"@/utils/cn\";\nimport { popoverOverlayAtom } from \"@/state/popover-overlay\";\nimport {\n  InsidePopoverContext,\n  ItemDisabledContext,\n  MenuVariantContext,\n  PopoverContext,\n  usePopover,\n} from \"./navigation-menu.contexts\";\nimport {\n  navigationMenuItemIconStyle,\n  navigationMenuItemStyle,\n  navigationMenuStyle,\n} from \"./navigation-menu.styles\";\n\nconst POPOVER_INITIAL = { opacity: 1 } as const;\nconst SHADOW_HIDDEN = { boxShadow: \"0 0 0 0 rgba(0,0,0,0)\" } as const;\nconst SHADOW_VISIBLE = {\n  boxShadow: \"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)\",\n} as const;\nconst TRIGGER_INITIAL = { height: \"fit-content\" as const, filter: \"blur(4px)\", opacity: 1 };\nconst TRIGGER_ANIMATE = { height: 0, filter: \"blur(0)\", opacity: 0 };\nconst TRIGGER_EXIT = { height: \"fit-content\" as const, filter: \"blur(0)\", opacity: 1 };\nconst CONTENT_INITIAL = { height: 0, filter: \"blur(0)\", opacity: 0 };\nconst CONTENT_ANIMATE = { height: \"fit-content\" as const, filter: \"blur(0)\", opacity: 1 };\nconst CONTENT_EXIT = { height: 0, filter: \"blur(4px)\", opacity: 0 };\nconst POPOVER_CONTENT_STYLE = { maxHeight: \"16rem\" } as const;\n\ntype NavigationMenuPopoverProps = {\n  trigger: ReactNode;\n  children: ReactNode;\n  disabled?: boolean;\n};\n\nexport function NavigationMenuPopover({\n  trigger,\n  children,\n  disabled,\n}: NavigationMenuPopoverProps) {\n  const [expanded, setExpanded] = useState(false);\n  const [present, setPresent] = useState(false);\n  const containerRef = useRef<HTMLLIElement>(null);\n  const setOverlay = useSetAtom(popoverOverlayAtom);\n  const variant = use(MenuVariantContext);\n\n  const close = useCallback(() => {\n    setExpanded(false);\n    setOverlay(false);\n  }, [setOverlay]);\n\n  const open = useCallback(() => {\n    setExpanded(true);\n    setPresent(true);\n    setOverlay(true);\n  }, [setOverlay]);\n\n  const toggle = useCallback(() => {\n    if (expanded) {\n      close();\n      return;\n    }\n    open();\n  }, [expanded, close, open]);\n\n  useEffect(() => () => setOverlay(false), [setOverlay]);\n\n  useEffect(() => {\n    if (!expanded) return;\n\n    const onKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Escape\") {\n        close();\n      }\n    };\n\n    const onPointerDown = (event: PointerEvent) => {\n      if (\n        containerRef.current\n        && event.target instanceof Node\n        && !containerRef.current.contains(event.target)\n      ) {\n        close();\n      }\n    };\n\n    document.addEventListener(\"keydown\", onKeyDown);\n    document.addEventListener(\"pointerdown\", onPointerDown);\n\n    return () => {\n      document.removeEventListener(\"keydown\", onKeyDown);\n      document.removeEventListener(\"pointerdown\", onPointerDown);\n    };\n  }, [expanded, close]);\n\n  return (\n    <PopoverContext value={{ expanded, toggle, close, triggerContent: trigger }}>\n      <li\n        ref={containerRef}\n        className={cn(\n          \"relative grid grid-cols-1 grid-rows-1 *:row-start-1 *:col-start-1\",\n          present ? \"z-20\" : \"z-0\",\n        )}\n      >\n        <ItemDisabledContext value={Boolean(disabled)}>\n          <button\n            type=\"button\"\n            onClick={disabled ? undefined : toggle}\n            disabled={disabled}\n            className={navigationMenuItemStyle({\n              variant,\n              interactive: !disabled,\n              className: \"relative z-10\",\n            })}\n          >\n            {trigger}\n            <ChevronsUpDown\n              size={15}\n              className={navigationMenuItemIconStyle({\n                variant,\n                disabled,\n                className: \"ml-auto shrink-0\",\n              })}\n            />\n          </button>\n        </ItemDisabledContext>\n        <LazyMotion features={loadMotionFeatures}>\n          <AnimatePresence onExitComplete={() => setPresent(false)}>\n            {expanded && <NavigationMenuPopoverPanel>{children}</NavigationMenuPopoverPanel>}\n          </AnimatePresence>\n        </LazyMotion>\n      </li>\n    </PopoverContext>\n  );\n}\n\nfunction NavigationMenuPopoverPanel({ children }: PropsWithChildren) {\n  const { triggerContent } = usePopover();\n  const variant = use(MenuVariantContext);\n\n  return (\n    <m.div\n      className=\"absolute grid place-items-center -inset-0.75 pointer-events-none z-20\"\n      initial={POPOVER_INITIAL}\n    >\n      <m.div\n        className={navigationMenuStyle({\n          variant,\n          className: \"w-full overflow-hidden pointer-events-auto\",\n        })}\n        initial={SHADOW_HIDDEN}\n        animate={SHADOW_VISIBLE}\n        exit={SHADOW_HIDDEN}\n      >\n        <m.div\n          className=\"flex flex-col justify-end\"\n          initial={TRIGGER_INITIAL}\n          animate={TRIGGER_ANIMATE}\n          exit={TRIGGER_EXIT}\n        >\n          <div className={navigationMenuItemStyle({ variant, interactive: false })}>\n            {triggerContent}\n            <ChevronsUpDown\n              size={15}\n              className={navigationMenuItemIconStyle({ variant, className: \"ml-auto shrink-0\" })}\n            />\n          </div>\n        </m.div>\n        <m.div\n          className=\"overflow-hidden\"\n          initial={CONTENT_INITIAL}\n          animate={CONTENT_ANIMATE}\n          exit={CONTENT_EXIT}\n        >\n          <InsidePopoverContext value>\n            <div className=\"overflow-y-auto\" style={POPOVER_CONTENT_STYLE}>\n              {children}\n            </div>\n          </InsidePopoverContext>\n        </m.div>\n      </m.div>\n    </m.div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/composites/navigation-menu/navigation-menu.contexts.ts",
    "content": "import { createContext, use, type ReactNode } from \"react\";\nimport type { MenuVariant } from \"./navigation-menu.styles\";\n\nexport const MenuVariantContext = createContext<MenuVariant>(\"default\");\nexport const ItemIsLinkContext = createContext(false);\nexport const InsidePopoverContext = createContext(false);\nexport const ItemDisabledContext = createContext(false);\n\ntype PopoverContextValue = {\n  expanded: boolean;\n  toggle: () => void;\n  close: () => void;\n  triggerContent: ReactNode;\n};\n\nexport const PopoverContext = createContext<PopoverContextValue | null>(null);\n\nexport function usePopover() {\n  const context = use(PopoverContext);\n  if (!context) {\n    throw new Error(\n      \"NavigationMenuPopover subcomponents must be used within NavigationMenuPopover\",\n    );\n  }\n  return context;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/composites/navigation-menu/navigation-menu.styles.ts",
    "content": "import { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nexport const navigationMenuStyle = tv({\n  base: \"flex flex-col rounded-2xl p-0.5\",\n  variants: {\n    variant: {\n      default: \"bg-background-elevated border border-border-elevated shadow-xs\",\n      highlight: \"relative before:absolute before:top-0.5 before:inset-x-0 before:h-px before:bg-linear-to-r before:mx-4 before:z-10 before:from-transparent before:to-transparent dark:bg-blue-700 dark:before:via-blue-400 bg-blue-500 before:via-blue-300\"\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n  },\n});\n\nexport type MenuVariant = VariantProps<typeof navigationMenuStyle>[\"variant\"];\n\nexport const navigationMenuItemStyle = tv({\n  base: \"rounded-[0.875rem] flex items-center gap-3 p-3.5 sm:p-3 w-full\",\n  variants: {\n    variant: {\n      default: \"\",\n      highlight: \"bg-linear-to-t dark:to-blue-600 dark:from-blue-700 to-blue-500 from-blue-600\",\n    },\n    interactive: {\n      true: \"hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n      false: \"\",\n    },\n  },\n  compoundVariants: [\n    { variant: \"default\", interactive: true, className: \"hover:bg-background-hover\" },\n    { variant: \"highlight\", interactive: true, className: \"hover:brightness-110\" },\n  ],\n  defaultVariants: {\n    variant: \"default\",\n    interactive: true,\n  },\n});\n\nexport const navigationMenuItemIconStyle = tv({\n  base: \"shrink-0\",\n  variants: {\n    variant: {\n      default: \"text-foreground-muted\",\n      highlight: \"text-white\",\n    },\n    disabled: {\n      true: \"text-foreground-disabled\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n  },\n});\n\n\nexport const navigationMenuToggleTrack = tv({\n  base: \"w-8 h-5 rounded-full shrink-0 flex items-center p-0.5\",\n  variants: {\n    variant: {\n      default: \"\",\n      highlight: \"\",\n    },\n    checked: {\n      true: \"\",\n      false: \"\",\n    },\n    disabled: {\n      true: \"opacity-30\",\n      false: \"\",\n    },\n  },\n  compoundVariants: [\n    { variant: \"default\", checked: false, className: \"bg-interactive-border\" },\n    { variant: \"default\", checked: true, className: \"bg-foreground\" },\n    { variant: \"highlight\", checked: false, className: \"bg-foreground-inverse-muted\" },\n    { variant: \"highlight\", checked: true, className: \"bg-foreground-inverse\" },\n  ],\n  defaultVariants: {\n    variant: \"default\",\n    checked: false,\n    disabled: false,\n  },\n});\n\nexport const navigationMenuToggleThumb = tv({\n  base: \"size-4 rounded-full\",\n  variants: {\n    variant: {\n      default: \"bg-background-elevated\",\n      highlight: \"bg-foreground\",\n    },\n    checked: {\n      true: \"ml-auto\",\n      false: \"\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n    checked: false,\n  },\n});\n\nexport const navigationMenuCheckbox = tv({\n  base: \"size-4 rounded shrink-0 flex items-center justify-center border\",\n  variants: {\n    variant: {\n      default: \"border-interactive-border\",\n      highlight: \"border-foreground-inverse-muted\",\n    },\n    checked: {\n      true: \"\",\n      false: \"\",\n    },\n  },\n  compoundVariants: [\n    { variant: \"default\", checked: true, className: \"bg-foreground border-foreground\" },\n    { variant: \"highlight\", checked: true, className: \"bg-foreground-inverse border-foreground-inverse\" },\n  ],\n  defaultVariants: {\n    variant: \"default\",\n    checked: false,\n  },\n});\n\nexport const navigationMenuCheckboxIcon = tv({\n  base: \"shrink-0\",\n  variants: {\n    variant: {\n      default: \"text-foreground-inverse\",\n      highlight: \"text-foreground\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n  },\n});\n\nexport const LABEL_TONE: Record<NonNullable<MenuVariant>, \"muted\" | \"inverse\" | \"highlight\"> = {\n  default: \"muted\",\n  highlight: \"highlight\",\n};\n\nexport const DISABLED_LABEL_TONE: Record<\n  NonNullable<MenuVariant>,\n  \"disabled\" | \"inverseMuted\" | \"highlight\"\n> = {\n  default: \"disabled\",\n  highlight: \"highlight\",\n};\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/animated-reveal.tsx",
    "content": "import { AnimatePresence, LazyMotion } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\nimport type { ReactNode } from \"react\";\n\nconst HIDDEN = { height: 0, opacity: 0, filter: \"blur(4px)\" };\nconst VISIBLE = { height: \"fit-content\", opacity: 1, filter: \"blur(0)\" };\nconst CLIP_STYLE = { overflow: \"clip\" as const, overflowClipMargin: 4 };\n\ninterface AnimatedRevealProps {\n  show: boolean;\n  skipInitial?: boolean;\n  children: ReactNode;\n}\n\nexport function AnimatedReveal({ show, skipInitial, children }: AnimatedRevealProps) {\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <AnimatePresence initial={!skipInitial}>\n        {show && (\n          <m.div\n            style={CLIP_STYLE}\n            initial={HIDDEN}\n            animate={VISIBLE}\n            exit={HIDDEN}\n          >\n            {children}\n          </m.div>\n        )}\n      </AnimatePresence>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/back-button.tsx",
    "content": "import { useRouter, useCanGoBack, useNavigate } from \"@tanstack/react-router\";\nimport ArrowLeft from \"lucide-react/dist/esm/icons/arrow-left\";\nimport { Button, ButtonIcon, type ButtonProps } from \"./button\";\n\ninterface BackButtonProps {\n  fallback?: string;\n  variant?: ButtonProps[\"variant\"];\n  size?: ButtonProps[\"size\"];\n  className?: string;\n}\n\nexport function BackButton({\n  fallback = \"/dashboard\",\n  variant = \"elevated\",\n  size = \"compact\",\n  className = \"aspect-square\",\n}: BackButtonProps) {\n  const router = useRouter();\n  const canGoBack = useCanGoBack();\n  const navigate = useNavigate();\n\n  const handleBack = () => {\n    if (canGoBack) return router.history.back();\n    navigate({ to: fallback });\n  };\n\n  return (\n    <Button\n      type=\"button\"\n      variant={variant}\n      size={size}\n      className={className}\n      onClick={handleBack}\n    >\n      <ButtonIcon>\n        <ArrowLeft size={16} />\n      </ButtonIcon>\n    </Button>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/button.tsx",
    "content": "import type { ComponentPropsWithoutRef, PropsWithChildren } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst button = tv({\n  base: \"flex items-center gap-1 rounded-xl tracking-tighter border hover:cursor-pointer w-fit font-light focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-40 disabled:pointer-events-none\",\n  variants: {\n    size: {\n      compact: \"px-3 py-1.5 text-sm\",\n      standard: \"px-4 py-2.5\",\n    },\n    variant: {\n      highlight: \"shadow-xs border-transparent bg-foreground text-background hover:bg-foreground-hover\",\n      border: \"border-interactive-border shadow-xs bg-background hover:bg-background-hover\",\n      elevated: \"border-border-elevated shadow-xs bg-background-elevated hover:bg-background-hover\",\n      ghost: \"border-transparent bg-transparent hover:bg-foreground/5\",\n      inverse: \"shadow-xs border-transparent bg-white text-neutral-900 hover:bg-neutral-200\",\n      \"inverse-ghost\": \"border-transparent bg-transparent text-neutral-300 hover:bg-white/10 hover:text-white\",\n      destructive: \"shadow-xs border-destructive-border bg-destructive-background text-destructive hover:bg-destructive-background-hover\",\n    },\n  },\n  defaultVariants: {\n    size: \"standard\",\n    variant: \"highlight\",\n  }\n})\n\nexport type ButtonProps = VariantProps<typeof button>;\ntype ButtonOptions = ComponentPropsWithoutRef<\"button\"> & ButtonProps;\ntype LinkButtonOptions = Omit<ComponentPropsWithoutRef<typeof Link>, \"children\" | \"className\"> &\n  PropsWithChildren<VariantProps<typeof button> & { className?: string }>;\ntype ExternalLinkButtonOptions = ComponentPropsWithoutRef<\"a\"> & VariantProps<typeof button>;\n\nexport function Button({ children, size, variant, className, ...props }: ButtonOptions) {\n  return (\n    <button draggable={false} className={button({ size, variant, className })} {...props}>{children}</button>\n  )\n}\n\nexport function LinkButton({ children, size, variant, className, ...props }: LinkButtonOptions) {\n  return (\n    <Link className={button({ size, variant, className })} {...props}>{children}</Link>\n  )\n}\n\nexport function ExternalLinkButton({ children, size, variant, className, ...props }: ExternalLinkButtonOptions) {\n  return (\n    <a className={button({ size, variant, className })} {...props}>{children}</a>\n  )\n}\n\nexport function ButtonText({ children }: PropsWithChildren) {\n  return <span className=\"font-medium\">{children}</span>\n}\n\nexport function ButtonIcon({ children }: PropsWithChildren) {\n  return children\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/checkbox.tsx",
    "content": "import type { ReactNode } from \"react\";\nimport Check from \"lucide-react/dist/esm/icons/check\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { cn } from \"@/utils/cn\";\nimport { Text } from \"./text\";\n\nconst checkboxIndicator = tv({\n  base: \"size-4 rounded shrink-0 flex items-center justify-center border\",\n  variants: {\n    variant: {\n      default: \"border-interactive-border\",\n      highlight: \"border-foreground-inverse-muted\",\n    },\n    checked: {\n      true: \"\",\n      false: \"\",\n    },\n  },\n  compoundVariants: [\n    { variant: \"default\", checked: true, className: \"bg-foreground border-foreground\" },\n    { variant: \"highlight\", checked: true, className: \"bg-foreground-inverse border-foreground-inverse\" },\n  ],\n  defaultVariants: {\n    variant: \"default\",\n    checked: false,\n  },\n});\n\nconst checkboxIcon = tv({\n  base: \"shrink-0\",\n  variants: {\n    variant: {\n      default: \"text-foreground-inverse\",\n      highlight: \"text-foreground\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n  },\n});\n\ntype CheckboxVariant = \"default\" | \"highlight\";\n\ninterface CheckboxIndicatorProps {\n  checked: boolean;\n  variant?: CheckboxVariant;\n  className?: string;\n}\n\nexport function CheckboxIndicator({ checked, variant, className }: CheckboxIndicatorProps) {\n  return (\n    <div className={checkboxIndicator({ variant, checked, className })}>\n      {checked && <Check size={12} className={checkboxIcon({ variant })} />}\n    </div>\n  );\n}\n\ninterface CheckboxProps {\n  checked: boolean;\n  onCheckedChange: (checked: boolean) => void;\n  children?: ReactNode;\n  className?: string;\n}\n\nexport function Checkbox({ checked, onCheckedChange, children, className }: CheckboxProps) {\n  return (\n    <label className={cn(\"flex items-center gap-2 cursor-pointer\", className)}>\n      <button\n        type=\"button\"\n        role=\"checkbox\"\n        aria-checked={checked}\n        onClick={() => onCheckedChange(!checked)}\n        className=\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded\"\n      >\n        <CheckboxIndicator checked={checked} />\n      </button>\n      {children && <Text as=\"span\" size=\"sm\">{children}</Text>}\n    </label>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/collapsible.tsx",
    "content": "import { type PropsWithChildren, type ReactNode } from \"react\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst collapsible = tv({\n  base: \"group\",\n});\n\nconst collapsibleTrigger = tv({\n  base: \"flex w-full items-center justify-between gap-8 px-4 py-4 cursor-pointer list-none [&::-webkit-details-marker]:hidden text-foreground hover:text-foreground-muted\",\n});\n\nconst collapsibleIcon = tv({\n  base: \"size-4 text-foreground-muted group-open:rotate-180 flex-shrink-0\",\n});\n\nconst collapsibleContent = tv({\n  base: \"px-4 pb-4\",\n});\n\ntype CollapsibleProps = PropsWithChildren<{\n  trigger: ReactNode;\n  className?: string;\n}>;\n\nexport function Collapsible({ trigger, children, className }: CollapsibleProps) {\n  return (\n    <details\n      className={collapsible({ className })}\n    >\n      <summary className={collapsibleTrigger()}>\n        {trigger}\n        <svg\n          className={collapsibleIcon()}\n          width=\"16\"\n          height=\"16\"\n          viewBox=\"0 0 15 15\"\n          fill=\"none\"\n        >\n          <path\n            d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n            fill=\"currentColor\"\n            fillRule=\"evenodd\"\n            clipRule=\"evenodd\"\n          />\n        </svg>\n      </summary>\n      <div className={collapsibleContent()}>{children}</div>\n    </details>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/dashboard-heading.tsx",
    "content": "import type { PropsWithChildren, ReactNode } from \"react\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { Text } from \"./text\";\n\nconst dashboardHeading = tv({\n  base: \"font-sans font-medium leading-tight tracking-tight text-foreground overflow-hidden truncate\",\n  variants: {\n    level: {\n      1: \"text-2xl\",\n      2: \"text-lg\",\n      3: \"text-md\",\n    },\n  },\n});\n\ntype HeadingLevel = 1 | 2 | 3;\ntype HeadingTag = \"h1\" | \"h2\" | \"h3\" | \"span\" | \"p\";\ntype DashboardHeadingProps = PropsWithChildren<{ level: HeadingLevel; as?: HeadingTag; className?: string }>;\n\nconst tags = { 1: \"h1\", 2: \"h2\", 3: \"h3\" } as const;\n\nfunction DashboardHeadingBase({ children, level, as, className }: DashboardHeadingProps) {\n  const Tag = as ?? tags[level];\n  return <Tag className={dashboardHeading({ level, className })}>{children}</Tag>;\n}\n\nexport function DashboardHeading1({ children, as, className }: Omit<DashboardHeadingProps, \"level\">) {\n  return <DashboardHeadingBase level={1} as={as} className={className}>{children}</DashboardHeadingBase>;\n}\n\nexport function DashboardHeading2({ children, as, className }: Omit<DashboardHeadingProps, \"level\">) {\n  return <DashboardHeadingBase level={2} as={as} className={className}>{children}</DashboardHeadingBase>;\n}\n\nexport function DashboardHeading3({ children, as, className }: Omit<DashboardHeadingProps, \"level\">) {\n  return <DashboardHeadingBase level={3} as={as} className={className}>{children}</DashboardHeadingBase>;\n}\n\ntype DashboardSectionProps = {\n  title: ReactNode;\n  description: ReactNode;\n  level?: HeadingLevel;\n  headingClassName?: string;\n};\n\nexport function DashboardSection({ title, description, level = 2, headingClassName }: DashboardSectionProps) {\n  return (\n    <div className=\"flex flex-col px-0.5 pt-4\">\n      <DashboardHeadingBase level={level} className={headingClassName}>{title}</DashboardHeadingBase>\n      <Text size=\"sm\">{description}</Text>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/delete-confirmation.tsx",
    "content": "import LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport { Button, ButtonText } from \"./button\";\nimport {\n  Modal,\n  ModalContent,\n  ModalDescription,\n  ModalFooter,\n  ModalTitle,\n} from \"./modal\";\n\ninterface DeleteConfirmationProps {\n  title: string;\n  description: string;\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  deleting: boolean;\n  onConfirm: () => void;\n}\n\nfunction resolveDeleteLabel(deleting: boolean): string {\n  if (deleting) return \"Deleting...\";\n  return \"Delete\";\n}\n\nexport function DeleteConfirmation({\n  title,\n  description,\n  open,\n  onOpenChange,\n  deleting,\n  onConfirm,\n}: DeleteConfirmationProps) {\n  return (\n    <Modal open={open} onOpenChange={onOpenChange}>\n      <ModalContent>\n        <ModalTitle>{title}</ModalTitle>\n        <ModalDescription>{description}</ModalDescription>\n        <ModalFooter>\n          <Button variant=\"destructive\" className=\"w-full justify-center\" onClick={onConfirm} disabled={deleting}>\n            {deleting && <LoaderCircle size={16} className=\"animate-spin\" />}\n            <ButtonText>{resolveDeleteLabel(deleting)}</ButtonText>\n          </Button>\n          <Button variant=\"elevated\" className=\"w-full justify-center\" onClick={() => onOpenChange(false)}>\n            <ButtonText>Cancel</ButtonText>\n          </Button>\n        </ModalFooter>\n      </ModalContent>\n    </Modal>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/divider.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\n\nconst dashedLine = \"h-px grow bg-[repeating-linear-gradient(to_right,var(--color-interactive-border)_0,var(--color-interactive-border)_4px,transparent_4px,transparent_8px)]\";\n\nexport function Divider({ children }: PropsWithChildren) {\n  if (!children) {\n    return <div className={dashedLine} />;\n  }\n\n  return (\n    <div className=\"flex items-center gap-3\">\n      <div className={dashedLine} />\n      <span className=\"text-xs text-foreground-muted shrink-0\">{children}</span>\n      <div className={dashedLine} />\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/error-state.tsx",
    "content": "import { Text } from \"./text\";\nimport { Button, ButtonText } from \"./button\";\n\ninterface ErrorStateProps {\n  message?: string;\n  onRetry?: () => void;\n}\n\nexport function ErrorState({\n  message = \"Something went wrong. Please try again.\",\n  onRetry,\n}: ErrorStateProps) {\n  return (\n    <div className=\"flex flex-col items-center gap-2 py-4\">\n      <Text size=\"sm\" tone=\"danger\">\n        {message}\n      </Text>\n      {onRetry && (\n        <Button variant=\"elevated\" size=\"compact\" onClick={onRetry}>\n          <ButtonText>Retry</ButtonText>\n        </Button>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/fade-in.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { LazyMotion, type HTMLMotionProps, type TargetAndTransition } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\n\ntype Direction = \"from-right\" | \"from-top\" | \"from-bottom\";\n\nconst variants: Record<Direction, { hidden: TargetAndTransition; visible: TargetAndTransition }> = {\n  \"from-right\": {\n    hidden: { opacity: 0, x: 10, filter: \"blur(4px)\" },\n    visible: { opacity: 1, x: 0, filter: \"blur(0px)\" },\n  },\n  \"from-top\": {\n    hidden: { opacity: 0, y: -10, filter: \"blur(4px)\" },\n    visible: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n  },\n  \"from-bottom\": {\n    hidden: { opacity: 0, y: 10, filter: \"blur(4px)\" },\n    visible: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n  },\n};\n\nconst TRANSITION = { duration: 0.2 } as const;\n\ninterface FadeInProps extends HTMLMotionProps<\"div\"> {\n  direction: Direction;\n}\n\nexport function FadeIn({ direction, children, ...props }: PropsWithChildren<FadeInProps>) {\n  const { hidden, visible } = variants[direction];\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <m.div\n        initial={hidden}\n        animate={visible}\n        exit={hidden}\n        transition={TRANSITION}\n        {...props}\n      >\n        {children}\n      </m.div>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/github-star-button.tsx",
    "content": "import { AnimatePresence } from \"motion/react\";\nimport Star from \"lucide-react/dist/esm/icons/star\";\nimport {\n  Component,\n  type PropsWithChildren,\n  useEffect,\n  useState,\n} from \"react\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { ButtonText, ExternalLinkButton } from \"./button\";\nimport { FadeIn } from \"./fade-in\";\n\nconst SCROLL_THRESHOLD = 32;\nconst GITHUB_STARS_ENDPOINT_PATH = \"/internal/github-stars\";\nconst GITHUB_REPOSITORY_URL = \"https://github.com/ridafkih/keeper.sh\";\n\ninterface GithubStarsResponse {\n  fetchedAt: string;\n  count: number;\n}\n\nfunction isGithubStarsResponse(value: unknown): value is GithubStarsResponse {\n  if (typeof value !== \"object\" || value === null) return false;\n  return (\n    \"fetchedAt\" in value &&\n    typeof value.fetchedAt === \"string\" &&\n    \"count\" in value &&\n    typeof value.count === \"number\" &&\n    Number.isInteger(value.count) &&\n    value.count >= 0\n  );\n}\n\nfunction formatStarCount(starCount: number): string {\n  return new Intl.NumberFormat(\"en-US\", {\n    compactDisplay: \"short\",\n    maximumFractionDigits: 1,\n    notation: \"compact\",\n  }).format(starCount);\n}\n\nasync function fetchGithubStarCount(url: string): Promise<number> {\n  const response = await fetch(url);\n\n  if (!response.ok) {\n    throw new Error(\n      `GitHub stars request failed: ${response.status} ${response.statusText}`,\n    );\n  }\n\n  const json: unknown = await response.json();\n  if (!isGithubStarsResponse(json)) {\n    throw new Error(\"Invalid GitHub stars payload\");\n  }\n\n  return json.count;\n}\n\ninterface GithubStarButtonProps {\n  initialStarCount: number | null;\n}\n\ninterface GithubStarButtonShellProps {\n  countLabel?: string;\n}\n\ninterface GithubStarErrorBoundaryState {\n  hasError: boolean;\n}\n\nclass GithubStarErrorBoundary extends Component<\n  PropsWithChildren,\n  GithubStarErrorBoundaryState\n> {\n  state: GithubStarErrorBoundaryState = {\n    hasError: false,\n  };\n\n  static getDerivedStateFromError(): GithubStarErrorBoundaryState {\n    return {\n      hasError: true,\n    };\n  }\n\n  render() {\n    if (this.state.hasError) {\n      return <GithubStarButtonShell />;\n    }\n\n    return this.props.children;\n  }\n}\n\nfunction GithubStarButtonShell({ countLabel }: GithubStarButtonShellProps) {\n  return (\n    <ExternalLinkButton\n      size=\"compact\"\n      variant=\"ghost\"\n      href={GITHUB_REPOSITORY_URL}\n      target=\"_blank\"\n      rel=\"noreferrer\"\n      aria-label=\"Star Keeper.sh on GitHub\"\n    >\n      <Star size={14} aria-hidden=\"true\" />\n      {typeof countLabel === \"string\" ? <ButtonText>{countLabel}</ButtonText> : null}\n    </ExternalLinkButton>\n  );\n}\n\nfunction GithubStarButtonCount({ initialStarCount }: GithubStarButtonProps) {\n  const { data: starCount, error } = useSWRImmutable<number>(\n    GITHUB_STARS_ENDPOINT_PATH,\n    fetchGithubStarCount,\n    typeof initialStarCount === \"number\"\n      ? { fallbackData: initialStarCount }\n      : undefined,\n  );\n\n  if (error) {\n    return <GithubStarButtonShell />;\n  }\n\n  if (typeof starCount !== \"number\") {\n    return <GithubStarButtonShell countLabel=\"…\" />;\n  }\n\n  const formattedStarCount = formatStarCount(starCount);\n\n  return <GithubStarButtonShell countLabel={formattedStarCount} />;\n}\n\nexport function GithubStarButton({ initialStarCount }: GithubStarButtonProps) {\n  const [visible, setVisible] = useState(true);\n\n  useEffect(() => {\n    const onScroll = () => setVisible(window.scrollY <= SCROLL_THRESHOLD);\n    window.addEventListener(\"scroll\", onScroll, { passive: true });\n    return () => window.removeEventListener(\"scroll\", onScroll);\n  }, []);\n\n  return (\n    <AnimatePresence initial={false}>\n      {visible && (\n        <FadeIn direction=\"from-right\">\n          <GithubStarErrorBoundary>\n            <GithubStarButtonCount initialStarCount={initialStarCount} />\n          </GithubStarErrorBoundary>\n        </FadeIn>\n      )}\n    </AnimatePresence>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/heading.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst heading = tv({\n  base: \"font-lora font-medium leading-tight -tracking-[0.075em] text-foreground\",\n  variants: {\n    level: {\n      1: \"text-4xl\",\n      2: \"text-2xl\",\n      3: \"text-xl\",\n    },\n  },\n});\n\ntype HeadingLevel = 1 | 2 | 3;\ntype HeadingTag = \"h1\" | \"h2\" | \"h3\" | \"span\" | \"p\";\ntype HeadingProps = PropsWithChildren<{ level: HeadingLevel; as?: HeadingTag; className?: string }>;\n\nconst tags = { 1: \"h1\", 2: \"h2\", 3: \"h3\" } as const;\n\nfunction HeadingBase({ children, level, as, className }: HeadingProps) {\n  const Tag = as ?? tags[level];\n  return <Tag className={heading({ level, className })}>{children}</Tag>;\n}\n\nexport function Heading1({ children, as, className }: Omit<HeadingProps, \"level\">) {\n  return <HeadingBase level={1} as={as} className={className}>{children}</HeadingBase>;\n}\n\nexport function Heading2({ children, as, className }: Omit<HeadingProps, \"level\">) {\n  return <HeadingBase level={2} as={as} className={className}>{children}</HeadingBase>;\n}\n\nexport function Heading3({ children, as, className }: Omit<HeadingProps, \"level\">) {\n  return <HeadingBase level={3} as={as} className={className}>{children}</HeadingBase>;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/input.tsx",
    "content": "import type { ComponentPropsWithoutRef, Ref } from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst input = tv({\n  base: \"w-full rounded-xl border border-interactive-border bg-background px-4 py-2.5 text-foreground tracking-tight placeholder:text-foreground-muted disabled:opacity-50 disabled:cursor-not-allowed read-only:cursor-not-allowed read-only:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n  variants: {\n    tone: {\n      neutral: \"\",\n      error: \"border-destructive dark:border-destructive\",\n    },\n  },\n  defaultVariants: {\n    tone: \"neutral\",\n  },\n});\n\ntype InputProps = ComponentPropsWithoutRef<\"input\"> & VariantProps<typeof input> & {\n  ref?: Ref<HTMLInputElement>;\n};\n\nexport function Input({ tone, className, ref, ...props }: InputProps) {\n  return <input ref={ref} className={input({ tone, className })} {...props} />;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/list.tsx",
    "content": "import type { ComponentPropsWithoutRef, PropsWithChildren } from \"react\";\n\ntype ListProps = PropsWithChildren<ComponentPropsWithoutRef<\"ul\">>;\ntype OrderedListProps = PropsWithChildren<ComponentPropsWithoutRef<\"ol\">>;\ntype ListItemProps = PropsWithChildren<ComponentPropsWithoutRef<\"li\">>;\n\nexport function UnorderedList({ children, className, ...props }: ListProps) {\n  return (\n    <ul\n      className={[\n        \"my-4 list-disc space-y-1.5 pl-6 text-base leading-7 tracking-tight text-foreground-muted marker:text-foreground-muted\",\n        className,\n      ].filter(Boolean).join(\" \")}\n      {...props}\n    >\n      {children}\n    </ul>\n  );\n}\n\nexport function OrderedList({ children, className, ...props }: OrderedListProps) {\n  return (\n    <ol\n      className={[\n        \"my-4 list-decimal space-y-1.5 pl-6 text-base leading-7 tracking-tight text-foreground-muted marker:text-foreground-muted\",\n        className,\n      ].filter(Boolean).join(\" \")}\n      {...props}\n    >\n      {children}\n    </ol>\n  );\n}\n\nexport function ListItem({ children, className, ...props }: ListItemProps) {\n  return (\n    <li\n      className={[\n        \"pl-1 leading-7 [&>ol]:mt-2 [&>p]:my-0 [&>ul]:mt-2\",\n        className,\n      ].filter(Boolean).join(\" \")}\n      {...props}\n    >\n      {children}\n    </li>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/markdown-component-map.ts",
    "content": "import type { Components } from \"streamdown\";\nimport {\n  MarkdownBlockquote,\n  MarkdownCodeBlock,\n  MarkdownHeadingOne,\n  MarkdownHeadingThree,\n  MarkdownHeadingTwo,\n  MarkdownInlineCode,\n  MarkdownLink,\n  MarkdownListItem,\n  MarkdownOrderedList,\n  MarkdownParagraph,\n  MarkdownRule,\n  MarkdownTable,\n  MarkdownTableCell,\n  MarkdownTableHeader,\n  MarkdownUnorderedList,\n} from \"./markdown-components\";\n\nexport const markdownComponents: Components = {\n  a: MarkdownLink,\n  blockquote: MarkdownBlockquote,\n  code: MarkdownInlineCode,\n  h1: MarkdownHeadingOne,\n  h2: MarkdownHeadingTwo,\n  h3: MarkdownHeadingThree,\n  hr: MarkdownRule,\n  inlineCode: MarkdownInlineCode,\n  li: MarkdownListItem,\n  ol: MarkdownOrderedList,\n  p: MarkdownParagraph,\n  pre: MarkdownCodeBlock,\n  table: MarkdownTable,\n  td: MarkdownTableCell,\n  th: MarkdownTableHeader,\n  ul: MarkdownUnorderedList,\n};\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/markdown-components.tsx",
    "content": "import type { JSX } from \"react\";\nimport { Heading1, Heading2, Heading3 } from \"./heading\";\nimport { ListItem, OrderedList, UnorderedList } from \"./list\";\nimport { Text } from \"./text\";\n\ntype MarkdownElementProps<Tag extends keyof JSX.IntrinsicElements> =\n  JSX.IntrinsicElements[Tag] & {\n  node?: unknown;\n};\n\nfunction isExternalHttpLink(href: string): boolean {\n  return href.startsWith(\"http://\") || href.startsWith(\"https://\");\n}\n\nexport function MarkdownHeadingOne({ children }: MarkdownElementProps<\"h1\">) {\n  return <Heading1 as=\"h1\" className=\"mb-3 mt-6 first:mt-0\">{children}</Heading1>;\n}\n\nexport function MarkdownHeadingTwo({ children }: MarkdownElementProps<\"h2\">) {\n  return <Heading2 as=\"h2\" className=\"mb-2.5 mt-6 first:mt-0\">{children}</Heading2>;\n}\n\nexport function MarkdownHeadingThree({ children }: MarkdownElementProps<\"h3\">) {\n  return <Heading3 as=\"h3\" className=\"mb-2 mt-5 first:mt-0\">{children}</Heading3>;\n}\n\nexport function MarkdownParagraph({ children }: MarkdownElementProps<\"p\">) {\n  return (\n    <Text align=\"left\" size=\"base\" tone=\"muted\" className=\"my-3 leading-7\">\n      {children}\n    </Text>\n  );\n}\n\nexport function MarkdownLink({\n  children,\n  href,\n  title,\n}: MarkdownElementProps<\"a\">) {\n  const normalizedHref = typeof href === \"string\" ? href : \"#\";\n  const normalizedTitle = typeof title === \"string\" ? title : undefined;\n\n  return (\n    <a\n      className=\"text-foreground underline underline-offset-2 hover:text-foreground-hover\"\n      href={normalizedHref}\n      rel={isExternalHttpLink(normalizedHref) ? \"noopener noreferrer\" : undefined}\n      target={isExternalHttpLink(normalizedHref) ? \"_blank\" : undefined}\n      title={normalizedTitle}\n    >\n      {children}\n    </a>\n  );\n}\n\nexport function MarkdownUnorderedList({\n  children,\n}: MarkdownElementProps<\"ul\">) {\n  return <UnorderedList>{children}</UnorderedList>;\n}\n\nexport function MarkdownOrderedList({\n  children,\n}: MarkdownElementProps<\"ol\">) {\n  return <OrderedList>{children}</OrderedList>;\n}\n\nexport function MarkdownListItem({ children }: MarkdownElementProps<\"li\">) {\n  return <ListItem>{children}</ListItem>;\n}\n\nexport function MarkdownInlineCode({ children }: MarkdownElementProps<\"code\">) {\n  return (\n    <code className=\"rounded-md border border-border-elevated bg-background-elevated px-1.5 py-0.5 font-mono text-[0.85em] tracking-normal text-foreground\">\n      {children}\n    </code>\n  );\n}\n\nexport function MarkdownCodeBlock({\n  children,\n}: MarkdownElementProps<\"pre\">) {\n  return (\n    <pre className=\"my-4 overflow-x-auto border border-interactive-border bg-background p-3 text-xs text-foreground\">\n      {children}\n    </pre>\n  );\n}\n\nexport function MarkdownBlockquote({ children }: MarkdownElementProps<\"blockquote\">) {\n  return (\n    <blockquote className=\"my-4 border-l-2 border-interactive-border pl-3\">\n      <Text align=\"left\" size=\"base\" tone=\"muted\" className=\"leading-7\">\n        {children}\n      </Text>\n    </blockquote>\n  );\n}\n\nexport function MarkdownRule() {\n  return <hr className=\"my-6 border-interactive-border\" />;\n}\n\nexport function MarkdownTable({\n  children,\n}: MarkdownElementProps<\"table\">) {\n  return (\n    <div className=\"my-4 overflow-x-auto\">\n      <table className=\"min-w-full border-collapse border border-interactive-border text-base tracking-tight text-foreground-muted\">\n        {children}\n      </table>\n    </div>\n  );\n}\n\nexport function MarkdownTableHeader({\n  children,\n}: MarkdownElementProps<\"th\">) {\n  return <th className=\"border border-interactive-border px-2 py-1 text-left font-medium text-foreground\">{children}</th>;\n}\n\nexport function MarkdownTableCell({\n  children,\n}: MarkdownElementProps<\"td\">) {\n  return <td className=\"border border-interactive-border px-2 py-1\">{children}</td>;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/modal.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { createContext, use, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useSetAtom } from \"jotai\";\nimport { Heading3 } from \"./heading\";\nimport { Text } from \"./text\";\nimport { popoverOverlayAtom } from \"@/state/popover-overlay\";\n\ninterface ModalContextValue {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n}\n\nconst ModalContext = createContext<ModalContextValue | null>(null);\n\nfunction useModal() {\n  const ctx = use(ModalContext);\n  if (!ctx) throw new Error(\"Modal subcomponents must be used within <Modal>\");\n  return ctx;\n}\n\ninterface ModalProps extends PropsWithChildren {\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}\n\nexport function Modal({ children, open: controlledOpen, onOpenChange }: ModalProps) {\n  const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n  const open = controlledOpen ?? uncontrolledOpen;\n  const setOpen = (value: boolean) => {\n    onOpenChange?.(value);\n    if (controlledOpen === undefined) setUncontrolledOpen(value);\n  };\n\n  return (\n    <ModalContext value={{ open, setOpen }}>\n      {children}\n    </ModalContext>\n  );\n}\n\nexport function ModalContent({ children }: PropsWithChildren) {\n  const { open, setOpen } = useModal();\n  const contentRef = useRef<HTMLDivElement>(null);\n  const setOverlay = useSetAtom(popoverOverlayAtom);\n\n  useEffect(() => {\n    if (!open) return;\n    setOverlay(true);\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Escape\") setOpen(false);\n    };\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      setOverlay(false);\n    };\n  }, [open, setOpen, setOverlay]);\n\n  if (!open) return null;\n\n  return createPortal(\n    <div\n      className=\"fixed inset-0 z-50 flex items-center justify-center px-6\"\n      onClick={(event) => {\n        if (!(event.target instanceof Node)) return;\n        if (contentRef.current && !contentRef.current.contains(event.target)) {\n          setOpen(false);\n        }\n      }}\n    >\n      <div\n        ref={contentRef}\n        className=\"flex flex-col gap-3 bg-background-elevated border border-border-elevated rounded-2xl shadow-xs p-4 max-w-sm w-full overflow-hidden\"\n      >\n        {children}\n      </div>\n    </div>,\n    document.body,\n  );\n}\n\nexport function ModalTitle({ children }: PropsWithChildren) {\n  return <Heading3 className=\"truncate\">{children}</Heading3>;\n}\n\nexport function ModalDescription({ children }: PropsWithChildren) {\n  return <Text size=\"sm\" tone=\"muted\" align=\"left\">{children}</Text>;\n}\n\nexport function ModalFooter({ children }: PropsWithChildren) {\n  return <div className=\"flex flex-col gap-1.5\">{children}</div>;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/pagination.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport ChevronLeft from \"lucide-react/dist/esm/icons/chevron-left\";\nimport ChevronRight from \"lucide-react/dist/esm/icons/chevron-right\";\nimport { Button, LinkButton, ButtonIcon } from \"./button\";\n\nexport function Pagination({ children }: PropsWithChildren) {\n  return <div className=\"flex gap-1\">{children}</div>;\n}\n\nexport function PaginationPrevious({ to, onMouseEnter }: { to?: string; onMouseEnter?: () => void }) {\n  if (!to) {\n    return (\n      <Button variant=\"elevated\" size=\"compact\" className=\"aspect-square\" disabled>\n        <ButtonIcon><ChevronLeft size={16} /></ButtonIcon>\n      </Button>\n    );\n  }\n\n  return (\n    <LinkButton to={to} replace variant=\"elevated\" size=\"compact\" className=\"aspect-square\" onMouseEnter={onMouseEnter}>\n      <ButtonIcon><ChevronLeft size={16} /></ButtonIcon>\n    </LinkButton>\n  );\n}\n\nexport function PaginationNext({ to, onMouseEnter }: { to?: string; onMouseEnter?: () => void }) {\n  if (!to) {\n    return (\n      <Button variant=\"elevated\" size=\"compact\" className=\"aspect-square\" disabled>\n        <ButtonIcon><ChevronRight size={16} /></ButtonIcon>\n      </Button>\n    );\n  }\n\n  return (\n    <LinkButton to={to} replace variant=\"elevated\" size=\"compact\" className=\"aspect-square\" onMouseEnter={onMouseEnter}>\n      <ButtonIcon><ChevronRight size={16} /></ButtonIcon>\n    </LinkButton>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/provider-icon-stack.tsx",
    "content": "import { AnimatePresence, LazyMotion } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\nimport { Text } from \"./text\";\nimport { ProviderIcon } from \"./provider-icon\";\n\ninterface ProviderIconStackProps {\n  providers: { provider?: string; calendarType?: string }[];\n  max?: number;\n  animate?: boolean;\n}\n\nfunction ProviderIconStackItem({ provider, calendarType }: { provider?: string; calendarType?: string }) {\n  return (\n    <div className=\"size-6 rounded-full bg-background-elevated border border-border-elevated flex items-center justify-center\">\n      <ProviderIcon provider={provider} calendarType={calendarType} size={12} />\n    </div>\n  );\n}\n\nconst HIDDEN = { opacity: 0, filter: \"blur(4px)\", width: 0 };\nconst VISIBLE = { opacity: 1, filter: \"blur(0)\", width: \"auto\" };\n\nfunction resolveInitial(animate: boolean) {\n  if (animate) return HIDDEN;\n  return false as const;\n}\n\nfunction ProviderIconStack({ providers, max = 4, animate = false }: ProviderIconStackProps) {\n  const visible = providers.slice(0, max);\n  const overflow = providers.length - max;\n  const initial = resolveInitial(animate);\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <div className=\"absolute flex items-center justify-end overflow-visible pr-1\">\n        <div className=\"flex items-center\">\n          <AnimatePresence mode=\"sync\">\n            {visible.map((entry, index) => (\n              <m.div\n                key={`${entry.provider}-${index}`}\n                initial={initial}\n                animate={VISIBLE}\n                exit={HIDDEN}\n                className=\"max-w-3 flex justify-start\"\n              >\n                <div className=\"size-6\">\n                  <ProviderIconStackItem provider={entry.provider} calendarType={entry.calendarType} />\n                </div>\n              </m.div>\n            ))}\n            {overflow > 0 && (\n              <m.div\n                key=\"overflow\"\n                initial={initial}\n                animate={VISIBLE}\n                exit={HIDDEN}\n                className=\"max-w-3 flex justify-start\"\n            >\n              <div className=\"size-6 min-w-6 grid place-items-center bg-background-elevated border border-border-elevated rounded-full\">\n                  <Text size=\"xs\" tone=\"muted\" className=\"tabular-nums text-[0.625rem]\">+{overflow}</Text>\n                </div>\n              </m.div>\n            )}\n          </AnimatePresence>\n        </div>\n      </div>\n    </LazyMotion>\n  );\n}\n\nexport { ProviderIconStack };\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/provider-icon.tsx",
    "content": "import Calendar from \"lucide-react/dist/esm/icons/calendar\";\nimport LinkIcon from \"lucide-react/dist/esm/icons/link\";\nimport { providerIcons } from \"@/lib/providers\";\n\ninterface ProviderIconProps {\n  provider?: string;\n  calendarType?: string;\n  size?: number;\n}\n\nfunction resolveIconPath(provider: string | undefined): string | undefined {\n  if (provider) return providerIcons[provider];\n  return undefined;\n}\n\nfunction ProviderIcon({ provider, calendarType, size = 15 }: ProviderIconProps) {\n  if (calendarType === \"ical\" || provider === \"ics\") {\n    return <LinkIcon className=\"shrink-0\" size={size} />;\n  }\n\n  const iconPath = resolveIconPath(provider);\n\n  if (!iconPath) {\n    return <Calendar className=\"shrink-0\" size={size} />;\n  }\n\n  return <img className=\"shrink-0\" src={iconPath} alt=\"\" width={size} height={size} />;\n}\n\nexport { ProviderIcon };\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/shimmer-text.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\ntype ShimmerTextProps = PropsWithChildren<{\n  className?: string;\n}>;\n\nexport function ShimmerText({ children, className }: ShimmerTextProps) {\n  return (\n    <span\n      className={cn(\n        \"bg-[linear-gradient(to_right,var(--color-foreground-muted)_0%,var(--color-foreground-muted)_35%,var(--color-foreground)_50%,var(--color-foreground-muted)_65%,var(--color-foreground-muted)_100%)] bg-size-[300%_100%] bg-clip-text text-transparent animate-shimmer\",\n        className,\n      )}\n    >\n      {children}\n    </span>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/staggered-backdrop-blur.tsx",
    "content": "const LAYERS = [\n  { z: 1, mask: \"linear-gradient(to top, rgba(0,0,0,0) 0%, rgb(0,0,0) 12.5%, rgb(0,0,0) 25%, rgba(0,0,0,0) 37.5%)\", blur: \"blur(0.234375px)\" },\n  { z: 2, mask: \"linear-gradient(to top, rgba(0,0,0,0) 12.5%, rgb(0,0,0) 25%, rgb(0,0,0) 37.5%, rgba(0,0,0,0) 50%)\", blur: \"blur(0.46875px)\" },\n  { z: 3, mask: \"linear-gradient(to top, rgba(0,0,0,0) 25%, rgb(0,0,0) 37.5%, rgb(0,0,0) 50%, rgba(0,0,0,0) 62.5%)\", blur: \"blur(0.9375px)\" },\n  { z: 4, mask: \"linear-gradient(to top, rgba(0,0,0,0) 37.5%, rgb(0,0,0) 50%, rgb(0,0,0) 62.5%, rgba(0,0,0,0) 75%)\", blur: \"blur(1.875px)\" },\n  { z: 5, mask: \"linear-gradient(to top, rgba(0,0,0,0) 50%, rgb(0,0,0) 62.5%, rgb(0,0,0) 75%, rgba(0,0,0,0) 87.5%)\", blur: \"blur(3.75px)\" },\n  { z: 6, mask: \"linear-gradient(to top, rgba(0,0,0,0) 62.5%, rgb(0,0,0) 75%, rgb(0,0,0) 87.5%, rgba(0,0,0,0) 100%)\", blur: \"blur(7.5px)\" },\n  { z: 7, mask: \"linear-gradient(to top, rgba(0,0,0,0) 75%, rgb(0,0,0) 87.5%, rgb(0,0,0) 100%)\", blur: \"blur(15px)\" },\n  { z: 8, mask: \"linear-gradient(to top, rgba(0,0,0,0) 87.5%, rgb(0,0,0) 100%)\", blur: \"blur(30px)\" },\n];\n\nexport function StaggeredBackdropBlur() {\n  return (\n    <div className=\"pointer-events-none absolute inset-0 overflow-hidden -bottom-full\">\n      {LAYERS.map(({ z, mask, blur }) => (\n        <div\n          key={z}\n          className=\"absolute inset-0 pointer-events-none\"\n          style={{ zIndex: z, maskImage: mask, backdropFilter: blur }}\n        />\n      ))}\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/template-text.tsx",
    "content": "import { tv } from \"tailwind-variants/lite\";\nimport { parseTemplate } from \"@/utils/templates\";\n\nconst templateVariable = tv({\n  variants: {\n    state: {\n      known: \"text-template\",\n      unknown: \"text-template-muted\",\n      disabled: \"text-template-muted\",\n    },\n  },\n  defaultVariants: {\n    state: \"unknown\",\n  },\n});\n\ninterface TemplateTextProps {\n  template: string;\n  variables: Record<string, string>;\n  disabled?: boolean;\n  className?: string;\n}\n\nexport function TemplateText({ template, variables, disabled, className }: TemplateTextProps) {\n  const segments = parseTemplate(template);\n\n  return (\n    <span className={className}>\n      {segments.map((segment, i) => {\n        if (segment.type === \"text\") {\n          return <span key={i}>{segment.value}</span>;\n        }\n\n        const state = disabled ? \"disabled\" : segment.name in variables ? \"known\" : \"unknown\";\n        return (\n          <span key={i} className={templateVariable({ state })}>\n            {`{{${segment.name}}}`}\n          </span>\n        );\n      })}\n    </span>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/text-link.tsx",
    "content": "import type { ComponentPropsWithoutRef, PropsWithChildren } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst textLink = tv({\n  base: \"tracking-tight underline underline-offset-2\",\n  variants: {\n    size: {\n      base: \"text-base\",\n      sm: \"text-sm\",\n      xs: \"text-xs\",\n    },\n    tone: {\n      muted: \"text-foreground-muted hover:text-foreground\",\n      default: \"text-foreground\",\n    },\n    align: {\n      center: \"text-center\",\n      left: \"text-left\",\n    },\n  },\n  defaultVariants: {\n    size: \"sm\",\n    tone: \"muted\",\n    align: \"center\",\n  },\n});\n\ntype TextLinkProps = Omit<ComponentPropsWithoutRef<typeof Link>, \"children\" | \"className\"> &\n  PropsWithChildren<VariantProps<typeof textLink> & { className?: string }>;\ntype ExternalTextLinkProps = ComponentPropsWithoutRef<\"a\"> &\n  PropsWithChildren<VariantProps<typeof textLink> & { className?: string }>;\n\nexport function TextLink({ children, size, tone, align, className, ...props }: TextLinkProps) {\n  return (\n    <Link className={textLink({ size, tone, align, className })} {...props}>\n      {children}\n    </Link>\n  );\n}\n\nexport function ExternalTextLink({\n  children,\n  size,\n  tone,\n  align,\n  className,\n  ...props\n}: ExternalTextLinkProps) {\n  return (\n    <a className={textLink({ size, tone, align, className })} {...props}>\n      {children}\n    </a>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/text.tsx",
    "content": "import type { CSSProperties, PropsWithChildren } from \"react\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst text = tv({\n  base: \"tracking-tight\",\n  variants: {\n    size: {\n      base: \"text-base\",\n      sm: \"text-sm\",\n      xs: \"text-xs\",\n    },\n    tone: {\n      muted: \"text-foreground-muted\",\n      disabled: \"text-foreground-disabled\",\n      highlight: \"text-white\",\n      inverse: \"text-foreground-inverse\",\n      inverseMuted: \"text-foreground-inverse-muted\",\n      default: \"text-foreground\",\n      danger: \"text-red-500\",\n    },\n    align: {\n      center: \"text-center\",\n      left: \"text-left\",\n      right: \"text-right\",\n    },\n  },\n  defaultVariants: {\n    size: \"base\",\n    tone: \"muted\",\n    align: \"left\",\n  },\n});\n\ntype TextProps = PropsWithChildren<{\n  as?: \"p\" | \"span\";\n  size?: \"base\" | \"sm\" | \"xs\";\n  tone?: \"muted\" | \"disabled\" | \"inverse\" | \"inverseMuted\" | \"default\" | \"danger\" | \"highlight\";\n  align?: \"center\" | \"left\" | \"right\";\n  className?: string;\n  style?: CSSProperties;\n}>;\n\nexport function Text({ as = \"p\", children, size, tone, align, className, style }: TextProps) {\n  const Element = as;\n  return <Element className={text({ size, tone, align, className })} style={style}>{children}</Element>;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/tooltip.tsx",
    "content": "import { type PropsWithChildren, type ReactNode, useRef, useState, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Text } from \"./text\";\n\nconst GAP = 4;\nconst ABOVE_CLEARANCE = 32;\n\ntype TooltipProps = PropsWithChildren<{\n  content: ReactNode;\n}>;\n\nexport function Tooltip({ children, content }: TooltipProps) {\n  const [visible, setVisible] = useState(false);\n  const wrapperRef = useRef<HTMLDivElement>(null);\n  const [position, setPosition] = useState({ x: 0, y: 0, above: true });\n\n  const show = useCallback(() => {\n    const child = wrapperRef.current?.firstElementChild;\n    if (!child) return;\n    const rect = child.getBoundingClientRect();\n    const above = rect.top >= ABOVE_CLEARANCE;\n\n    setPosition({\n      x: rect.left + rect.width / 2,\n      y: above ? rect.top - GAP : rect.bottom + GAP,\n      above,\n    });\n    setVisible(true);\n  }, []);\n\n  const hide = useCallback(() => setVisible(false), []);\n\n  return (\n    <div\n      ref={wrapperRef}\n      className=\"contents\"\n      onPointerEnter={show}\n      onPointerLeave={hide}\n    >\n      {children}\n      {visible && createPortal(\n        <div\n          className=\"fixed z-50 pointer-events-none pointer-coarse:hidden\"\n          style={{\n            left: position.x,\n            top: position.y,\n            transform: `translateX(-50%)${position.above ? \" translateY(-100%)\" : \"\"}`,\n          }}\n        >\n          <div className=\"rounded-md bg-background-inverse px-2.5 py-1\">\n            <Text as=\"span\" size=\"xs\" tone=\"inverse\">{content}</Text>\n          </div>\n        </div>,\n        document.body,\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/primitives/upgrade-hint.tsx",
    "content": "import type { PropsWithChildren, ReactNode } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport { getCommercialMode } from \"@/config/commercial\";\nimport { Text } from \"./text\";\n\nfunction UpgradeHint({ children }: PropsWithChildren) {\n  if (!getCommercialMode()) return null;\n\n  return (\n    <Text size=\"sm\" tone=\"muted\" className=\"px-0.5\">\n      {children}{\" \"}\n      <Link to=\"/dashboard/upgrade\" className=\"underline underline-offset-2\">\n        Upgrade to Pro\n      </Link>\n    </Text>\n  );\n}\n\nfunction PremiumFeatureGate({ locked, children, hint }: { locked: boolean; children: ReactNode; hint: string }) {\n  if (!locked || !getCommercialMode()) return <>{children}</>;\n\n  return (\n    <div\n      className=\"-mx-1 p-1 rounded-[1.25rem] flex flex-col gap-1 relative overflow-hidden border border-border-elevated bg-[repeating-linear-gradient(135deg,transparent,transparent_4px,rgba(0,0,0,0.03)_4px,rgba(0,0,0,0.03)_8px)]\"\n    >\n      <div className=\"pointer-events-none\" aria-disabled=\"true\">\n        {children}\n      </div>\n      <Text size=\"sm\" tone=\"muted\" align=\"center\">\n        {hint}{\" \"}\n        <Link to=\"/dashboard/upgrade\" className=\"underline underline-offset-2\">\n          Upgrade to Pro\n        </Link>\n      </Text>\n    </div>\n  );\n}\n\nexport { UpgradeHint, PremiumFeatureGate };\n"
  },
  {
    "path": "applications/web/src/components/ui/shells/layout.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\nconst GRID_COLS = \"grid grid-cols-[minmax(1rem,1fr)_minmax(auto,48rem)_minmax(1rem,1fr)]\";\n\nexport function Layout({ children }: PropsWithChildren) {\n  return (\n    <div className={cn(GRID_COLS, \"auto-rows-min size-full\")}>\n      {children}\n    </div>\n  )\n}\n\nexport function LayoutItem({ children }: PropsWithChildren) {\n  return (\n    <div className=\"contents *:col-[2/span_1]\">{children}</div>\n  )\n}\n\nexport function LayoutRow({ children, className }: PropsWithChildren<{ className?: string }>) {\n  return (\n    <div className={cn(GRID_COLS, className)}>\n      <div className=\"col-[2/span_1]\">{children}</div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/shells/route-shell.tsx",
    "content": "import LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { ErrorState } from \"@/components/ui/primitives/error-state\";\n\ntype RouteShellProps = {\n  backFallback?: string;\n} & (\n  | { status: \"loading\" }\n  | { status: \"error\"; onRetry: () => void }\n  | { status: \"ready\" }\n);\n\nexport function RouteShell(props: RouteShellProps) {\n  if (props.status === \"error\") {\n    return (\n      <div className=\"flex flex-col gap-1.5\">\n        <BackButton fallback={props.backFallback} />\n        <ErrorState onRetry={props.onRetry} />\n      </div>\n    );\n  }\n\n  if (props.status === \"loading\") {\n    return (\n      <div className=\"flex flex-col gap-1.5\">\n        <BackButton fallback={props.backFallback} />\n        <div className=\"flex justify-center py-6\">\n          <LoaderCircle size={20} className=\"animate-spin text-foreground-muted\" />\n        </div>\n      </div>\n    );\n  }\n\n  return null;\n}\n"
  },
  {
    "path": "applications/web/src/components/ui/shells/session-slot.tsx",
    "content": "import { type ReactNode, useSyncExternalStore } from \"react\";\nimport { useRouteContext } from \"@tanstack/react-router\";\nimport { hasSessionCookie } from \"@/lib/session-cookie\";\n\ninterface SessionSlotProps {\n  authenticated: ReactNode;\n  unauthenticated: ReactNode;\n}\n\nconst subscribe = () => () => {};\nconst getSnapshot = () => hasSessionCookie();\n\nexport function SessionSlot({ authenticated, unauthenticated }: SessionSlotProps) {\n  const { auth } = useRouteContext({ strict: false });\n  const getServerSnapshot = () => auth?.hasSession() ?? false;\n  const isAuthenticated = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n  return isAuthenticated ? authenticated : unauthenticated;\n}\n"
  },
  {
    "path": "applications/web/src/config/commercial.ts",
    "content": "import { getPublicRuntimeConfig } from \"@/lib/runtime-config\";\n\nexport const getCommercialMode = () => getPublicRuntimeConfig().commercialMode;\n"
  },
  {
    "path": "applications/web/src/config/gdpr.ts",
    "content": "/** ISO 3166-1 alpha-2 country codes for EU/EEA + UK where GDPR applies. */\nconst GDPR_COUNTRIES = new Set([\n  \"AT\",\n  \"BE\",\n  \"BG\",\n  \"CY\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"EE\",\n  \"ES\",\n  \"FI\",\n  \"FR\",\n  \"GB\",\n  \"GR\",\n  \"HR\",\n  \"HU\",\n  \"IE\",\n  \"IS\",\n  \"IT\",\n  \"LI\",\n  \"LT\",\n  \"LU\",\n  \"LV\",\n  \"MT\",\n  \"NL\",\n  \"NO\",\n  \"PL\",\n  \"PT\",\n  \"RO\",\n  \"SE\",\n  \"SI\",\n  \"SK\",\n]);\n\nexport { GDPR_COUNTRIES };\n"
  },
  {
    "path": "applications/web/src/config/plans.ts",
    "content": "import type { PublicRuntimeConfig } from \"@/lib/runtime-config\";\n\nexport interface PlanConfig {\n  id: \"free\" | \"pro\";\n  name: string;\n  description: string;\n  monthlyPrice: number;\n  yearlyPrice: number;\n  monthlyProductId: string | null;\n  yearlyProductId: string | null;\n  features: string[];\n}\n\nconst basePlans: Omit<PlanConfig, \"monthlyProductId\" | \"yearlyProductId\">[] = [\n  {\n    id: \"free\",\n    name: \"Free\",\n    description: \"For personal use and getting started with calendar sync.\",\n    monthlyPrice: 0,\n    yearlyPrice: 0,\n    features: [\n      \"Up to 2 linked accounts\",\n      \"Up to 3 sync mappings\",\n      \"Aggregated iCal feed\",\n      \"Syncing every 30 minutes\",\n      \"API access (25 calls/day)\",\n    ],\n  },\n  {\n    id: \"pro\",\n    name: \"Pro\",\n    description: \"For power users who need fast syncs, advanced feed controls, and unlimited syncing.\",\n    monthlyPrice: 5,\n    yearlyPrice: 42,\n    features: [\n      \"Syncing every 1 minute\",\n      \"Unlimited linked accounts\",\n      \"Unlimited sync mappings\",\n      \"Event filters, exclusions, and iCal feed customization\",\n      \"Unlimited API & MCP access\",\n      \"Priority support\",\n    ],\n  },\n];\n\nexport const getPlans = (runtimeConfig: PublicRuntimeConfig): PlanConfig[] =>\n  basePlans.map((plan): PlanConfig => {\n    if (plan.id === \"pro\") {\n      return {\n        ...plan,\n        monthlyProductId: runtimeConfig.polarProMonthlyProductId,\n        yearlyProductId: runtimeConfig.polarProYearlyProductId,\n      };\n    }\n\n    return { ...plan, monthlyProductId: null, yearlyProductId: null };\n  });\n"
  },
  {
    "path": "applications/web/src/content/blog/introducing-keeper-blog.mdx",
    "content": "---\ntitle: \"Why I Built an Open-Source Calendar Syncing Tool\"\ndescription: \"Why I built an open-source calendar syncing tool to sync availability across Google Calendar, Outlook, FastMail, iCloud, Apple Calendar, and CalDAV.\"\nblurb: \"I had four calendars across Google, FastMail, and iCloud, and built an open-source calendar syncing tool to keep time slots aligned without duplicates or heavy setup.\"\ncreatedAt: \"2025-12-28\"\nslug: \"why-i-built-an-open-source-calendar-syncing-tool\"\nupdatedAt: \"2026-03-09\"\ntags:\n  - \"calendar\"\n  - \"product\"\n  - \"sync\"\n  - \"self-hosting\"\n---\n\nI have four calendars spread across providers:\n\n- A work calendar on Google Calendar\n- A business calendar on Google Calendar\n- A business-personal calendar on FastMail\n- A personal calendar on iCloud\n\nThat setup gave different people in my life different and incomplete windows into my availability, whether they were my co-founder, investors, coworkers, or friends. The result was constant overlap and way too much scheduling back-and-forth, even though the problem I was trying to solve was simple: block off the same time slots everywhere.\n\n## Why Keeper.sh exists\n\nI tried a few options and kept running into the same issues:\n\n- Too much manual setup\n- Finicky sync behavior and duplicate events\n- Pricing that felt heavy without a self-hosted path\n\nSome tools only worked between two providers. Others required complex Zapier-style automations that broke silently. And none of them gave me the privacy controls I wanted — I didn't need my dentist appointment title showing up on my work calendar. I just needed the time blocked.\n\nAfter repeating that cycle enough times, I built Keeper.sh to do exactly what I wanted in the first place: reliable slot syncing without a bunch of ongoing babysitting.\n\n## How the sync engine works\n\nKeeper.sh uses a pull-compare-push architecture. On each sync cycle, it pulls events from your configured source calendars, compares them against what it already knows, and pushes changes to your destination calendars.\n\nThe core logic is straightforward:\n\n- **Add:** If a source event has no corresponding mapping on the destination, it gets created\n- **Delete:** If a mapping exists but the source event no longer does, the destination event gets removed\n- **Cleanup:** Any Keeper-created events with no mapping are cleaned up for consistency\n\nEvents created by Keeper are tagged with a `@keeper.sh` suffix on their remote UID so they can be identified later. For platforms like Outlook that don't support custom UIDs, we use a `\"keeper.sh\"` category instead.\n\nTo prevent race conditions, each sync operation acquires a Redis-backed generation counter. If two syncs try to run on the same calendar at the same time, the later one backs off. This keeps things consistent without requiring heavy locking.\n\nFor Google and Outlook, Keeper uses incremental sync tokens. Instead of re-fetching every event on each cycle, it asks the provider for only what changed since the last sync. This makes regular sync cycles fast and lightweight, even for calendars with thousands of events.\n\n## What Keeper.sh supports\n\nKeeper.sh works with six calendar providers across two authentication mechanisms:\n\n**OAuth providers:**\n- **Google Calendar** — full read/write with support for filtering Focus Time, Working Location, and Out of Office events\n- **Microsoft Outlook** — full read/write via the Microsoft Graph API\n\n**CalDAV-based providers:**\n- **FastMail** — pre-configured CalDAV with FastMail's server URL\n- **iCloud** — pre-configured CalDAV with app-specific password support\n- **Generic CalDAV** — any CalDAV-compatible server with username/password auth\n- **iCal/ICS feeds** — read-only public URL-based calendars\n\nEach calendar in Keeper has a capability flag: \"pull\" means it can be used as a source (read events from), and \"push\" means it can be used as a destination (write events to). iCal feeds, for example, are pull-only since they're read-only by nature. OAuth and CalDAV calendars support both.\n\n## Privacy controls\n\nBy default, Keeper.sh shares only busy/free time blocks. Event titles, descriptions, locations, and attendee lists are stripped before syncing. This is the behavior most people actually want — block the time, don't leak the details.\n\nBut if you need more flexibility, each source calendar has granular settings:\n\n- **Include or exclude event titles** — show the actual event name or replace it with \"Busy\"\n- **Include or exclude descriptions and locations** — control what metadata gets synced\n- **Custom event name templates** — use `{{event_name}}` or `{{calendar_name}}` placeholders to build your own format\n- **Skip all-day events** — useful if you don't want holidays or reminders blocking time\n- **Skip Google-specific event types** — filter out Focus Time, Working Location, or Out of Office blocks\n\nThese same controls apply to the iCal feed. When you generate your aggregated feed URL, you choose exactly what level of detail goes into it.\n\n## The iCal feed\n\nOne of the features I use most is the aggregated iCal feed. Keeper generates a unique, token-authenticated URL that combines events from all your selected source calendars into a single feed. You can subscribe to it from any calendar app that supports iCal — Apple Calendar, Thunderbird, or any CalDAV client.\n\nThe feed respects all your privacy settings. If you've chosen to exclude event titles, the feed shows \"Busy\" blocks. If you've included titles and locations, those show up too. It's the same event data, just served as a subscribable feed instead of pushed to a specific calendar.\n\nThis is especially useful for sharing availability externally. Instead of giving someone access to your actual calendar, you hand them a feed URL that shows exactly what you want them to see.\n\n## Source and destination mappings\n\nThe mapping model is what makes Keeper flexible. You connect calendar accounts, then configure which calendars are sources and which are destinations. A single source can push to multiple destinations, and a single destination can receive from multiple sources.\n\nThe setup flow walks you through it:\n\n1. Connect an account (OAuth, CalDAV, or iCal URL)\n2. Select which calendars to use\n3. Rename them if you want clearer labels\n4. Map sources to destinations (and optionally the reverse)\n\nOnce configured, syncing is automatic. Free tier users sync every 30 minutes, Pro users sync every minute, and self-hosted instances sync every minute regardless of plan.\n\n## Free vs. Pro\n\nKeeper.sh uses a low-cost freemium model:\n\n- **Free:** 2 source calendars, 1 destination, 30-minute sync intervals, aggregated iCal feed\n- **Pro ($5/month):** Unlimited sources, unlimited destinations, 1-minute sync intervals, priority support\n\nIf you self-host, all users on your instance get Pro-tier features by default. The commercial tier exists to sustain the hosted version, not to gate core functionality behind a paywall.\n\n## Self-hosting\n\nI open-sourced Keeper.sh because I've gotten really into self-hosting and home servers, and I wanted this to be usable on your own infrastructure. The entire stack runs on:\n\n- **PostgreSQL** for event state, account data, and sync mappings\n- **Redis** for sync coordination and session storage\n- **Bun** for the API server and cron workers\n- **Vite + React** for the web interface\n\nThere are three deployment models depending on how much control you want:\n\n**Standalone (easiest):** A single `compose.yaml` that bundles everything — Caddy reverse proxy, PostgreSQL, Redis, API, web, and cron. One command to start, auto-configured.\n\n**Services-only:** Just the application containers (web, API, cron). You bring your own PostgreSQL and Redis. Good if you already have a database server running.\n\n**Individual containers:** Separate `keeper-web`, `keeper-api`, and `keeper-cron` images. The most flexible setup for production deployments.\n\nIf you want Google or Outlook connected as sources or destinations, you'll still need:\n\n- A Google OAuth client (Google Cloud)\n- A Microsoft OAuth app (Azure)\n\nCalDAV-based providers (FastMail, iCloud, generic CalDAV) and iCal feeds work without any OAuth setup.\n\nThe [`compose.yaml` setup in the README](https://github.com/ridafkih/keeper.sh/blob/main/README.md) is the fastest way to get up and running.\n\n## Technical choices\n\nA few decisions that shaped the architecture:\n\n**CalDAV as the universal protocol.** Rather than building custom integrations for every provider, Keeper treats CalDAV (RFC 4791) as the common layer for FastMail, iCloud, and any standards-compliant server. This means adding a new CalDAV provider is mostly a configuration change, not new code.\n\n**Encrypted credentials at rest.** CalDAV passwords and OAuth tokens are encrypted before storage using a configurable encryption key. OAuth tokens include refresh token rotation, so sessions stay valid without storing long-lived credentials.\n\n**Content hashing for iCal feeds.** When pulling from iCal/ICS URLs, Keeper hashes the response content and skips processing if nothing changed. This avoids redundant work when feeds haven't been updated and keeps snapshots for 6 hours in case something goes wrong.\n\n**Real-time sync status.** The API server runs a WebSocket endpoint that broadcasts sync progress to the dashboard. You can watch events get pulled, compared, and pushed in real time rather than wondering if a sync cycle actually ran.\n\n## Built with user feedback\n\nThanks to user feedback, Keeper.sh has grown way beyond the original basic slot-syncing setup. Community input helped shape features like syncing event titles, descriptions, and locations when needed, along with controls to exclude specific event types from syncing.\n\nThose improvements made Keeper.sh much more flexible for different workflows and privacy preferences, and there's still more coming as people keep sharing real-world use cases.\n\nIf you want to try Keeper.sh, you can [sign up for the hosted version](https://keeper.sh/register) or [grab the source on GitHub](https://github.com/ridafkih/keeper.sh).\n"
  },
  {
    "path": "applications/web/src/features/auth/components/auth-form.tsx",
    "content": "import { useEffect, useRef, type Ref, type SubmitEvent } from \"react\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { useAtomValue, useSetAtom } from \"jotai\";\nimport { AnimatePresence, LazyMotion, type TargetAndTransition, type Variants } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\nimport ArrowLeft from \"lucide-react/dist/esm/icons/arrow-left\";\nimport LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport {\n  authFormStatusAtom,\n  authFormErrorAtom,\n  authFormStepAtom,\n  type AuthFormStatus,\n} from \"@/state/auth-form\";\nimport { authClient } from \"@/lib/auth-client\";\nimport {\n  getEnabledSocialProviders,\n  resolveCredentialField,\n  type AuthCapabilities,\n} from \"@/lib/auth-capabilities\";\nimport { signInWithCredential, signUpWithCredential } from \"@/lib/auth\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport {\n  Button,\n  LinkButton,\n  ExternalLinkButton,\n  ButtonText,\n  ButtonIcon,\n} from \"@/components/ui/primitives/button\";\nimport { Divider } from \"@/components/ui/primitives/divider\";\nimport { ExternalTextLink, TextLink } from \"@/components/ui/primitives/text-link\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport {\n  getMcpAuthorizationSearch,\n  resolvePathWithSearch,\n  resolveClientPostAuthRedirect,\n  type StringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\nimport { AuthSwitchPrompt } from \"./auth-switch-prompt\";\n\nfunction resolveInputTone(active: boolean | undefined): \"error\" | \"neutral\" {\n  if (active) return \"error\";\n  return \"neutral\";\n}\n\nfunction resolveSwitchSearch(search?: StringSearchParams): StringSearchParams | undefined {\n  if (!search) return undefined;\n  const result = getMcpAuthorizationSearch(search);\n  if (!result) return undefined;\n  return result;\n}\n\nexport type AuthScreenCopy = {\n  heading: string;\n  subtitle: string;\n  oauthActionLabel: string;\n  submitLabel: string;\n  switchPrompt: string;\n  switchCta: string;\n  switchTo: \"/login\" | \"/register\";\n  action: \"signIn\" | \"signUp\";\n};\n\ntype SocialAuthProvider = {\n  id: \"google\" | \"microsoft\";\n  label: string;\n  to: \"/auth/google\" | \"/auth/outlook\";\n  iconSrc: string;\n};\n\nconst SOCIAL_AUTH_PROVIDERS: readonly SocialAuthProvider[] = [\n  { id: \"google\", label: \"Google\", to: \"/auth/google\", iconSrc: \"/integrations/icon-google.svg\" },\n  { id: \"microsoft\", label: \"Outlook\", to: \"/auth/outlook\", iconSrc: \"/integrations/icon-outlook.svg\" },\n];\n\nconst submitTextVariants: Record<AuthFormStatus, Variants[string]> = {\n  idle: { opacity: 1, filter: \"none\", y: 0, scale: 1 },\n  loading: { opacity: 0, filter: \"blur(2px)\", y: -2, scale: 0.75 },\n};\n\nconst backButtonVariants: Variants = {\n  hidden: { width: 0, opacity: 0, filter: \"blur(2px)\" },\n  visible: { width: \"auto\", opacity: 1, filter: \"blur(0px)\" },\n};\n\nfunction resolvePasswordFieldAnimation(step: \"email\" | \"password\"): TargetAndTransition {\n  if (step === \"password\") {\n    return { height: \"auto\", opacity: 1, overflow: \"visible\" };\n  }\n\n  return { height: 0, opacity: 0, overflow: \"hidden\" };\n}\n\nexport function AuthForm({\n  capabilities,\n  copy,\n  authorizationSearch,\n}: {\n  capabilities: AuthCapabilities;\n  copy: AuthScreenCopy;\n  authorizationSearch?: StringSearchParams;\n}) {\n  const hasSocialProviders = getEnabledSocialProviders(capabilities).length > 0;\n  const switchSearch = resolveSwitchSearch(authorizationSearch);\n  const switchHref = resolvePathWithSearch(copy.switchTo, switchSearch);\n\n  return (\n    <>\n      {copy.action === \"signIn\" && capabilities.supportsPasskeys && (\n        <PasskeyAutoFill authorizationSearch={authorizationSearch} />\n      )}\n      <div className=\"flex flex-col py-2\">\n        <Heading2 as=\"span\" className=\"text-center\">{copy.heading}</Heading2>\n        <Text size=\"sm\" tone=\"muted\" align=\"center\">{copy.subtitle}</Text>\n      </div>\n      {hasSocialProviders && (\n        <>\n          <SocialAuthButtons\n            capabilities={capabilities}\n            oauthActionLabel={copy.oauthActionLabel}\n            authorizationSearch={authorizationSearch}\n          />\n          <Divider>or</Divider>\n        </>\n      )}\n      <CredentialForm\n        capabilities={capabilities}\n        submitLabel={copy.submitLabel}\n        action={copy.action}\n        authorizationSearch={authorizationSearch}\n      />\n      <div className=\"flex flex-col gap-1.5\">\n        <AuthError />\n        <AuthSwitchPrompt>\n          {copy.switchPrompt}{\" \"}\n          <ExternalTextLink href={switchHref}>\n            {copy.switchCta}\n          </ExternalTextLink>\n        </AuthSwitchPrompt>\n      </div>\n    </>\n  );\n}\n\nfunction redirectAfterAuth(authorizationSearch?: StringSearchParams) {\n  if (typeof window === \"undefined\" || !window.location) {\n    return;\n  }\n\n  const redirectTarget = resolveClientPostAuthRedirect(authorizationSearch);\n  const nextUrl = new URL(redirectTarget, window.location.origin).toString();\n  window.location.assign(nextUrl);\n}\n\nfunction usePasskeyAutoFill(authorizationSearch?: StringSearchParams) {\n  const setError = useSetAtom(authFormErrorAtom);\n\n  useEffect(() => {\n    if (typeof PublicKeyCredential === \"undefined\") {\n      return;\n    }\n\n    const controller = new AbortController();\n\n    const attemptAutoFill = async () => {\n      const available = await PublicKeyCredential.isConditionalMediationAvailable?.();\n      if (!available) return;\n\n      const { error } = await authClient.signIn.passkey({\n        autoFill: true,\n        fetchOptions: { signal: controller.signal },\n      });\n\n      if (error) {\n        if (\"code\" in error && error.code === \"AUTH_CANCELLED\") {\n          return;\n        }\n        setError({ message: error.message ?? \"Passkey sign-in failed.\", active: true });\n        return;\n      }\n\n      redirectAfterAuth(authorizationSearch);\n    };\n\n    void attemptAutoFill();\n\n    return () => controller.abort();\n  }, [authorizationSearch, setError]);\n}\n\ninterface PasskeyAutoFillProps {\n  authorizationSearch?: StringSearchParams;\n}\n\nfunction PasskeyAutoFill({ authorizationSearch }: PasskeyAutoFillProps) {\n  usePasskeyAutoFill(authorizationSearch);\n  return null;\n}\n\nfunction SocialAuthButtons({\n  capabilities,\n  oauthActionLabel,\n  authorizationSearch,\n}: {\n  capabilities: AuthCapabilities;\n  oauthActionLabel: string;\n  authorizationSearch?: StringSearchParams;\n}) {\n  const enabledSocialProviders = new Set(getEnabledSocialProviders(capabilities));\n  const visibleProviders = SOCIAL_AUTH_PROVIDERS.filter((provider) =>\n    enabledSocialProviders.has(provider.id));\n\n  if (visibleProviders.length === 0) {\n    return null;\n  }\n\n  return (\n    <>\n      {visibleProviders.map((provider) => (\n        <ExternalLinkButton\n          key={provider.id}\n          href={resolvePathWithSearch(provider.to, authorizationSearch)}\n          className=\"w-full justify-center\"\n          variant=\"border\"\n        >\n          <ButtonIcon>\n            <img src={provider.iconSrc} alt=\"\" width={16} height={16} />\n          </ButtonIcon>\n          <ButtonText>{`${oauthActionLabel} with ${provider.label}`}</ButtonText>\n        </ExternalLinkButton>\n      ))}\n    </>\n  );\n}\n\nfunction FormBackButton({ step, onBack }: { step: \"email\" | \"password\"; onBack: () => void }) {\n  if (step === \"password\") return <StepBackButton onBack={onBack} />;\n  return <BackButton />;\n}\n\nfunction ForgotPasswordLink({\n  action,\n  capabilities,\n}: {\n  action: \"signIn\" | \"signUp\";\n  capabilities: AuthCapabilities;\n}) {\n  if (action !== \"signIn\" || !capabilities.supportsPasswordReset) return null;\n  return (\n    <div className=\"flex justify-end\">\n      <TextLink to=\"/forgot-password\" size=\"xs\">Forgot password?</TextLink>\n    </div>\n  );\n}\n\nfunction resolveAutoComplete(\n  action: \"signIn\" | \"signUp\",\n  base: string,\n  capabilities: AuthCapabilities,\n): string {\n  if (action === \"signIn\" && capabilities.supportsPasskeys) {\n    if (base === \"email\" || base === \"username\") {\n      return \"username webauthn\";\n    }\n  }\n  return base;\n}\n\nfunction readFormFieldValue(formData: FormData, fieldName: string): string {\n  const value = formData.get(fieldName);\n  if (typeof value === \"string\") return value;\n  return \"\";\n}\n\nfunction CredentialForm({\n  capabilities,\n  submitLabel,\n  action,\n  authorizationSearch,\n}: {\n  capabilities: AuthCapabilities;\n  submitLabel: string;\n  action: \"signIn\" | \"signUp\";\n  authorizationSearch?: StringSearchParams;\n}) {\n  const navigate = useNavigate();\n  const step = useAtomValue(authFormStepAtom);\n  const setStep = useSetAtom(authFormStepAtom);\n  const setStatus = useSetAtom(authFormStatusAtom);\n  const setError = useSetAtom(authFormErrorAtom);\n  const passwordRef = useRef<HTMLInputElement>(null);\n  const credentialField = resolveCredentialField(capabilities);\n\n  useEffect(() => {\n    if (typeof sessionStorage === \"undefined\") {\n      return;\n    }\n    sessionStorage.removeItem(\"pendingVerificationEmail\");\n    sessionStorage.removeItem(\"pendingVerificationCallbackUrl\");\n  }, []);\n\n  const handleSubmit = async (event: SubmitEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const formData = new FormData(event.currentTarget);\n    const credential = readFormFieldValue(formData, credentialField.name);\n\n    if (step === \"email\") {\n      if (!credential) return;\n      setStep(\"password\");\n      requestAnimationFrame(() => passwordRef.current?.focus());\n      return;\n    }\n\n    const password = readFormFieldValue(formData, \"password\");\n    if (!password) return;\n\n    setStatus(\"loading\");\n    const redirectTarget = resolveClientPostAuthRedirect(authorizationSearch);\n\n    const authActions: Record<string, () => Promise<void>> = {\n      signIn: () => signInWithCredential(credential, password, capabilities),\n      signUp: () => signUpWithCredential(credential, password, capabilities, redirectTarget),\n    };\n\n    try {\n      await authActions[action]();\n    } catch (error) {\n      setStatus(\"idle\");\n      setError({\n        message: resolveErrorMessage(error, \"Something went wrong. Please try again.\"),\n        active: true,\n      });\n      return;\n    }\n\n    if (action === \"signUp\") {\n      track(ANALYTICS_EVENTS.signup_completed);\n    } else if (action === \"signIn\") {\n      track(ANALYTICS_EVENTS.login_completed);\n    }\n\n    if (action === \"signUp\" && capabilities.requiresEmailVerification) {\n      sessionStorage.setItem(\"pendingVerificationEmail\", credential);\n      sessionStorage.setItem(\"pendingVerificationCallbackUrl\", redirectTarget);\n      navigate({ to: \"/verify-email\" });\n      return;\n    }\n\n    redirectAfterAuth(authorizationSearch);\n  };\n\n  const handleBack = () => {\n    setStep(\"email\");\n    setError(null);\n  };\n\n  return (\n    <form onSubmit={handleSubmit} className=\"contents\">\n      <div className=\"flex flex-col gap-0\">\n        <CredentialInput\n          id={credentialField.id}\n          name={credentialField.name}\n          readOnly={step === \"password\"}\n          autoComplete={resolveAutoComplete(action, credentialField.autoComplete, capabilities)}\n          label={credentialField.label}\n          placeholder={credentialField.placeholder}\n          type={credentialField.type}\n        />\n        <LazyMotion features={loadMotionFeatures}>\n          <m.div\n            className={step === \"password\" ? \"\" : \"pointer-events-none\"}\n            initial={false}\n            animate={resolvePasswordFieldAnimation(step)}\n            transition={{ duration: 0.2 }}\n          >\n            <div className=\"pt-1.5\">\n              <PasswordInput\n                ref={passwordRef}\n                autoComplete={resolveAutoComplete(action, \"current-password\", capabilities)}\n                tabIndex={step === \"password\" ? undefined : -1}\n              />\n            </div>\n          </m.div>\n        </LazyMotion>\n      </div>\n      <div className=\"flex items-stretch\">\n        <FormBackButton step={step} onBack={handleBack} />\n        <SubmitButton>{submitLabel}</SubmitButton>\n      </div>\n      <ForgotPasswordLink action={action} capabilities={capabilities} />\n    </form>\n  );\n}\n\nfunction resolveAuthErrorAnimation(active: boolean | undefined): TargetAndTransition {\n  if (active) return { height: \"auto\", opacity: 1, filter: \"blur(0px)\" };\n  return { height: 0, opacity: 0, filter: \"blur(4px)\" };\n}\n\nfunction AuthError() {\n  const error = useAtomValue(authFormErrorAtom);\n  const active = error?.active;\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <m.div\n        className=\"overflow-hidden\"\n        initial={false}\n        animate={resolveAuthErrorAnimation(active)}\n        transition={{ duration: 0.2 }}\n      >\n        <p className=\"text-sm tracking-tight text-destructive text-center\">\n          {error?.message}\n        </p>\n      </m.div>\n    </LazyMotion>\n  );\n}\n\nfunction CredentialInput({\n  id,\n  name,\n  readOnly,\n  autoComplete,\n  label,\n  onFocus,\n  placeholder,\n  type,\n}: {\n  id: string;\n  name: string;\n  readOnly?: boolean;\n  autoComplete?: string;\n  label: string;\n  onFocus?: () => void;\n  placeholder: string;\n  type: \"email\" | \"text\";\n}) {\n  const status = useAtomValue(authFormStatusAtom);\n  const error = useAtomValue(authFormErrorAtom);\n  const setError = useSetAtom(authFormErrorAtom);\n\n  const clearError = () => {\n    if (error?.active) setError({ ...error, active: false });\n  };\n\n  return (\n    <>\n      <label htmlFor={id} className=\"sr-only\">{label}</label>\n      <Input\n        aria-label={label}\n        id={id}\n        name={name}\n        readOnly={readOnly}\n        disabled={status === \"loading\"}\n        type={type}\n        placeholder={placeholder}\n        autoComplete={autoComplete}\n        tone={resolveInputTone(error?.active)}\n        onChange={clearError}\n        onFocus={onFocus}\n      />\n    </>\n  );\n}\n\nfunction PasswordInput({\n  ref,\n  autoComplete,\n  tabIndex,\n}: {\n  ref?: Ref<HTMLInputElement>;\n  autoComplete?: string;\n  tabIndex?: number;\n}) {\n  const status = useAtomValue(authFormStatusAtom);\n  const error = useAtomValue(authFormErrorAtom);\n  const setError = useSetAtom(authFormErrorAtom);\n\n  const clearError = () => {\n    if (error?.active) setError({ ...error, active: false });\n  };\n\n  return (\n    <>\n      <label htmlFor=\"current-password\" className=\"sr-only\">Password</label>\n      <Input\n        ref={ref}\n        id=\"current-password\"\n        name=\"password\"\n        disabled={status === \"loading\"}\n        type=\"password\"\n        placeholder=\"Password\"\n        autoComplete={autoComplete}\n        tabIndex={tabIndex}\n        tone={resolveInputTone(error?.active)}\n        onChange={clearError}\n      />\n    </>\n  );\n}\n\nfunction AnimatedBackWrapper({ children }: { children: React.ReactNode }) {\n  const status = useAtomValue(authFormStatusAtom);\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <AnimatePresence initial={false}>\n        {status !== \"loading\" && (\n          <m.div\n            className=\"flex items-stretch\"\n            variants={backButtonVariants}\n            initial=\"hidden\"\n            animate=\"visible\"\n            exit=\"hidden\"\n            transition={{ width: { duration: 0.24 }, opacity: { duration: 0.12 } }}\n          >\n            {children}\n          </m.div>\n        )}\n      </AnimatePresence>\n    </LazyMotion>\n  );\n}\n\nfunction BackButton() {\n  return (\n    <AnimatedBackWrapper>\n      <LinkButton to=\"/\" variant=\"border\" className=\"self-stretch justify-center mr-2\">\n        <ButtonIcon>\n          <ArrowLeft size={16} />\n        </ButtonIcon>\n      </LinkButton>\n    </AnimatedBackWrapper>\n  );\n}\n\nfunction StepBackButton({ onBack }: { onBack: () => void }) {\n  return (\n    <AnimatedBackWrapper>\n      <Button type=\"button\" variant=\"border\" className=\"self-stretch justify-center mr-2\" onClick={onBack}>\n        <ButtonIcon>\n          <ArrowLeft size={16} />\n        </ButtonIcon>\n      </Button>\n    </AnimatedBackWrapper>\n  );\n}\n\nfunction SubmitButton({ children }: { children: string }) {\n  const status = useAtomValue(authFormStatusAtom);\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <m.div className=\"grow\" layout>\n        <Button disabled={status === \"loading\"} type=\"submit\" className=\"relative w-full justify-center\">\n          <m.span\n            className=\"origin-top font-medium\"\n            variants={submitTextVariants}\n            animate={status}\n            transition={{ duration: 0.16 }}\n          >\n            {children}\n          </m.span>\n          <AnimatePresence>\n            {status === \"loading\" && (\n              <m.span\n                className=\"absolute inset-0 m-auto size-fit origin-bottom\"\n                initial={{ opacity: 0, filter: \"blur(2px)\", y: 2, scale: 0.25 }}\n                animate={{ opacity: 1, filter: \"none\", y: 0, scale: 1 }}\n                exit={{ opacity: 0, filter: \"blur(2px)\", y: 2, scale: 0.25 }}\n                transition={{ duration: 0.16 }}\n              >\n                <LoaderCircle className=\"animate-spin\" size={16} />\n              </m.span>\n            )}\n          </AnimatePresence>\n        </Button>\n      </m.div>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/auth/components/auth-switch-prompt.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nexport function AuthSwitchPrompt({ children }: PropsWithChildren) {\n  return (\n    <Text size=\"sm\" tone=\"muted\" align=\"center\">\n      {children}\n    </Text>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/auth/components/caldav-connect-form.tsx",
    "content": "import { useRef, useState, useTransition } from \"react\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport { useSWRConfig } from \"swr\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { Divider } from \"@/components/ui/primitives/divider\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { apiFetch } from \"@/lib/fetcher\";\nimport { invalidateAccountsAndSources } from \"@/lib/swr\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\n\nexport type CalDAVProvider = \"fastmail\" | \"icloud\" | \"caldav\";\n\ninterface ProviderConfig {\n  serverUrl: string;\n  showServerUrlInput: boolean;\n  usernamePlaceholder: string;\n  usernameInputType: string;\n  passwordPlaceholder: string;\n}\n\nconst PROVIDER_CONFIGS: Record<CalDAVProvider, ProviderConfig> = {\n  fastmail: {\n    serverUrl: \"https://caldav.fastmail.com/\",\n    showServerUrlInput: false,\n    usernamePlaceholder: \"Fastmail Email Address\",\n    usernameInputType: \"email\",\n    passwordPlaceholder: \"App-Specific Password\",\n  },\n  icloud: {\n    serverUrl: \"https://caldav.icloud.com/\",\n    showServerUrlInput: false,\n    usernamePlaceholder: \"Apple ID\",\n    usernameInputType: \"email\",\n    passwordPlaceholder: \"App-Specific Password\",\n  },\n  caldav: {\n    serverUrl: \"\",\n    showServerUrlInput: true,\n    usernamePlaceholder: \"CalDAV Server Username\",\n    usernameInputType: \"text\",\n    passwordPlaceholder: \"CalDAV Server Password\",\n  },\n};\n\ninterface CalendarOption {\n  url: string;\n  displayName: string;\n}\n\ninterface CalDAVConnectFormProps {\n  provider: CalDAVProvider;\n}\n\nfunction readFormFieldValue(formData: FormData, fieldName: string): string {\n  const value = formData.get(fieldName);\n  if (typeof value === \"string\") return value;\n  return \"\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null;\n}\n\nfunction isCalendarOption(value: unknown): value is CalendarOption {\n  if (!isRecord(value)) return false;\n  return typeof value.url === \"string\" && typeof value.displayName === \"string\";\n}\n\nfunction parseCalendarOptions(value: unknown): CalendarOption[] | null {\n  if (!isRecord(value)) return null;\n  const calendars = value.calendars;\n  if (!Array.isArray(calendars)) return null;\n  if (!calendars.every(isCalendarOption)) return null;\n  return calendars;\n}\n\nfunction parseAuthMethod(value: unknown): \"basic\" | \"digest\" {\n  if (!isRecord(value)) return \"basic\";\n  if (value.authMethod === \"digest\") return \"digest\";\n  return \"basic\";\n}\n\nfunction parseAccountId(value: unknown): string | undefined {\n  if (!isRecord(value)) return undefined;\n  if (typeof value.accountId === \"string\") return value.accountId;\n  return undefined;\n}\n\nexport function CalDAVConnectForm({ provider }: CalDAVConnectFormProps) {\n  const config = PROVIDER_CONFIGS[provider];\n  const navigate = useNavigate();\n  const { mutate: globalMutate } = useSWRConfig();\n  const formRef = useRef<HTMLFormElement>(null);\n\n  const [isPending, startTransition] = useTransition();\n  const [error, setError] = useState<string | null>(null);\n\n  const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    setError(null);\n\n    const formData = new FormData(event.currentTarget);\n    const serverUrl = readFormFieldValue(formData, \"serverUrl\");\n    const username = readFormFieldValue(formData, \"username\");\n    const password = readFormFieldValue(formData, \"password\");\n\n    if (!serverUrl || !username || !password) {\n      setError(\"Missing required credentials\");\n      return;\n    }\n\n    startTransition(async () => {\n      let discoverResponse: Response;\n      try {\n        discoverResponse = await apiFetch(\"/api/sources/caldav/discover\", {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({ serverUrl, username, password }),\n        });\n      } catch (err) {\n        setError(resolveErrorMessage(err, \"Failed to discover calendars\"));\n        return;\n      }\n\n      const discoverPayload = await discoverResponse.json();\n      const calendars = parseCalendarOptions(discoverPayload);\n      const authMethod = parseAuthMethod(discoverPayload);\n      if (!calendars) {\n        setError(\"Failed to parse discovered calendars\");\n        return;\n      }\n\n      if (calendars.length === 0) {\n        setError(\"No calendars found\");\n        return;\n      }\n\n      let accountId: string | undefined;\n\n      try {\n        const responses = await Promise.all(\n          calendars.map((calendar) =>\n            apiFetch(\"/api/sources/caldav\", {\n              method: \"POST\",\n              headers: { \"Content-Type\": \"application/json\" },\n              body: JSON.stringify({\n                authMethod,\n                calendarUrl: calendar.url,\n                name: calendar.displayName,\n                password,\n                provider,\n                serverUrl,\n                username,\n              }),\n            }),\n          ),\n        );\n\n        const firstResponse = responses[0];\n        if (firstResponse) {\n          accountId = parseAccountId(await firstResponse.json());\n        }\n      } catch {\n        setError(\"Failed to import calendars\");\n        return;\n      }\n\n      await invalidateAccountsAndSources(globalMutate);\n\n      if (accountId) {\n        navigate({ to: \"/dashboard/accounts/$accountId/setup\", params: { accountId } });\n      } else {\n        navigate({ to: \"/dashboard\" });\n      }\n    });\n  };\n\n  return (\n    <form ref={formRef} onSubmit={handleSubmit} className=\"flex flex-col gap-3\">\n      <div className=\"flex flex-col gap-1.5\">\n        {config.showServerUrlInput ? (\n          <Input\n            name=\"serverUrl\"\n            defaultValue={config.serverUrl}\n            type=\"url\"\n            placeholder=\"CalDAV Server URL\"\n            required\n          />\n        ) : (\n          <Input type=\"hidden\" name=\"serverUrl\" defaultValue={config.serverUrl} />\n        )}\n        <Input\n          name=\"username\"\n          type={config.usernameInputType}\n          placeholder={config.usernamePlaceholder}\n          required\n        />\n        <Input\n          name=\"password\"\n          type=\"password\"\n          placeholder={config.passwordPlaceholder}\n          required\n        />\n      </div>\n      {error && <Text size=\"sm\" tone=\"danger\">{error}</Text>}\n      <Divider />\n      <div className=\"flex items-stretch gap-2\">\n        <BackButton variant=\"border\" size=\"standard\" className=\"self-stretch justify-center px-3.5\" />\n        <Button type=\"submit\" className=\"grow justify-center\" disabled={isPending}>\n          {isPending && <LoaderCircle size={16} className=\"animate-spin\" />}\n          <ButtonText>{isPending ? \"Connecting...\" : \"Connect\"}</ButtonText>\n        </Button>\n      </div>\n    </form>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/auth/components/caldav-connect-page.tsx",
    "content": "import type { ReactNode } from \"react\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ProviderIconPair } from \"./oauth-preamble\";\nimport { CalDAVConnectForm, type CalDAVProvider } from \"./caldav-connect-form\";\n\ninterface CalDAVConnectPageProps {\n  provider: CalDAVProvider;\n  icon: ReactNode;\n  heading: string;\n  description: string;\n  steps: ReactNode[];\n  footer?: ReactNode;\n}\n\nexport function CalDAVConnectPage({\n  provider,\n  icon,\n  heading,\n  description,\n  steps,\n  footer,\n}: CalDAVConnectPageProps) {\n  return (\n    <>\n      <ProviderIconPair>{icon}</ProviderIconPair>\n      <Heading2 as=\"h1\">{heading}</Heading2>\n      <Text size=\"sm\" tone=\"muted\" align=\"left\">\n        {description}\n      </Text>\n      <ol className=\"flex flex-col gap-1 list-decimal list-inside\">\n        {steps.map((step, index) => (\n          <li key={index} className=\"text-sm tracking-tight text-foreground-muted\">\n            {step}\n          </li>\n        ))}\n      </ol>\n      {footer}\n      <CalDAVConnectForm provider={provider} />\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/auth/components/ics-connect-form.tsx",
    "content": "import { useState, useTransition, type SubmitEvent } from \"react\";\nimport LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { useSWRConfig } from \"swr\";\nimport { apiFetch } from \"@/lib/fetcher\";\nimport { invalidateAccountsAndSources } from \"@/lib/swr\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { Checkbox } from \"@/components/ui/primitives/checkbox\";\nimport { Divider } from \"@/components/ui/primitives/divider\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nfunction resolveSubmitLabel(pending: boolean): string {\n  if (pending) return \"Subscribing...\";\n  return \"Subscribe\";\n}\n\nexport function ICSFeedForm() {\n  const navigate = useNavigate();\n  const { mutate: globalMutate } = useSWRConfig();\n  const [isPending, startTransition] = useTransition();\n  const [error, setError] = useState<string | null>(null);\n  const [requiresAuth, setRequiresAuth] = useState(false);\n\n  const handleSubmit = (event: SubmitEvent<HTMLFormElement>) => {\n    event.preventDefault();\n\n    const formData = new FormData(event.currentTarget);\n    const rawUrl = formData.get(\"feed-url\");\n\n    if (!rawUrl || typeof rawUrl !== \"string\") return;\n\n    let url = rawUrl;\n\n    if (requiresAuth) {\n      const username = formData.get(\"username\");\n      const password = formData.get(\"password\");\n\n      if (!username || !password) {\n        setError(\"Username and password are required for authenticated feeds.\");\n        return;\n      }\n\n      try {\n        const parsed = new URL(rawUrl);\n        parsed.username = encodeURIComponent(String(username));\n        parsed.password = encodeURIComponent(String(password));\n        url = parsed.toString();\n      } catch {\n        setError(\"Invalid URL.\");\n        return;\n      }\n    }\n\n    setError(null);\n\n    startTransition(async () => {\n      let accountId: string | undefined;\n\n      try {\n        const response = await apiFetch(\"/api/ics\", {\n          body: JSON.stringify({ name: \"iCal Feed\", url }),\n          headers: { \"Content-Type\": \"application/json\" },\n          method: \"POST\",\n        });\n        const data = await response.json();\n        accountId = data?.accountId;\n      } catch {\n        setError(\"Failed to subscribe to feed\");\n        return;\n      }\n\n      await invalidateAccountsAndSources(globalMutate);\n\n      if (accountId) {\n        navigate({ to: \"/dashboard/accounts/$accountId/setup\", params: { accountId } });\n      } else {\n        navigate({ to: \"/dashboard\" });\n      }\n    });\n  };\n\n  return (\n    <form onSubmit={handleSubmit} className=\"flex flex-col gap-3\">\n      <div className=\"flex flex-col gap-1.5\">\n        <Input\n          id=\"feed-url\"\n          name=\"feed-url\"\n          type=\"url\"\n          placeholder=\"Calendar Feed URL\"\n          disabled={isPending}\n        />\n        <Checkbox checked={requiresAuth} onCheckedChange={setRequiresAuth}>\n          Requires authentication\n        </Checkbox>\n        {requiresAuth && (\n          <>\n            <Input\n              id=\"username\"\n              name=\"username\"\n              type=\"text\"\n              placeholder=\"Username\"\n              disabled={isPending}\n            />\n            <Input\n              id=\"password\"\n              name=\"password\"\n              type=\"password\"\n              placeholder=\"Password\"\n              disabled={isPending}\n            />\n          </>\n        )}\n      </div>\n      <Divider />\n      <div className=\"flex items-stretch gap-2\">\n        <BackButton variant=\"border\" size=\"standard\" className=\"self-stretch justify-center px-3.5\" />\n        <Button type=\"submit\" className=\"grow justify-center\" disabled={isPending}>\n          {isPending && <LoaderCircle size={16} className=\"animate-spin\" />}\n          <ButtonText>{resolveSubmitLabel(isPending)}</ButtonText>\n        </Button>\n      </div>\n      {error && <Text size=\"sm\" tone=\"danger\" align=\"center\">{error}</Text>}\n    </form>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/auth/components/oauth-preamble.tsx",
    "content": "import type { ReactNode, SubmitEvent } from \"react\";\nimport ArrowLeftRight from \"lucide-react/dist/esm/icons/arrow-left-right\";\nimport Check from \"lucide-react/dist/esm/icons/check\";\nimport KeeperLogo from \"@/assets/keeper.svg?react\";\nimport { authClient } from \"@/lib/auth-client\";\nimport {\n  resolvePathWithSearch,\n  resolveClientPostAuthRedirect,\n  type StringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ExternalTextLink } from \"@/components/ui/primitives/text-link\";\nimport { Divider } from \"@/components/ui/primitives/divider\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\n\ntype Provider = \"google\" | \"outlook\" | \"microsoft-365\";\n\nconst PROVIDER_LABELS: Record<Provider, string> = {\n  google: \"Google\",\n  outlook: \"Outlook\",\n  \"microsoft-365\": \"Microsoft 365\",\n};\n\nconst PERMISSIONS = [\n  \"See your email address\",\n  \"View a list of your calendars\",\n  \"View events, summaries and details\",\n  \"Add or remove calendar events\",\n];\n\nconst PROVIDER_SOCIAL_MAP: Partial<Record<Provider, string>> = {\n  google: \"google\",\n  outlook: \"microsoft\",\n};\n\nconst PROVIDER_API_MAP: Record<Provider, string> = {\n  google: \"google\",\n  outlook: \"outlook\",\n  \"microsoft-365\": \"outlook\",\n};\n\nexport function PermissionsList({ items }: { items: readonly string[] }) {\n  return (\n    <ul className=\"flex flex-col gap-1\">\n      {items.map((item) => (\n        <li key={item} className=\"flex flex-row-reverse justify-between items-center gap-2\">\n          <Check className=\"shrink-0 text-foreground-muted\" size={16} />\n          <Text size=\"sm\" tone=\"muted\" align=\"left\">{item}</Text>\n        </li>\n      ))}\n    </ul>\n  );\n}\n\ninterface PreambleLayoutProps {\n  provider: Provider;\n  onSubmit: (event: SubmitEvent<HTMLFormElement>) => void;\n  children?: ReactNode;\n}\n\nfunction PreambleLayout({ provider, onSubmit, children }: PreambleLayoutProps) {\n  return (\n    <>\n      <ProviderIconPair>\n        <img\n          src={`/integrations/icon-${provider}.svg`}\n          alt={PROVIDER_LABELS[provider]}\n          width={40}\n          height={40}\n          className=\"size-full rounded-lg p-3\"\n        />\n      </ProviderIconPair>\n      <Heading2 as=\"h1\">Connect {PROVIDER_LABELS[provider]}</Heading2>\n      <Text size=\"sm\" tone=\"muted\" align=\"left\">\n        Start importing your events and sync them across all your calendars.\n      </Text>\n      <PermissionsList items={PERMISSIONS} />\n      <Divider />\n      <form onSubmit={onSubmit} className=\"contents\">\n        <div className=\"flex items-stretch gap-2\">\n          <BackButton variant=\"border\" size=\"standard\" className=\"self-stretch justify-center px-3.5\" />\n          <Button type=\"submit\" className=\"grow justify-center\">\n            <ButtonText>Connect</ButtonText>\n          </Button>\n        </div>\n      </form>\n      {children}\n    </>\n  );\n}\n\ninterface AuthOAuthPreambleProps {\n  provider: Provider;\n  authorizationSearch?: StringSearchParams;\n}\n\nexport function AuthOAuthPreamble({\n  provider,\n  authorizationSearch,\n}: AuthOAuthPreambleProps) {\n  const handleSubmit = async (event: SubmitEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const socialProvider = PROVIDER_SOCIAL_MAP[provider];\n    if (!socialProvider) return;\n\n    await authClient.signIn.social({\n      callbackURL: resolveClientPostAuthRedirect(authorizationSearch),\n      provider: socialProvider,\n    });\n  };\n\n  return (\n    <PreambleLayout provider={provider} onSubmit={handleSubmit}>\n      <ExternalTextLink href={resolvePathWithSearch(\"/login\", authorizationSearch)}>\n        Don&apos;t import my calendars yet, just log me in.\n      </ExternalTextLink>\n    </PreambleLayout>\n  );\n}\n\ninterface LinkOAuthPreambleProps {\n  provider: Provider;\n}\n\nexport function LinkOAuthPreamble({ provider }: LinkOAuthPreambleProps) {\n  const handleSubmit = (event: SubmitEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const apiProvider = PROVIDER_API_MAP[provider];\n    window.location.href = `/api/sources/authorize?provider=${apiProvider}`;\n  };\n\n  return (\n    <PreambleLayout provider={provider} onSubmit={handleSubmit} />\n  );\n}\n\nexport function ProviderIconPair({ children }: { children: ReactNode }) {\n  return (\n    <div className=\"flex items-center justify-center gap-4 pb-4\">\n      <div className=\"size-14 rounded-xl border border-interactive-border shadow-xs p-3 flex items-center justify-center bg-background-inverse\">\n        <KeeperLogo className=\"size-full rounded-lg text-foreground-inverse p-1\" />\n      </div>\n      <ArrowLeftRight size={20} className=\"text-foreground-muted\" />\n      <div className=\"size-14 rounded-xl border border-interactive-border shadow-xs p-1 flex items-center justify-center\">\n        {children}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/blog/components/blog-post-cta.tsx",
    "content": "import { ButtonText, LinkButton } from \"@/components/ui/primitives/button\";\nimport { Heading3 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nexport function BlogPostCta() {\n  return (\n    <aside className=\"overflow-hidden rounded-2xl border border-interactive-border bg-background-elevated\">\n      <div className=\"grid grid-cols-1 sm:grid-cols-3 sm:items-stretch\">\n        <div className=\"flex flex-col gap-3 p-5 md:p-6 sm:col-span-2\">\n          <Heading3 as=\"h2\" className=\"mb-0 mt-0\">\n            Ready to sync your calendars?\n          </Heading3>\n          <Text size=\"base\" tone=\"muted\" className=\"leading-6\">\n            Create an account, connect your sources and destinations, and keep your availability aligned everywhere.\n          </Text>\n          <LinkButton size=\"compact\" to=\"/register\" variant=\"highlight\">\n            <ButtonText>Register for Keeper.sh</ButtonText>\n          </LinkButton>\n        </div>\n        <div\n          aria-hidden=\"true\"\n          className=\"hidden min-h-32 border-l border-interactive-border bg-background sm:block\"\n          style={{\n            backgroundImage:\n              \"repeating-linear-gradient(-45deg, transparent 0 14px, var(--color-illustration-stripe) 14px 15px)\",\n          }}\n        />\n      </div>\n    </aside>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/dashboard/components/event-graph.tsx",
    "content": "import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { atom } from \"jotai\";\nimport { useAtomValue, useSetAtom } from \"jotai\";\nimport * as m from \"motion/react-m\";\nimport { LazyMotion } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { eventGraphHoverIndexAtom, eventGraphDraggingAtom } from \"@/state/event-graph-hover\";\nimport { fetcher } from \"@/lib/fetcher\";\nimport { useAnimatedSWR } from \"@/hooks/use-animated-swr\";\nimport { pluralize } from \"@/lib/pluralize\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { useStartOfToday } from \"@/hooks/use-start-of-today\";\nimport type { ApiEventSummary } from \"@/types/api\";\n\nconst DAYS_BEFORE = 7;\nconst DAYS_AFTER = 7;\nconst TOTAL_DAYS = DAYS_BEFORE + 1 + DAYS_AFTER;\nconst GRAPH_HEIGHT = 96;\nconst MIN_BAR_HEIGHT = 20;\n\nconst graphBar = tv({\n  base: \"flex-1 rounded-[0.625rem]\",\n  variants: {\n    period: {\n      past: \"bg-background-hover border border-border-elevated\",\n      today: \"bg-emerald-400 border-transparent\",\n      future:\n        \"bg-emerald-400 border-emerald-500 bg-[repeating-linear-gradient(-45deg,transparent_0_4px,var(--color-illustration-stripe)_4px_8px)]\",\n    },\n  },\n});\n\ntype Period = \"past\" | \"today\" | \"future\";\n\nconst resolvePeriod = (dayOffset: number): Period => {\n  if (dayOffset < 0) return \"past\";\n  if (dayOffset === 0) return \"today\";\n  return \"future\";\n};\n\nconst MS_PER_DAY = 86_400_000;\n\nconst buildGraphUrl = (todayStart: Date): string => {\n  const from = new Date(todayStart.getTime() - DAYS_BEFORE * MS_PER_DAY);\n  const to = new Date(todayStart.getTime() + DAYS_AFTER * MS_PER_DAY + MS_PER_DAY - 1);\n  return `/api/events?from=${from.toISOString()}&to=${to.toISOString()}`;\n};\n\nconst countEventsByDay = (events: ApiEventSummary[], todayTimestamp: number): number[] => {\n  const counts = new Array<number>(TOTAL_DAYS).fill(0);\n  for (const event of events) {\n    const eventDate = new Date(event.startTime);\n    const dayOffset = Math.floor((eventDate.getTime() - todayTimestamp) / MS_PER_DAY);\n    const slotIndex = dayOffset + DAYS_BEFORE;\n    if (slotIndex >= 0 && slotIndex < TOTAL_DAYS) counts[slotIndex]++;\n  }\n  return counts;\n};\n\ninterface DayData {\n  count: number;\n  dayOffset: number;\n  height: number;\n  fullLabel: string;\n  period: Period;\n}\n\nconst formatDayLabel = (todayStart: Date, dayOffset: number): string => {\n  const date = new Date(todayStart);\n  date.setDate(date.getDate() + dayOffset);\n  return date.toLocaleDateString(\"en-US\", {\n    weekday: \"long\",\n    month: \"short\",\n    day: \"numeric\",\n  });\n};\n\nconst GROWTH_SPACE = GRAPH_HEIGHT - MIN_BAR_HEIGHT;\n\nfunction resolveBarHeight(count: number, maxCount: number): number {\n  return MIN_BAR_HEIGHT + (count / maxCount) * GROWTH_SPACE;\n}\n\nconst normalizeDayData = (counts: number[], todayStart: Date): DayData[] => {\n  const maxCount = Math.max(...counts, 1);\n\n  return counts.map((count, slotIndex) => {\n    const dayOffset = slotIndex - DAYS_BEFORE;\n    return {\n      count,\n      dayOffset,\n      height: resolveBarHeight(count, maxCount),\n      fullLabel: formatDayLabel(todayStart, dayOffset),\n      period: resolvePeriod(dayOffset),\n    };\n  });\n};\n\nconst buildDays = (events: ApiEventSummary[], todayStart: Date): DayData[] => {\n  const counts = countEventsByDay(events, todayStart.getTime());\n  return normalizeDayData(counts, todayStart);\n};\n\nfunction resolveWeekTotal(days: DayData[]): number {\n  return days.reduce((sum, day) => sum + day.count, 0);\n}\n\nfunction resolveEventCount(hoverIndex: number | null, days: DayData[]): number {\n  if (hoverIndex !== null) return days[hoverIndex].count;\n  return resolveWeekTotal(days);\n}\n\nfunction resolveLabel(hoverIndex: number | null, days: DayData[]): string {\n  if (hoverIndex !== null) return days[hoverIndex].fullLabel;\n  return \"This Week\";\n}\n\nfunction resolveDataAttr(condition: boolean): \"\" | undefined {\n  if (condition) return \"\";\n  return undefined;\n}\n\ninterface EventGraphSummaryProps {\n  days: DayData[];\n}\n\nfunction EventGraphSummary({ days }: EventGraphSummaryProps) {\n  return (\n    <div className=\"flex items-center justify-between\">\n      <EventGraphEventCount days={days} />\n      <EventGraphLabel days={days} />\n    </div>\n  );\n}\n\nfunction EventGraphEventCount({ days }: EventGraphSummaryProps) {\n  const hoverIndex = useAtomValue(eventGraphHoverIndexAtom);\n  const count = resolveEventCount(hoverIndex, days);\n\n  return (\n    <Text size=\"sm\" tone=\"muted\" align=\"right\" className=\"tabular-nums\">\n      {pluralize(count, \"event\")}\n    </Text>\n  );\n}\n\nfunction EventGraphLabel({ days }: EventGraphSummaryProps) {\n  const hoverIndex = useAtomValue(eventGraphHoverIndexAtom);\n  const label = resolveLabel(hoverIndex, days);\n\n  return (\n    <Text size=\"sm\" tone=\"muted\" align=\"right\" className=\"tabular-nums\">\n      {label}\n    </Text>\n  );\n}\n\nconst ANIMATED_TRANSITION = { duration: 0.3, ease: [0.4, 0, 0.2, 1] as const };\nconst INSTANT_TRANSITION = { duration: 0 };\n\nfunction resolveBarTransition(shouldAnimate: boolean, dayIndex: number) {\n  if (!shouldAnimate) return INSTANT_TRANSITION;\n  return { ...ANIMATED_TRANSITION, delay: dayIndex * 0.015 };\n}\n\nfunction useIsActiveDragTarget(index: number): boolean {\n  const isActiveAtom = useMemo(\n    () => atom((get) => get(eventGraphDraggingAtom) && get(eventGraphHoverIndexAtom) === index),\n    [index],\n  );\n  return useAtomValue(isActiveAtom);\n}\n\ninterface EventGraphBarProps {\n  day: DayData;\n  dayIndex: number;\n  shouldAnimate: boolean;\n}\n\nconst EventGraphBar = memo(function EventGraphBar({ day, dayIndex, shouldAnimate }: EventGraphBarProps) {\n  const isActive = useIsActiveDragTarget(dayIndex);\n  const setHoverIndex = useSetAtom(eventGraphHoverIndexAtom);\n\n  return (\n    <div\n      className=\"flex-1 flex flex-col gap-2\"\n      data-active={resolveDataAttr(isActive)}\n      onPointerEnter={() => setHoverIndex(dayIndex)}\n    >\n      <div\n        className=\"flex items-end\"\n        style={{ height: GRAPH_HEIGHT }}\n      >\n        <m.div\n          className={graphBar({\n            period: day.period,\n            className: \"w-full\",\n          })}\n          initial={{ height: MIN_BAR_HEIGHT }}\n          animate={{ height: day.height }}\n          transition={resolveBarTransition(shouldAnimate, dayIndex)}\n        />\n      </div>\n      <Text\n        size=\"xs\"\n        tone=\"default\"\n        align=\"center\"\n        className=\"font-mono leading-none select-none\"\n      >\n        {day.dayOffset}\n      </Text>\n    </div>\n  );\n});\n\ninterface EventGraphBarsProps {\n  days: DayData[];\n  shouldAnimate: boolean;\n}\n\nfunction EventGraphBars({ days, shouldAnimate }: EventGraphBarsProps) {\n  const isDragging = useAtomValue(eventGraphDraggingAtom);\n  const setHoverIndex = useSetAtom(eventGraphHoverIndexAtom);\n  const setDragging = useSetAtom(eventGraphDraggingAtom);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const resolveIndexFromTouch = useCallback((touch: React.Touch) => {\n    const container = containerRef.current;\n    if (!container) return null;\n    const rect = container.getBoundingClientRect();\n    const x = touch.clientX - rect.left;\n    const index = Math.floor((x / rect.width) * TOTAL_DAYS);\n    if (index < 0 || index >= TOTAL_DAYS) return null;\n    return index;\n  }, []);\n\n  const handleTouchStart = useCallback(({ touches }: React.TouchEvent) => {\n    setDragging(true);\n\n    const touch = touches[0];\n    if (!touch) return;\n    setHoverIndex(resolveIndexFromTouch(touch));\n  }, [resolveIndexFromTouch, setHoverIndex, setDragging]);\n\n  const handleTouchMove = useCallback((event: React.TouchEvent | TouchEvent) => {\n    event.preventDefault();\n    const touch = event.touches[0];\n    if (!touch) return;\n    setHoverIndex(resolveIndexFromTouch(touch));\n  }, [resolveIndexFromTouch, setHoverIndex]);\n\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container) return;\n\n    const listener = (event: TouchEvent) => handleTouchMove(event);\n    container.addEventListener(\"touchmove\", listener, { passive: false });\n    return () => container.removeEventListener(\"touchmove\", listener);\n  }, [handleTouchMove]);\n\n  const handleTouchEnd = () => {\n    setDragging(false);\n    setHoverIndex(null);\n  };\n\n  return (\n    <div\n      ref={containerRef}\n      className=\"flex gap-0.5 pointer-hover:[&:hover>*]:opacity-50 pointer-hover:[&>*:hover]:opacity-100 data-dragging:*:opacity-50 data-dragging:*:data-active:opacity-100\"\n      data-dragging={resolveDataAttr(isDragging)}\n      onPointerLeave={() => setHoverIndex(null)}\n      onTouchStart={handleTouchStart}\n      onTouchEnd={handleTouchEnd}\n    >\n      {days.map((day, dayIndex) => (\n        <EventGraphBar\n          key={day.dayOffset}\n          day={day}\n          dayIndex={dayIndex}\n          shouldAnimate={shouldAnimate}\n        />\n      ))}\n    </div>\n  );\n}\n\nexport function EventGraph() {\n  const todayStart = useStartOfToday();\n  const graphUrl = buildGraphUrl(todayStart);\n  const { data: events, shouldAnimate } = useAnimatedSWR<ApiEventSummary[]>(graphUrl, { fetcher });\n  const days = buildDays(events ?? [], todayStart);\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <div className=\"flex flex-col gap-6 pb-4\">\n        <EventGraphSummary days={days} />\n        <EventGraphBars days={days} shouldAnimate={shouldAnimate} />\n      </div>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/dashboard/components/metadata-row.tsx",
    "content": "import type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport type { Link } from \"@tanstack/react-router\";\nimport {\n  NavigationMenuItem,\n  NavigationMenuLinkItem,\n  NavigationMenuItemIcon,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { cn } from \"@/utils/cn\";\n\ninterface MetadataRowProps {\n  label: string;\n  value?: string;\n  icon?: ReactNode;\n  truncate?: boolean;\n  to?: ComponentPropsWithoutRef<typeof Link>[\"to\"];\n}\n\nexport function MetadataRow({ label, value, icon, truncate = false, to }: MetadataRowProps) {\n  const content = (\n    <>\n      <Text size=\"sm\" tone=\"muted\" className=\"shrink-0\">{label}</Text>\n      {value && (\n        <div className={cn(\"ml-auto overflow-hidden\", truncate && \"min-w-0\")}>\n          <Text size=\"sm\" tone=\"muted\" className={cn(truncate && \"truncate\")}>{value}</Text>\n        </div>\n      )}\n      {icon && <div className=\"ml-auto shrink-0\"><NavigationMenuItemIcon>{icon}</NavigationMenuItemIcon></div>}\n    </>\n  );\n\n  if (to) return <NavigationMenuLinkItem to={to}>{content}</NavigationMenuLinkItem>;\n  return <NavigationMenuItem>{content}</NavigationMenuItem>;\n}\n"
  },
  {
    "path": "applications/web/src/features/dashboard/components/sync-status-helpers.ts",
    "content": "import type { CompositeSyncState } from \"@/state/sync\";\n\nconst clampPercent = (value: number): number => {\n  if (!Number.isFinite(value)) {\n    return 0;\n  }\n\n  return Math.min(100, Math.max(0, value));\n};\n\nconst resolveSyncPercent = (composite: CompositeSyncState): number | null => {\n  if (!composite.hasReceivedAggregate) {\n    return null;\n  }\n\n  if (composite.syncEventsTotal > 0) {\n    return clampPercent((composite.syncEventsProcessed / composite.syncEventsTotal) * 100);\n  }\n\n  if (composite.state === \"syncing\") {\n    return clampPercent(composite.progressPercent);\n  }\n\n  if (composite.connected && composite.syncEventsRemaining === 0) {\n    return 100;\n  }\n\n  return null;\n};\n\nexport { clampPercent, resolveSyncPercent };\n"
  },
  {
    "path": "applications/web/src/features/dashboard/components/sync-status.tsx",
    "content": "import { useAtomValue } from \"jotai\";\nimport { syncStateAtom, syncStatusLabelAtom, syncStatusShimmerAtom } from \"@/state/sync\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ShimmerText } from \"@/components/ui/primitives/shimmer-text\";\nimport { Tooltip } from \"@/components/ui/primitives/tooltip\";\nimport { clampPercent, resolveSyncPercent } from \"./sync-status-helpers\";\n\nfunction SyncProgressCircle({ percent }: { percent: number }) {\n  const radius = 5;\n  const circumference = 2 * Math.PI * radius;\n  const clampedPercent = clampPercent(percent);\n  const strokeDashoffset = circumference * (1 - clampedPercent / 100);\n\n  return (\n    <svg aria-hidden=\"true\" viewBox=\"0 0 12 12\" className=\"-rotate-90 size-3.5 shrink-0\">\n      <circle\n        cx={6}\n        cy={6}\n        r={radius}\n        fill=\"none\"\n        strokeWidth={2}\n        className=\"stroke-background-hover\"\n      />\n      <circle\n        cx={6}\n        cy={6}\n        r={radius}\n        fill=\"none\"\n        strokeWidth={2}\n        strokeLinecap=\"round\"\n        className=\"stroke-emerald-400 transition-[stroke-dashoffset] duration-300 ease-out motion-reduce:transition-none\"\n        style={{\n          strokeDasharray: circumference,\n          strokeDashoffset,\n        }}\n      />\n    </svg>\n  );\n}\n\nfunction SyncProgressIndicator() {\n  const composite = useAtomValue(syncStateAtom);\n  if (!composite.connected) {\n    return <SyncProgressCircle percent={0} />;\n  }\n\n  const percent = resolveSyncPercent(composite);\n  if (percent === null) {\n    return null;\n  }\n\n  return <SyncProgressCircle percent={percent} />;\n}\n\nfunction SyncStatusLabel() {\n  const label = useAtomValue(syncStatusLabelAtom);\n  const isSyncing = useAtomValue(syncStatusShimmerAtom);\n\n  if (isSyncing) {\n    return <ShimmerText className=\"text-sm tracking-tight\">{label}</ShimmerText>;\n  }\n\n  return <Text size=\"sm\" tone=\"muted\">{label}</Text>;\n}\n\nfunction SyncTooltipContent() {\n  const composite = useAtomValue(syncStateAtom);\n  if (!composite.connected) return null;\n  const percent = resolveSyncPercent(composite);\n  if (percent === null) return null;\n  return <>{percent.toFixed(2)}%</>;\n}\n\nexport function SyncStatus() {\n  return (\n    <Tooltip content={<SyncTooltipContent />}>\n      <div className=\"self-start flex items-center gap-1.5 w-fit pb-2\">\n        <SyncStatusLabel />\n        <SyncProgressIndicator />\n      </div>\n    </Tooltip>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/dashboard/components/upgrade-card.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst upgradeCard = tv({\n  base: \"relative rounded-2xl p-0.5 before:absolute before:top-0.5 before:inset-x-0 before:h-px before:bg-linear-to-r before:mx-4 before:z-10 before:from-transparent before:to-transparent bg-neutral-900 before:via-neutral-400 dark:bg-neutral-800 dark:before:via-neutral-400\",\n});\n\nconst upgradeCardBody = tv({\n  base: \"rounded-[0.875rem] bg-linear-to-t from-neutral-950 to-neutral-900 dark:from-neutral-900 dark:to-neutral-800 p-4 flex flex-col gap-4\",\n});\n\nconst upgradeCardSection = tv({\n  base: \"flex flex-col\",\n  variants: {\n    gap: {\n      sm: \"gap-0.5\",\n      md: \"gap-1.5\",\n    },\n  },\n  defaultVariants: {\n    gap: \"md\",\n  },\n});\n\nconst upgradeCardToggle = tv({\n  base: \"flex items-center gap-3 py-1.5 hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring hover:brightness-110\",\n});\n\nconst upgradeCardToggleTrack = tv({\n  base: \"w-8 h-5 rounded-full shrink-0 flex items-center p-0.5\",\n  variants: {\n    checked: {\n      true: \"bg-white\",\n      false: \"bg-neutral-600\",\n    },\n  },\n});\n\nconst upgradeCardToggleThumb = tv({\n  base: \"size-4 rounded-full bg-neutral-900\",\n  variants: {\n    checked: {\n      true: \"ml-auto\",\n      false: \"\",\n    },\n  },\n});\n\nconst upgradeCardFeatureRow = tv({\n  base: \"flex items-center gap-2.5\",\n});\n\nconst upgradeCardFeatureIcon = tv({\n  base: \"shrink-0 text-neutral-500\",\n});\n\nexport function UpgradeCard({ children, className }: PropsWithChildren<{ className?: string }>) {\n  return (\n    <div className={upgradeCard({ className })}>\n      <div className={upgradeCardBody()}>{children}</div>\n    </div>\n  );\n}\n\nexport function UpgradeCardSection({ children, gap }: PropsWithChildren<{ gap?: \"sm\" | \"md\" }>) {\n  return <div className={upgradeCardSection({ gap })}>{children}</div>;\n}\n\ntype UpgradeCardToggleProps = PropsWithChildren<{\n  checked: boolean;\n  onCheckedChange: (checked: boolean) => void;\n}>;\n\nexport function UpgradeCardToggle({ checked, onCheckedChange, children }: UpgradeCardToggleProps) {\n  return (\n    <button\n      type=\"button\"\n      role=\"switch\"\n      aria-checked={checked}\n      onClick={() => onCheckedChange(!checked)}\n      className={upgradeCardToggle()}\n    >\n      {children}\n      <div className={upgradeCardToggleTrack({ checked })}>\n        <div className={upgradeCardToggleThumb({ checked })} />\n      </div>\n    </button>\n  );\n}\n\nexport function UpgradeCardFeature({ children }: PropsWithChildren) {\n  return <div className={upgradeCardFeatureRow()}>{children}</div>;\n}\n\nexport function UpgradeCardFeatureIcon({ children }: PropsWithChildren) {\n  return <div className={upgradeCardFeatureIcon()}>{children}</div>;\n}\n\nexport function UpgradeCardActions({ children }: PropsWithChildren) {\n  return <div className=\"grid gap-1.5\">{children}</div>;\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-cta.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\n\nexport function MarketingCtaSection({ children }: PropsWithChildren) {\n  return (\n    <section className=\"w-full pt-16 pb-8\">\n      {children}\n    </section>\n  );\n}\n\nexport function MarketingCtaCard({ children }: PropsWithChildren) {\n  return (\n    <div className=\"relative rounded-2xl p-0.5 bg-neutral-800 dark:bg-neutral-900 before:absolute before:top-0.5 before:inset-x-0 before:h-px before:bg-linear-to-r before:mx-4 before:z-10 before:from-transparent before:via-neutral-600 dark:before:via-neutral-700 before:to-transparent\">\n      <div className=\"rounded-[0.875rem] bg-linear-to-t to-neutral-800 from-neutral-900 dark:to-neutral-900 dark:from-neutral-950 p-8 flex flex-col items-center gap-2\">\n        {children}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-faq.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nexport function MarketingFaqSection({ children }: PropsWithChildren) {\n  return <section className=\"w-full max-w-lg mx-auto pt-16 pb-4\">{children}</section>;\n}\n\nexport function MarketingFaqList({ children }: PropsWithChildren) {\n  return (\n    <div className=\"mt-8 flex flex-col gap-1\">\n      {children}\n    </div>\n  );\n}\n\nexport function MarketingFaqItem({ children }: PropsWithChildren) {\n  return (\n    <div className=\"rounded-2xl p-0.5 bg-background-elevated border border-border-elevated shadow-xs\">\n      {children}\n    </div>\n  );\n}\n\nexport function MarketingFaqQuestion({ children }: PropsWithChildren) {\n  return (\n    <Text as=\"span\" size=\"sm\">{children}</Text>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-feature-bento.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { cn } from \"@/utils/cn\";\n\ntype MarketingFeatureBentoCardProps = PropsWithChildren<{ className?: string }>;\n\nexport function MarketingFeatureBentoSection({ children, id }: PropsWithChildren<{ id?: string }>) {\n  return <section id={id} className=\"w-full md:px-0 bg-background z-20\">{children}</section>;\n}\n\nexport function MarketingFeatureBentoGrid({ children }: PropsWithChildren) {\n  return (\n    <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-10 gap-px border border-interactive-border rounded-2xl overflow-hidden bg-interactive-border\">\n      {children}\n    </div>\n  );\n}\n\nexport function MarketingFeatureBentoCard({\n  children,\n  className,\n}: MarketingFeatureBentoCardProps) {\n  return (\n    <article className={cn(\"flex flex-col h-full bg-background\", className)}>\n      {children}\n    </article>\n  );\n}\n\nconst ILLUSTRATION_STYLE = {\n  backgroundImage:\n    \"repeating-linear-gradient(-45deg, transparent 0 14px, var(--color-illustration-stripe) 14px 15px)\",\n} as const;\n\ntype MarketingFeatureBentoIllustrationProps = PropsWithChildren<{\n  plain?: boolean;\n}>;\n\nexport function MarketingFeatureBentoIllustration({ children, plain }: MarketingFeatureBentoIllustrationProps) {\n  return (\n    <div\n      className=\"bg-background flex items-center justify-center py-4 min-h-32 flex-1 select-none\"\n      style={plain ? undefined : ILLUSTRATION_STYLE}\n      role=\"presentation\"\n      aria-hidden=\"true\"\n    >\n      {children}\n    </div>\n  );\n}\n\nexport function MarketingFeatureBentoBody({ children }: PropsWithChildren) {\n  return <div className=\"flex flex-col gap-2 p-4 pt-0 md:p-6 md:pt-0 mt-auto\">{children}</div>;\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-footer.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\n\nexport function MarketingFooter({ children }: PropsWithChildren) {\n  return (\n    <footer className=\"flex justify-between items-start gap-4 py-12 tracking-tight font-light text-sm z-20 bg-background\">\n      {children}\n    </footer>\n  );\n}\n\nexport function MarketingFooterTagline({ children }: PropsWithChildren) {\n  return (\n    <p className=\"text-foreground-muted\">\n      {children}\n    </p>\n  );\n}\n\nexport function MarketingFooterNav({ children }: PropsWithChildren) {\n  return (\n    <nav className=\"flex gap-6\" aria-label=\"Footer\">\n      {children}\n    </nav>\n  );\n}\n\nexport function MarketingFooterNavGroup({ children }: PropsWithChildren) {\n  return (\n    <ul className=\"flex flex-col gap-2 w-fit list-none\">\n      {children}\n    </ul>\n  );\n}\n\nexport function MarketingFooterNavGroupLabel({ children }: PropsWithChildren) {\n  return (\n    <li className=\"text-foreground\">\n      {children}\n    </li>\n  );\n}\n\ntype MarketingFooterNavItemProps = PropsWithChildren<{\n  to?: string;\n  href?: string;\n}>;\n\nexport function MarketingFooterNavItem({ children, to, href }: MarketingFooterNavItemProps) {\n  const className = \"text-foreground-muted hover:text-foreground-hover\";\n\n  if (to) {\n    return (\n      <li>\n        <Link to={to} className={className}>{children}</Link>\n      </li>\n    );\n  }\n\n  if (href) {\n    return (\n      <li>\n        <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={className}>{children}</a>\n      </li>\n    );\n  }\n\n  return (\n    <li className={className}>\n      {children}\n    </li>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-header.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport { LayoutRow } from \"@/components/ui/shells/layout\";\nimport { StaggeredBackdropBlur } from \"@/components/ui/primitives/staggered-backdrop-blur\";\n\nexport function MarketingHeader({ children }: PropsWithChildren) {\n  return (\n    <div className=\"w-full sticky top-0 z-50\">\n      <StaggeredBackdropBlur />\n      <LayoutRow className=\"relative z-10\">\n        <header className=\"flex justify-between items-center gap-2 py-3\">\n          {children}\n        </header>\n      </LayoutRow>\n    </div>\n  );\n}\n\nexport function MarketingHeaderBranding({ children, label }: PropsWithChildren<{ label?: string }>) {\n  return <Link to=\"/\" className=\"flex items-center text-foreground hover:text-foreground-hover\" aria-label={label}>{children}</Link>;\n}\n\nexport function MarketingHeaderActions({ children }: PropsWithChildren) {\n  return (\n    <div className=\"flex items-center gap-2\">\n      {children}\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-how-it-works.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nexport function MarketingHowItWorksSection({ children }: PropsWithChildren) {\n  return <section className=\"w-full pt-16 pb-4\">{children}</section>;\n}\n\nconst ILLUSTRATION_STYLE = {\n  backgroundImage:\n    \"repeating-linear-gradient(-45deg, transparent 0 14px, var(--color-illustration-stripe) 14px 15px)\",\n} as const;\n\nexport function MarketingHowItWorksCard({ children }: PropsWithChildren) {\n  return (\n    <ol className=\"mt-8 grid grid-cols-1 auto-rows-[1fr] gap-px rounded-2xl overflow-hidden border border-interactive-border bg-interactive-border list-none\">\n      {children}\n    </ol>\n  );\n}\n\nexport function MarketingHowItWorksRow({ children, className, reverse }: PropsWithChildren<{ className?: string; reverse?: boolean }>) {\n  return (\n    <li className={cn(\"grid grid-cols-1 sm:grid-cols-2\", reverse && \"*:first:sm:order-2 *:last:sm:order-1\", className)}>\n      {children}\n    </li>\n  );\n}\n\nexport function MarketingHowItWorksStepBody({\n  step,\n  children,\n}: PropsWithChildren<{ step: number }>) {\n  return (\n    <div className=\"bg-background flex flex-col justify-center gap-1 p-6 sm:p-8\">\n      <Text size=\"sm\" tone=\"muted\">{step}</Text>\n      {children}\n    </div>\n  );\n}\n\nexport function MarketingHowItWorksStepIllustration({ children, align }: PropsWithChildren<{ align?: \"left\" | \"right\" }>) {\n  return (\n    <div\n      className={cn(\n        \"bg-background relative flex items-center justify-center min-h-48 select-none overflow-hidden\",\n        align && \"items-start pt-6 sm:pt-6 sm:pb-6 sm:items-center\",\n        align === \"left\" && \"sm:justify-start\",\n        align === \"right\" && \"sm:justify-end\",\n      )}\n      style={children ? undefined : ILLUSTRATION_STYLE}\n      role=\"presentation\"\n      aria-hidden=\"true\"\n    >\n      {children}\n      {align && (\n        <>\n          <div\n            className={cn(\n              \"absolute inset-y-0 w-16 pointer-events-none hidden sm:block\",\n              align === \"right\" && \"right-0 bg-linear-to-r from-transparent to-background\",\n              align === \"left\" && \"left-0 bg-linear-to-l from-transparent to-background\",\n            )}\n          />\n          <div className=\"absolute inset-x-0 bottom-0 h-12 pointer-events-none bg-linear-to-t from-background to-transparent sm:hidden\" />\n        </>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-illustration-calendar.tsx",
    "content": "import { useAtomValue } from \"jotai\";\nimport { LazyMotion } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\nimport { memo, type PropsWithChildren } from \"react\";\nimport { calendarEmphasizedAtom } from \"@/state/calendar-emphasized\";\n\nexport interface Skew {\n  rotate: number;\n  x: number;\n  y: number;\n}\n\nexport type SkewTuple = [Skew, Skew, Skew];\n\nconst CALENDAR_COLUMNS = 7;\nconst CALENDAR_ROWS = 6;\nconst CALENDAR_DAYS_IN_MONTH = 31;\nconst CALENDAR_CELLS = CALENDAR_COLUMNS * CALENDAR_ROWS;\nconst CALENDAR_ANIMATION_EASE = [0.16, 0.85, 0.2, 1] as const;\n\nconst CALENDAR_DAY_NUMBERS = Array.from(\n  { length: CALENDAR_CELLS },\n  (_, index) => (index % CALENDAR_DAYS_IN_MONTH) + 1,\n);\n\ninterface MarketingIllustrationCalendarCardProps {\n  skew: SkewTuple;\n}\n\nconst toMotionTarget = ({ rotate, x, y }: Skew) => ({ rotate, x, y });\nconst getAnimatedSkew = (skew: SkewTuple, emphasized: boolean) => {\n  if (emphasized) return toMotionTarget(skew[2]);\n  return toMotionTarget(skew[1]);\n};\nconst transformTemplate = ({\n  x,\n  y,\n  rotate,\n}: {\n  x?: unknown;\n  y?: unknown;\n  rotate?: unknown;\n}) =>\n  `translateX(${String(x ?? 0)}) translateY(${String(y ?? 0)}) rotate(${String(rotate ?? 0)})`;\n\ninterface CalendarDayProps {\n  day: number;\n}\n\nconst CalendarDay = memo(function CalendarDay({ day }: CalendarDayProps) {\n  return (\n    <div className=\"bg-background aspect-square flex justify-center py-2 text-[0.625rem] text-foreground-muted\">\n      {day}\n    </div>\n  );\n});\n\nconst CalendarGrid = memo(function CalendarGrid() {\n  return (\n    <div\n      className=\"grid grid-cols-7 rounded-[0.875rem] gap-0.5 overflow-hidden\"\n      style={{ gridTemplateColumns: `repeat(${CALENDAR_COLUMNS}, minmax(0, 1fr))` }}\n    >\n      {CALENDAR_DAY_NUMBERS.map((day, index) => (\n        <CalendarDay key={index} day={day} />\n      ))}\n    </div>\n  );\n});\n\nexport function MarketingIllustrationCalendarCard({\n  skew,\n}: MarketingIllustrationCalendarCardProps) {\n  const emphasized = useAtomValue(calendarEmphasizedAtom);\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <m.div\n        initial={toMotionTarget(skew[0])}\n        animate={getAnimatedSkew(skew, emphasized)}\n        transition={{ type: \"tween\", duration: 1.2, ease: CALENDAR_ANIMATION_EASE }}\n        transformTemplate={transformTemplate}\n        layout={false}\n        style={{ transformOrigin: \"center center\" }}\n        className=\"bg-interactive-border p-0.5 rounded-2xl select-none shadow-xs\"\n      >\n        <CalendarGrid />\n      </m.div>\n    </LazyMotion>\n  );\n}\n\nexport function MarketingIllustrationCalendar({ children }: PropsWithChildren) {\n  return (\n    <div className=\"relative w-full after:absolute after:inset-x-0 after:bottom-0 after:h-1/2 after:bg-linear-to-b after:from-transparent after:to-background\" role=\"presentation\" aria-hidden=\"true\">\n      <div className=\"py-12 px-2 max-w-96 mx-auto w-full max-h-64 sm:max-h-72\">\n        <div className=\"grid grid-cols-1 grid-rows-1 *:row-start-1 *:col-start-1\">\n          {children}\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/components/marketing-pricing-section.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\nimport { Heading2, Heading3 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ButtonText, LinkButton } from \"@/components/ui/primitives/button\";\nimport CheckIcon from \"lucide-react/dist/esm/icons/check\";\nimport InfinityIcon from \"lucide-react/dist/esm/icons/infinity\";\nimport MinusIcon from \"lucide-react/dist/esm/icons/minus\";\n\ntype ClassNameProps = PropsWithChildren<{ className?: string }>;\ntype MarketingPricingCardProps = ClassNameProps & VariantProps<typeof marketingPricingCard>;\nexport type MarketingPricingFeatureValueKind =\n  | \"check\"\n  | \"minus\"\n  | \"infinity\"\n  | (string & {});\n\ntype MarketingPricingPlanCardProps = {\n  tone?: \"default\" | \"inverse\";\n  name: string;\n  price: string;\n  period: string;\n  description: string;\n  ctaLabel: string;\n};\n\nconst marketingPricingCard = tv({\n  base: \"border rounded-2xl p-3 pt-5 flex flex-col shadow-xs\",\n  variants: {\n    tone: {\n      default: \"border-interactive-border bg-background\",\n      inverse: \"border-transparent bg-background-inverse\",\n    },\n  },\n  defaultVariants: {\n    tone: \"default\",\n  },\n});\n\nexport function MarketingPricingSection({ children, id }: PropsWithChildren<{ id?: string }>) {\n  return <section id={id} className=\"w-full md:px-0 pt-16 pb-4\">{children}</section>;\n}\n\nexport function MarketingPricingIntro({ children }: PropsWithChildren) {\n  return <div className=\"max-w-[44ch] mx-auto flex flex-col gap-2\">{children}</div>;\n}\n\nexport function MarketingPricingComparisonGrid({ children }: PropsWithChildren) {\n  return (\n    <div className=\"mt-8 grid grid-cols-1 xs:grid-cols-2 md:grid-cols-[min-content_repeat(2,auto)] gap-x-2\">{children}</div>\n  );\n}\n\nexport function MarketingPricingComparisonSpacer() {\n  return <div className=\"hidden md:block\" />;\n}\n\nexport function MarketingPricingCard({\n  children,\n  className,\n  tone,\n}: MarketingPricingCardProps) {\n  return (\n    <article\n      className={marketingPricingCard({ tone, className })}\n    >\n      {children}\n    </article>\n  );\n}\n\nexport function MarketingPricingCardBody({ children }: PropsWithChildren) {\n  return <div className=\"flex flex-col px-2\">{children}</div>;\n}\n\nexport function MarketingPricingCardCopy({ children }: PropsWithChildren) {\n  return <div className=\"py-4\">{children}</div>;\n}\n\nexport function MarketingPricingCardAction({ children }: PropsWithChildren) {\n  return <div className=\"mt-auto\">{children}</div>;\n}\n\nconst pricingPlanHeading = tv({\n  variants: {\n    tone: {\n      default: \"\",\n      inverse: \"text-foreground-inverse\",\n    },\n  },\n  defaultVariants: {\n    tone: \"default\",\n  },\n});\n\nconst pricingPlanButton = tv({\n  base: \"w-full justify-center\",\n  variants: {\n    tone: {\n      default: \"\",\n      inverse: \"border-transparent\",\n    },\n  },\n  defaultVariants: {\n    tone: \"default\",\n  },\n});\n\nconst pricingFeatureValueDisplay = tv({\n  variants: {\n    tone: {\n      default: \"text-foreground\",\n      muted: \"text-foreground-muted\",\n    },\n  },\n  defaultVariants: {\n    tone: \"default\",\n  },\n});\n\nfunction resolveCopyTone(tone: \"default\" | \"inverse\"): \"inverseMuted\" | \"muted\" {\n  if (tone === \"inverse\") return \"inverseMuted\";\n  return \"muted\";\n}\n\nexport function MarketingPricingPlanCard({\n  tone = \"default\",\n  name,\n  price,\n  period,\n  description,\n  ctaLabel,\n}: MarketingPricingPlanCardProps) {\n  const copyTone = resolveCopyTone(tone);\n\n  return (\n    <MarketingPricingCard tone={tone}>\n      <MarketingPricingCardBody>\n        <Heading3 className={pricingPlanHeading({ tone })}>{name}</Heading3>\n        <div className=\"flex items-baseline gap-1\">\n          <Heading2 className={pricingPlanHeading({ tone })}>{price}</Heading2>\n          <Text size=\"sm\" tone={copyTone} align=\"left\">\n            {period}\n          </Text>\n        </div>\n        <MarketingPricingCardCopy>\n          <Text size=\"sm\" tone={copyTone} align=\"left\">\n            {description}\n          </Text>\n        </MarketingPricingCardCopy>\n      </MarketingPricingCardBody>\n      <MarketingPricingCardAction>\n        <LinkButton variant=\"border\" className={pricingPlanButton({ tone })} to=\"/register\">\n          <ButtonText>{ctaLabel}</ButtonText>\n        </LinkButton>\n      </MarketingPricingCardAction>\n    </MarketingPricingCard>\n  );\n}\n\nexport function MarketingPricingFeatureMatrix({ children }: PropsWithChildren) {\n  return <div className=\"hidden md:grid col-span-3 grid-cols-subgrid\">{children}</div>;\n}\n\nexport function MarketingPricingFeatureRow({ children }: PropsWithChildren) {\n  return (\n    <div className=\"col-span-3 grid grid-cols-subgrid border-b border-interactive-border\">\n      {children}\n    </div>\n  );\n}\n\nexport function MarketingPricingFeatureLabel({ children }: PropsWithChildren) {\n  return <div className=\"px-2 py-4 text-left\">{children}</div>;\n}\n\nexport function MarketingPricingFeatureValue({ children }: PropsWithChildren) {\n  return <div className=\"flex justify-center py-4 tabular-nums\">{children}</div>;\n}\n\nexport function MarketingPricingFeatureDisplay({\n  value,\n  tone = \"default\",\n}: {\n  value: MarketingPricingFeatureValueKind;\n  tone?: \"muted\" | \"default\";\n}) {\n  const className = pricingFeatureValueDisplay({ tone });\n\n  if (value === \"check\") {\n    return <CheckIcon size={16} className={className} />;\n  }\n\n  if (value === \"minus\") {\n    return <MinusIcon size={16} className={className} />;\n  }\n\n  if (value === \"infinity\") {\n    return <InfinityIcon size={16} className={className} />;\n  }\n\n  return (\n    <Text size=\"sm\" tone={tone} align=\"center\">\n      {value}\n    </Text>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/features/marketing/contributors.json",
    "content": "[\n  {\n    \"username\": \"ridafkih\",\n    \"name\": \"Rida F'kih\",\n    \"avatarUrl\": \"/contributors/ridafkih.webp\"\n  },\n  {\n    \"username\": \"tilwegener\",\n    \"name\": \"Til Wegener\",\n    \"avatarUrl\": \"/contributors/tilwegener.webp\"\n  },\n  {\n    \"username\": \"ivancarlosti\",\n    \"name\": \"Ivan Carlos\",\n    \"avatarUrl\": \"/contributors/ivancarlosti.webp\"\n  },\n  {\n    \"username\": \"cnaples79\",\n    \"name\": \"Chase Naples\",\n    \"avatarUrl\": \"/contributors/cnaples79.webp\"\n  },\n  {\n    \"username\": \"ankitson\",\n    \"name\": \"Ankit Soni\",\n    \"avatarUrl\": \"/contributors/ankitson.webp\"\n  },\n  {\n    \"username\": \"claude\",\n    \"name\": \"Claude\",\n    \"avatarUrl\": \"/contributors/claude.webp\"\n  },\n  {\n    \"username\": \"mbaroody\",\n    \"name\": \"Michael Baroody\",\n    \"avatarUrl\": \"/contributors/mbaroody.webp\"\n  }\n]\n"
  },
  {
    "path": "applications/web/src/generated/tanstack/route-tree.generated.ts",
    "content": "/* eslint-disable */\n\n// @ts-nocheck\n\n// noinspection JSUnusedGlobalSymbols\n\n// This file was automatically generated by TanStack Router.\n// You should NOT make any changes in this file as it will be overwritten.\n// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.\n\nimport { Route as rootRouteImport } from './../../routes/__root'\nimport { Route as oauthRouteRouteImport } from './../../routes/(oauth)/route'\nimport { Route as marketingRouteRouteImport } from './../../routes/(marketing)/route'\nimport { Route as dashboardRouteRouteImport } from './../../routes/(dashboard)/route'\nimport { Route as authRouteRouteImport } from './../../routes/(auth)/route'\nimport { Route as marketingIndexRouteImport } from './../../routes/(marketing)/index'\nimport { Route as marketingTermsRouteImport } from './../../routes/(marketing)/terms'\nimport { Route as marketingPrivacyRouteImport } from './../../routes/(marketing)/privacy'\nimport { Route as authVerifyEmailRouteImport } from './../../routes/(auth)/verify-email'\nimport { Route as authVerifyAuthenticationRouteImport } from './../../routes/(auth)/verify-authentication'\nimport { Route as authResetPasswordRouteImport } from './../../routes/(auth)/reset-password'\nimport { Route as authRegisterRouteImport } from './../../routes/(auth)/register'\nimport { Route as authLoginRouteImport } from './../../routes/(auth)/login'\nimport { Route as authForgotPasswordRouteImport } from './../../routes/(auth)/forgot-password'\nimport { Route as oauthDashboardRouteRouteImport } from './../../routes/(oauth)/dashboard/route'\nimport { Route as oauthAuthRouteRouteImport } from './../../routes/(oauth)/auth/route'\nimport { Route as marketingBlogRouteRouteImport } from './../../routes/(marketing)/blog/route'\nimport { Route as marketingBlogIndexRouteImport } from './../../routes/(marketing)/blog/index'\nimport { Route as dashboardDashboardIndexRouteImport } from './../../routes/(dashboard)/dashboard/index'\nimport { Route as oauthOauthConsentRouteImport } from './../../routes/(oauth)/oauth/consent'\nimport { Route as oauthAuthOutlookRouteImport } from './../../routes/(oauth)/auth/outlook'\nimport { Route as oauthAuthGoogleRouteImport } from './../../routes/(oauth)/auth/google'\nimport { Route as marketingBlogSlugRouteImport } from './../../routes/(marketing)/blog/$slug'\nimport { Route as dashboardDashboardReportRouteImport } from './../../routes/(dashboard)/dashboard/report'\nimport { Route as dashboardDashboardIcalRouteImport } from './../../routes/(dashboard)/dashboard/ical'\nimport { Route as dashboardDashboardFeedbackRouteImport } from './../../routes/(dashboard)/dashboard/feedback'\nimport { Route as oauthDashboardConnectRouteRouteImport } from './../../routes/(oauth)/dashboard/connect/route'\nimport { Route as dashboardDashboardSettingsRouteRouteImport } from './../../routes/(dashboard)/dashboard/settings/route'\nimport { Route as dashboardDashboardConnectRouteRouteImport } from './../../routes/(dashboard)/dashboard/connect/route'\nimport { Route as dashboardDashboardAccountsRouteRouteImport } from './../../routes/(dashboard)/dashboard/accounts/route'\nimport { Route as dashboardDashboardUpgradeIndexRouteImport } from './../../routes/(dashboard)/dashboard/upgrade/index'\nimport { Route as dashboardDashboardSettingsIndexRouteImport } from './../../routes/(dashboard)/dashboard/settings/index'\nimport { Route as dashboardDashboardIntegrationsIndexRouteImport } from './../../routes/(dashboard)/dashboard/integrations/index'\nimport { Route as dashboardDashboardEventsIndexRouteImport } from './../../routes/(dashboard)/dashboard/events/index'\nimport { Route as dashboardDashboardConnectIndexRouteImport } from './../../routes/(dashboard)/dashboard/connect/index'\nimport { Route as oauthDashboardConnectOutlookRouteImport } from './../../routes/(oauth)/dashboard/connect/outlook'\nimport { Route as oauthDashboardConnectMicrosoftRouteImport } from './../../routes/(oauth)/dashboard/connect/microsoft'\nimport { Route as oauthDashboardConnectIcsFileRouteImport } from './../../routes/(oauth)/dashboard/connect/ics-file'\nimport { Route as oauthDashboardConnectIcalLinkRouteImport } from './../../routes/(oauth)/dashboard/connect/ical-link'\nimport { Route as oauthDashboardConnectGoogleRouteImport } from './../../routes/(oauth)/dashboard/connect/google'\nimport { Route as oauthDashboardConnectFastmailRouteImport } from './../../routes/(oauth)/dashboard/connect/fastmail'\nimport { Route as oauthDashboardConnectCaldavRouteImport } from './../../routes/(oauth)/dashboard/connect/caldav'\nimport { Route as oauthDashboardConnectAppleRouteImport } from './../../routes/(oauth)/dashboard/connect/apple'\nimport { Route as dashboardDashboardSettingsPasskeysRouteImport } from './../../routes/(dashboard)/dashboard/settings/passkeys'\nimport { Route as dashboardDashboardSettingsChangePasswordRouteImport } from './../../routes/(dashboard)/dashboard/settings/change-password'\nimport { Route as dashboardDashboardSettingsApiTokensRouteImport } from './../../routes/(dashboard)/dashboard/settings/api-tokens'\nimport { Route as dashboardDashboardAccountsAccountIdIndexRouteImport } from './../../routes/(dashboard)/dashboard/accounts/$accountId.index'\nimport { Route as dashboardDashboardAccountsAccountIdSetupRouteImport } from './../../routes/(dashboard)/dashboard/accounts/$accountId.setup'\nimport { Route as dashboardDashboardAccountsAccountIdCalendarIdRouteImport } from './../../routes/(dashboard)/dashboard/accounts/$accountId.$calendarId'\n\nconst oauthRouteRoute = oauthRouteRouteImport.update({\n  id: '/(oauth)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst marketingRouteRoute = marketingRouteRouteImport.update({\n  id: '/(marketing)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst dashboardRouteRoute = dashboardRouteRouteImport.update({\n  id: '/(dashboard)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst authRouteRoute = authRouteRouteImport.update({\n  id: '/(auth)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst marketingIndexRoute = marketingIndexRouteImport.update({\n  id: '/',\n  path: '/',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst marketingTermsRoute = marketingTermsRouteImport.update({\n  id: '/terms',\n  path: '/terms',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst marketingPrivacyRoute = marketingPrivacyRouteImport.update({\n  id: '/privacy',\n  path: '/privacy',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst authVerifyEmailRoute = authVerifyEmailRouteImport.update({\n  id: '/verify-email',\n  path: '/verify-email',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authVerifyAuthenticationRoute =\n  authVerifyAuthenticationRouteImport.update({\n    id: '/verify-authentication',\n    path: '/verify-authentication',\n    getParentRoute: () => authRouteRoute,\n  } as any)\nconst authResetPasswordRoute = authResetPasswordRouteImport.update({\n  id: '/reset-password',\n  path: '/reset-password',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authRegisterRoute = authRegisterRouteImport.update({\n  id: '/register',\n  path: '/register',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authLoginRoute = authLoginRouteImport.update({\n  id: '/login',\n  path: '/login',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authForgotPasswordRoute = authForgotPasswordRouteImport.update({\n  id: '/forgot-password',\n  path: '/forgot-password',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst oauthDashboardRouteRoute = oauthDashboardRouteRouteImport.update({\n  id: '/dashboard',\n  path: '/dashboard',\n  getParentRoute: () => oauthRouteRoute,\n} as any)\nconst oauthAuthRouteRoute = oauthAuthRouteRouteImport.update({\n  id: '/auth',\n  path: '/auth',\n  getParentRoute: () => oauthRouteRoute,\n} as any)\nconst marketingBlogRouteRoute = marketingBlogRouteRouteImport.update({\n  id: '/blog',\n  path: '/blog',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst marketingBlogIndexRoute = marketingBlogIndexRouteImport.update({\n  id: '/',\n  path: '/',\n  getParentRoute: () => marketingBlogRouteRoute,\n} as any)\nconst dashboardDashboardIndexRoute = dashboardDashboardIndexRouteImport.update({\n  id: '/dashboard/',\n  path: '/dashboard/',\n  getParentRoute: () => dashboardRouteRoute,\n} as any)\nconst oauthOauthConsentRoute = oauthOauthConsentRouteImport.update({\n  id: '/oauth/consent',\n  path: '/oauth/consent',\n  getParentRoute: () => oauthRouteRoute,\n} as any)\nconst oauthAuthOutlookRoute = oauthAuthOutlookRouteImport.update({\n  id: '/outlook',\n  path: '/outlook',\n  getParentRoute: () => oauthAuthRouteRoute,\n} as any)\nconst oauthAuthGoogleRoute = oauthAuthGoogleRouteImport.update({\n  id: '/google',\n  path: '/google',\n  getParentRoute: () => oauthAuthRouteRoute,\n} as any)\nconst marketingBlogSlugRoute = marketingBlogSlugRouteImport.update({\n  id: '/$slug',\n  path: '/$slug',\n  getParentRoute: () => marketingBlogRouteRoute,\n} as any)\nconst dashboardDashboardReportRoute =\n  dashboardDashboardReportRouteImport.update({\n    id: '/dashboard/report',\n    path: '/dashboard/report',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardIcalRoute = dashboardDashboardIcalRouteImport.update({\n  id: '/dashboard/ical',\n  path: '/dashboard/ical',\n  getParentRoute: () => dashboardRouteRoute,\n} as any)\nconst dashboardDashboardFeedbackRoute =\n  dashboardDashboardFeedbackRouteImport.update({\n    id: '/dashboard/feedback',\n    path: '/dashboard/feedback',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst oauthDashboardConnectRouteRoute =\n  oauthDashboardConnectRouteRouteImport.update({\n    id: '/connect',\n    path: '/connect',\n    getParentRoute: () => oauthDashboardRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsRouteRoute =\n  dashboardDashboardSettingsRouteRouteImport.update({\n    id: '/dashboard/settings',\n    path: '/dashboard/settings',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardConnectRouteRoute =\n  dashboardDashboardConnectRouteRouteImport.update({\n    id: '/dashboard/connect',\n    path: '/dashboard/connect',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsRouteRoute =\n  dashboardDashboardAccountsRouteRouteImport.update({\n    id: '/dashboard/accounts',\n    path: '/dashboard/accounts',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardUpgradeIndexRoute =\n  dashboardDashboardUpgradeIndexRouteImport.update({\n    id: '/dashboard/upgrade/',\n    path: '/dashboard/upgrade/',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsIndexRoute =\n  dashboardDashboardSettingsIndexRouteImport.update({\n    id: '/',\n    path: '/',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardIntegrationsIndexRoute =\n  dashboardDashboardIntegrationsIndexRouteImport.update({\n    id: '/dashboard/integrations/',\n    path: '/dashboard/integrations/',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardEventsIndexRoute =\n  dashboardDashboardEventsIndexRouteImport.update({\n    id: '/dashboard/events/',\n    path: '/dashboard/events/',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardConnectIndexRoute =\n  dashboardDashboardConnectIndexRouteImport.update({\n    id: '/',\n    path: '/',\n    getParentRoute: () => dashboardDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectOutlookRoute =\n  oauthDashboardConnectOutlookRouteImport.update({\n    id: '/outlook',\n    path: '/outlook',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectMicrosoftRoute =\n  oauthDashboardConnectMicrosoftRouteImport.update({\n    id: '/microsoft',\n    path: '/microsoft',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectIcsFileRoute =\n  oauthDashboardConnectIcsFileRouteImport.update({\n    id: '/ics-file',\n    path: '/ics-file',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectIcalLinkRoute =\n  oauthDashboardConnectIcalLinkRouteImport.update({\n    id: '/ical-link',\n    path: '/ical-link',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectGoogleRoute =\n  oauthDashboardConnectGoogleRouteImport.update({\n    id: '/google',\n    path: '/google',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectFastmailRoute =\n  oauthDashboardConnectFastmailRouteImport.update({\n    id: '/fastmail',\n    path: '/fastmail',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectCaldavRoute =\n  oauthDashboardConnectCaldavRouteImport.update({\n    id: '/caldav',\n    path: '/caldav',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectAppleRoute =\n  oauthDashboardConnectAppleRouteImport.update({\n    id: '/apple',\n    path: '/apple',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsPasskeysRoute =\n  dashboardDashboardSettingsPasskeysRouteImport.update({\n    id: '/passkeys',\n    path: '/passkeys',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsChangePasswordRoute =\n  dashboardDashboardSettingsChangePasswordRouteImport.update({\n    id: '/change-password',\n    path: '/change-password',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsApiTokensRoute =\n  dashboardDashboardSettingsApiTokensRouteImport.update({\n    id: '/api-tokens',\n    path: '/api-tokens',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsAccountIdIndexRoute =\n  dashboardDashboardAccountsAccountIdIndexRouteImport.update({\n    id: '/$accountId/',\n    path: '/$accountId/',\n    getParentRoute: () => dashboardDashboardAccountsRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsAccountIdSetupRoute =\n  dashboardDashboardAccountsAccountIdSetupRouteImport.update({\n    id: '/$accountId/setup',\n    path: '/$accountId/setup',\n    getParentRoute: () => dashboardDashboardAccountsRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsAccountIdCalendarIdRoute =\n  dashboardDashboardAccountsAccountIdCalendarIdRouteImport.update({\n    id: '/$accountId/$calendarId',\n    path: '/$accountId/$calendarId',\n    getParentRoute: () => dashboardDashboardAccountsRouteRoute,\n  } as any)\n\nexport interface FileRoutesByFullPath {\n  '/blog': typeof marketingBlogRouteRouteWithChildren\n  '/auth': typeof oauthAuthRouteRouteWithChildren\n  '/dashboard': typeof oauthDashboardRouteRouteWithChildren\n  '/forgot-password': typeof authForgotPasswordRoute\n  '/login': typeof authLoginRoute\n  '/register': typeof authRegisterRoute\n  '/reset-password': typeof authResetPasswordRoute\n  '/verify-authentication': typeof authVerifyAuthenticationRoute\n  '/verify-email': typeof authVerifyEmailRoute\n  '/privacy': typeof marketingPrivacyRoute\n  '/terms': typeof marketingTermsRoute\n  '/': typeof marketingIndexRoute\n  '/dashboard/accounts': typeof dashboardDashboardAccountsRouteRouteWithChildren\n  '/dashboard/connect': typeof oauthDashboardConnectRouteRouteWithChildren\n  '/dashboard/settings': typeof dashboardDashboardSettingsRouteRouteWithChildren\n  '/dashboard/feedback': typeof dashboardDashboardFeedbackRoute\n  '/dashboard/ical': typeof dashboardDashboardIcalRoute\n  '/dashboard/report': typeof dashboardDashboardReportRoute\n  '/blog/$slug': typeof marketingBlogSlugRoute\n  '/auth/google': typeof oauthAuthGoogleRoute\n  '/auth/outlook': typeof oauthAuthOutlookRoute\n  '/oauth/consent': typeof oauthOauthConsentRoute\n  '/dashboard/': typeof dashboardDashboardIndexRoute\n  '/blog/': typeof marketingBlogIndexRoute\n  '/dashboard/settings/api-tokens': typeof dashboardDashboardSettingsApiTokensRoute\n  '/dashboard/settings/change-password': typeof dashboardDashboardSettingsChangePasswordRoute\n  '/dashboard/settings/passkeys': typeof dashboardDashboardSettingsPasskeysRoute\n  '/dashboard/connect/apple': typeof oauthDashboardConnectAppleRoute\n  '/dashboard/connect/caldav': typeof oauthDashboardConnectCaldavRoute\n  '/dashboard/connect/fastmail': typeof oauthDashboardConnectFastmailRoute\n  '/dashboard/connect/google': typeof oauthDashboardConnectGoogleRoute\n  '/dashboard/connect/ical-link': typeof oauthDashboardConnectIcalLinkRoute\n  '/dashboard/connect/ics-file': typeof oauthDashboardConnectIcsFileRoute\n  '/dashboard/connect/microsoft': typeof oauthDashboardConnectMicrosoftRoute\n  '/dashboard/connect/outlook': typeof oauthDashboardConnectOutlookRoute\n  '/dashboard/connect/': typeof dashboardDashboardConnectIndexRoute\n  '/dashboard/events/': typeof dashboardDashboardEventsIndexRoute\n  '/dashboard/integrations/': typeof dashboardDashboardIntegrationsIndexRoute\n  '/dashboard/settings/': typeof dashboardDashboardSettingsIndexRoute\n  '/dashboard/upgrade/': typeof dashboardDashboardUpgradeIndexRoute\n  '/dashboard/accounts/$accountId/$calendarId': typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  '/dashboard/accounts/$accountId/setup': typeof dashboardDashboardAccountsAccountIdSetupRoute\n  '/dashboard/accounts/$accountId/': typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\nexport interface FileRoutesByTo {\n  '/auth': typeof oauthAuthRouteRouteWithChildren\n  '/dashboard': typeof dashboardDashboardIndexRoute\n  '/forgot-password': typeof authForgotPasswordRoute\n  '/login': typeof authLoginRoute\n  '/register': typeof authRegisterRoute\n  '/reset-password': typeof authResetPasswordRoute\n  '/verify-authentication': typeof authVerifyAuthenticationRoute\n  '/verify-email': typeof authVerifyEmailRoute\n  '/privacy': typeof marketingPrivacyRoute\n  '/terms': typeof marketingTermsRoute\n  '/': typeof marketingIndexRoute\n  '/dashboard/accounts': typeof dashboardDashboardAccountsRouteRouteWithChildren\n  '/dashboard/connect': typeof dashboardDashboardConnectIndexRoute\n  '/dashboard/feedback': typeof dashboardDashboardFeedbackRoute\n  '/dashboard/ical': typeof dashboardDashboardIcalRoute\n  '/dashboard/report': typeof dashboardDashboardReportRoute\n  '/blog/$slug': typeof marketingBlogSlugRoute\n  '/auth/google': typeof oauthAuthGoogleRoute\n  '/auth/outlook': typeof oauthAuthOutlookRoute\n  '/oauth/consent': typeof oauthOauthConsentRoute\n  '/blog': typeof marketingBlogIndexRoute\n  '/dashboard/settings/api-tokens': typeof dashboardDashboardSettingsApiTokensRoute\n  '/dashboard/settings/change-password': typeof dashboardDashboardSettingsChangePasswordRoute\n  '/dashboard/settings/passkeys': typeof dashboardDashboardSettingsPasskeysRoute\n  '/dashboard/connect/apple': typeof oauthDashboardConnectAppleRoute\n  '/dashboard/connect/caldav': typeof oauthDashboardConnectCaldavRoute\n  '/dashboard/connect/fastmail': typeof oauthDashboardConnectFastmailRoute\n  '/dashboard/connect/google': typeof oauthDashboardConnectGoogleRoute\n  '/dashboard/connect/ical-link': typeof oauthDashboardConnectIcalLinkRoute\n  '/dashboard/connect/ics-file': typeof oauthDashboardConnectIcsFileRoute\n  '/dashboard/connect/microsoft': typeof oauthDashboardConnectMicrosoftRoute\n  '/dashboard/connect/outlook': typeof oauthDashboardConnectOutlookRoute\n  '/dashboard/events': typeof dashboardDashboardEventsIndexRoute\n  '/dashboard/integrations': typeof dashboardDashboardIntegrationsIndexRoute\n  '/dashboard/settings': typeof dashboardDashboardSettingsIndexRoute\n  '/dashboard/upgrade': typeof dashboardDashboardUpgradeIndexRoute\n  '/dashboard/accounts/$accountId/$calendarId': typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  '/dashboard/accounts/$accountId/setup': typeof dashboardDashboardAccountsAccountIdSetupRoute\n  '/dashboard/accounts/$accountId': typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\nexport interface FileRoutesById {\n  __root__: typeof rootRouteImport\n  '/(auth)': typeof authRouteRouteWithChildren\n  '/(dashboard)': typeof dashboardRouteRouteWithChildren\n  '/(marketing)': typeof marketingRouteRouteWithChildren\n  '/(oauth)': typeof oauthRouteRouteWithChildren\n  '/(marketing)/blog': typeof marketingBlogRouteRouteWithChildren\n  '/(oauth)/auth': typeof oauthAuthRouteRouteWithChildren\n  '/(oauth)/dashboard': typeof oauthDashboardRouteRouteWithChildren\n  '/(auth)/forgot-password': typeof authForgotPasswordRoute\n  '/(auth)/login': typeof authLoginRoute\n  '/(auth)/register': typeof authRegisterRoute\n  '/(auth)/reset-password': typeof authResetPasswordRoute\n  '/(auth)/verify-authentication': typeof authVerifyAuthenticationRoute\n  '/(auth)/verify-email': typeof authVerifyEmailRoute\n  '/(marketing)/privacy': typeof marketingPrivacyRoute\n  '/(marketing)/terms': typeof marketingTermsRoute\n  '/(marketing)/': typeof marketingIndexRoute\n  '/(dashboard)/dashboard/accounts': typeof dashboardDashboardAccountsRouteRouteWithChildren\n  '/(dashboard)/dashboard/connect': typeof dashboardDashboardConnectRouteRouteWithChildren\n  '/(dashboard)/dashboard/settings': typeof dashboardDashboardSettingsRouteRouteWithChildren\n  '/(oauth)/dashboard/connect': typeof oauthDashboardConnectRouteRouteWithChildren\n  '/(dashboard)/dashboard/feedback': typeof dashboardDashboardFeedbackRoute\n  '/(dashboard)/dashboard/ical': typeof dashboardDashboardIcalRoute\n  '/(dashboard)/dashboard/report': typeof dashboardDashboardReportRoute\n  '/(marketing)/blog/$slug': typeof marketingBlogSlugRoute\n  '/(oauth)/auth/google': typeof oauthAuthGoogleRoute\n  '/(oauth)/auth/outlook': typeof oauthAuthOutlookRoute\n  '/(oauth)/oauth/consent': typeof oauthOauthConsentRoute\n  '/(dashboard)/dashboard/': typeof dashboardDashboardIndexRoute\n  '/(marketing)/blog/': typeof marketingBlogIndexRoute\n  '/(dashboard)/dashboard/settings/api-tokens': typeof dashboardDashboardSettingsApiTokensRoute\n  '/(dashboard)/dashboard/settings/change-password': typeof dashboardDashboardSettingsChangePasswordRoute\n  '/(dashboard)/dashboard/settings/passkeys': typeof dashboardDashboardSettingsPasskeysRoute\n  '/(oauth)/dashboard/connect/apple': typeof oauthDashboardConnectAppleRoute\n  '/(oauth)/dashboard/connect/caldav': typeof oauthDashboardConnectCaldavRoute\n  '/(oauth)/dashboard/connect/fastmail': typeof oauthDashboardConnectFastmailRoute\n  '/(oauth)/dashboard/connect/google': typeof oauthDashboardConnectGoogleRoute\n  '/(oauth)/dashboard/connect/ical-link': typeof oauthDashboardConnectIcalLinkRoute\n  '/(oauth)/dashboard/connect/ics-file': typeof oauthDashboardConnectIcsFileRoute\n  '/(oauth)/dashboard/connect/microsoft': typeof oauthDashboardConnectMicrosoftRoute\n  '/(oauth)/dashboard/connect/outlook': typeof oauthDashboardConnectOutlookRoute\n  '/(dashboard)/dashboard/connect/': typeof dashboardDashboardConnectIndexRoute\n  '/(dashboard)/dashboard/events/': typeof dashboardDashboardEventsIndexRoute\n  '/(dashboard)/dashboard/integrations/': typeof dashboardDashboardIntegrationsIndexRoute\n  '/(dashboard)/dashboard/settings/': typeof dashboardDashboardSettingsIndexRoute\n  '/(dashboard)/dashboard/upgrade/': typeof dashboardDashboardUpgradeIndexRoute\n  '/(dashboard)/dashboard/accounts/$accountId/$calendarId': typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  '/(dashboard)/dashboard/accounts/$accountId/setup': typeof dashboardDashboardAccountsAccountIdSetupRoute\n  '/(dashboard)/dashboard/accounts/$accountId/': typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\nexport interface FileRouteTypes {\n  fileRoutesByFullPath: FileRoutesByFullPath\n  fullPaths:\n    | '/blog'\n    | '/auth'\n    | '/dashboard'\n    | '/forgot-password'\n    | '/login'\n    | '/register'\n    | '/reset-password'\n    | '/verify-authentication'\n    | '/verify-email'\n    | '/privacy'\n    | '/terms'\n    | '/'\n    | '/dashboard/accounts'\n    | '/dashboard/connect'\n    | '/dashboard/settings'\n    | '/dashboard/feedback'\n    | '/dashboard/ical'\n    | '/dashboard/report'\n    | '/blog/$slug'\n    | '/auth/google'\n    | '/auth/outlook'\n    | '/oauth/consent'\n    | '/dashboard/'\n    | '/blog/'\n    | '/dashboard/settings/api-tokens'\n    | '/dashboard/settings/change-password'\n    | '/dashboard/settings/passkeys'\n    | '/dashboard/connect/apple'\n    | '/dashboard/connect/caldav'\n    | '/dashboard/connect/fastmail'\n    | '/dashboard/connect/google'\n    | '/dashboard/connect/ical-link'\n    | '/dashboard/connect/ics-file'\n    | '/dashboard/connect/microsoft'\n    | '/dashboard/connect/outlook'\n    | '/dashboard/connect/'\n    | '/dashboard/events/'\n    | '/dashboard/integrations/'\n    | '/dashboard/settings/'\n    | '/dashboard/upgrade/'\n    | '/dashboard/accounts/$accountId/$calendarId'\n    | '/dashboard/accounts/$accountId/setup'\n    | '/dashboard/accounts/$accountId/'\n  fileRoutesByTo: FileRoutesByTo\n  to:\n    | '/auth'\n    | '/dashboard'\n    | '/forgot-password'\n    | '/login'\n    | '/register'\n    | '/reset-password'\n    | '/verify-authentication'\n    | '/verify-email'\n    | '/privacy'\n    | '/terms'\n    | '/'\n    | '/dashboard/accounts'\n    | '/dashboard/connect'\n    | '/dashboard/feedback'\n    | '/dashboard/ical'\n    | '/dashboard/report'\n    | '/blog/$slug'\n    | '/auth/google'\n    | '/auth/outlook'\n    | '/oauth/consent'\n    | '/blog'\n    | '/dashboard/settings/api-tokens'\n    | '/dashboard/settings/change-password'\n    | '/dashboard/settings/passkeys'\n    | '/dashboard/connect/apple'\n    | '/dashboard/connect/caldav'\n    | '/dashboard/connect/fastmail'\n    | '/dashboard/connect/google'\n    | '/dashboard/connect/ical-link'\n    | '/dashboard/connect/ics-file'\n    | '/dashboard/connect/microsoft'\n    | '/dashboard/connect/outlook'\n    | '/dashboard/events'\n    | '/dashboard/integrations'\n    | '/dashboard/settings'\n    | '/dashboard/upgrade'\n    | '/dashboard/accounts/$accountId/$calendarId'\n    | '/dashboard/accounts/$accountId/setup'\n    | '/dashboard/accounts/$accountId'\n  id:\n    | '__root__'\n    | '/(auth)'\n    | '/(dashboard)'\n    | '/(marketing)'\n    | '/(oauth)'\n    | '/(marketing)/blog'\n    | '/(oauth)/auth'\n    | '/(oauth)/dashboard'\n    | '/(auth)/forgot-password'\n    | '/(auth)/login'\n    | '/(auth)/register'\n    | '/(auth)/reset-password'\n    | '/(auth)/verify-authentication'\n    | '/(auth)/verify-email'\n    | '/(marketing)/privacy'\n    | '/(marketing)/terms'\n    | '/(marketing)/'\n    | '/(dashboard)/dashboard/accounts'\n    | '/(dashboard)/dashboard/connect'\n    | '/(dashboard)/dashboard/settings'\n    | '/(oauth)/dashboard/connect'\n    | '/(dashboard)/dashboard/feedback'\n    | '/(dashboard)/dashboard/ical'\n    | '/(dashboard)/dashboard/report'\n    | '/(marketing)/blog/$slug'\n    | '/(oauth)/auth/google'\n    | '/(oauth)/auth/outlook'\n    | '/(oauth)/oauth/consent'\n    | '/(dashboard)/dashboard/'\n    | '/(marketing)/blog/'\n    | '/(dashboard)/dashboard/settings/api-tokens'\n    | '/(dashboard)/dashboard/settings/change-password'\n    | '/(dashboard)/dashboard/settings/passkeys'\n    | '/(oauth)/dashboard/connect/apple'\n    | '/(oauth)/dashboard/connect/caldav'\n    | '/(oauth)/dashboard/connect/fastmail'\n    | '/(oauth)/dashboard/connect/google'\n    | '/(oauth)/dashboard/connect/ical-link'\n    | '/(oauth)/dashboard/connect/ics-file'\n    | '/(oauth)/dashboard/connect/microsoft'\n    | '/(oauth)/dashboard/connect/outlook'\n    | '/(dashboard)/dashboard/connect/'\n    | '/(dashboard)/dashboard/events/'\n    | '/(dashboard)/dashboard/integrations/'\n    | '/(dashboard)/dashboard/settings/'\n    | '/(dashboard)/dashboard/upgrade/'\n    | '/(dashboard)/dashboard/accounts/$accountId/$calendarId'\n    | '/(dashboard)/dashboard/accounts/$accountId/setup'\n    | '/(dashboard)/dashboard/accounts/$accountId/'\n  fileRoutesById: FileRoutesById\n}\nexport interface RootRouteChildren {\n  authRouteRoute: typeof authRouteRouteWithChildren\n  dashboardRouteRoute: typeof dashboardRouteRouteWithChildren\n  marketingRouteRoute: typeof marketingRouteRouteWithChildren\n  oauthRouteRoute: typeof oauthRouteRouteWithChildren\n}\n\ndeclare module '@tanstack/react-router' {\n  interface FileRoutesByPath {\n    '/(oauth)': {\n      id: '/(oauth)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof oauthRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(marketing)': {\n      id: '/(marketing)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof marketingRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(dashboard)': {\n      id: '/(dashboard)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof dashboardRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(auth)': {\n      id: '/(auth)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof authRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(marketing)/': {\n      id: '/(marketing)/'\n      path: '/'\n      fullPath: '/'\n      preLoaderRoute: typeof marketingIndexRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(marketing)/terms': {\n      id: '/(marketing)/terms'\n      path: '/terms'\n      fullPath: '/terms'\n      preLoaderRoute: typeof marketingTermsRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(marketing)/privacy': {\n      id: '/(marketing)/privacy'\n      path: '/privacy'\n      fullPath: '/privacy'\n      preLoaderRoute: typeof marketingPrivacyRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(auth)/verify-email': {\n      id: '/(auth)/verify-email'\n      path: '/verify-email'\n      fullPath: '/verify-email'\n      preLoaderRoute: typeof authVerifyEmailRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/verify-authentication': {\n      id: '/(auth)/verify-authentication'\n      path: '/verify-authentication'\n      fullPath: '/verify-authentication'\n      preLoaderRoute: typeof authVerifyAuthenticationRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/reset-password': {\n      id: '/(auth)/reset-password'\n      path: '/reset-password'\n      fullPath: '/reset-password'\n      preLoaderRoute: typeof authResetPasswordRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/register': {\n      id: '/(auth)/register'\n      path: '/register'\n      fullPath: '/register'\n      preLoaderRoute: typeof authRegisterRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/login': {\n      id: '/(auth)/login'\n      path: '/login'\n      fullPath: '/login'\n      preLoaderRoute: typeof authLoginRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/forgot-password': {\n      id: '/(auth)/forgot-password'\n      path: '/forgot-password'\n      fullPath: '/forgot-password'\n      preLoaderRoute: typeof authForgotPasswordRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(oauth)/dashboard': {\n      id: '/(oauth)/dashboard'\n      path: '/dashboard'\n      fullPath: '/dashboard'\n      preLoaderRoute: typeof oauthDashboardRouteRouteImport\n      parentRoute: typeof oauthRouteRoute\n    }\n    '/(oauth)/auth': {\n      id: '/(oauth)/auth'\n      path: '/auth'\n      fullPath: '/auth'\n      preLoaderRoute: typeof oauthAuthRouteRouteImport\n      parentRoute: typeof oauthRouteRoute\n    }\n    '/(marketing)/blog': {\n      id: '/(marketing)/blog'\n      path: '/blog'\n      fullPath: '/blog'\n      preLoaderRoute: typeof marketingBlogRouteRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(marketing)/blog/': {\n      id: '/(marketing)/blog/'\n      path: '/'\n      fullPath: '/blog/'\n      preLoaderRoute: typeof marketingBlogIndexRouteImport\n      parentRoute: typeof marketingBlogRouteRoute\n    }\n    '/(dashboard)/dashboard/': {\n      id: '/(dashboard)/dashboard/'\n      path: '/dashboard'\n      fullPath: '/dashboard/'\n      preLoaderRoute: typeof dashboardDashboardIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(oauth)/oauth/consent': {\n      id: '/(oauth)/oauth/consent'\n      path: '/oauth/consent'\n      fullPath: '/oauth/consent'\n      preLoaderRoute: typeof oauthOauthConsentRouteImport\n      parentRoute: typeof oauthRouteRoute\n    }\n    '/(oauth)/auth/outlook': {\n      id: '/(oauth)/auth/outlook'\n      path: '/outlook'\n      fullPath: '/auth/outlook'\n      preLoaderRoute: typeof oauthAuthOutlookRouteImport\n      parentRoute: typeof oauthAuthRouteRoute\n    }\n    '/(oauth)/auth/google': {\n      id: '/(oauth)/auth/google'\n      path: '/google'\n      fullPath: '/auth/google'\n      preLoaderRoute: typeof oauthAuthGoogleRouteImport\n      parentRoute: typeof oauthAuthRouteRoute\n    }\n    '/(marketing)/blog/$slug': {\n      id: '/(marketing)/blog/$slug'\n      path: '/$slug'\n      fullPath: '/blog/$slug'\n      preLoaderRoute: typeof marketingBlogSlugRouteImport\n      parentRoute: typeof marketingBlogRouteRoute\n    }\n    '/(dashboard)/dashboard/report': {\n      id: '/(dashboard)/dashboard/report'\n      path: '/dashboard/report'\n      fullPath: '/dashboard/report'\n      preLoaderRoute: typeof dashboardDashboardReportRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/ical': {\n      id: '/(dashboard)/dashboard/ical'\n      path: '/dashboard/ical'\n      fullPath: '/dashboard/ical'\n      preLoaderRoute: typeof dashboardDashboardIcalRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/feedback': {\n      id: '/(dashboard)/dashboard/feedback'\n      path: '/dashboard/feedback'\n      fullPath: '/dashboard/feedback'\n      preLoaderRoute: typeof dashboardDashboardFeedbackRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(oauth)/dashboard/connect': {\n      id: '/(oauth)/dashboard/connect'\n      path: '/connect'\n      fullPath: '/dashboard/connect'\n      preLoaderRoute: typeof oauthDashboardConnectRouteRouteImport\n      parentRoute: typeof oauthDashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/settings': {\n      id: '/(dashboard)/dashboard/settings'\n      path: '/dashboard/settings'\n      fullPath: '/dashboard/settings'\n      preLoaderRoute: typeof dashboardDashboardSettingsRouteRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/connect': {\n      id: '/(dashboard)/dashboard/connect'\n      path: '/dashboard/connect'\n      fullPath: '/dashboard/connect'\n      preLoaderRoute: typeof dashboardDashboardConnectRouteRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts': {\n      id: '/(dashboard)/dashboard/accounts'\n      path: '/dashboard/accounts'\n      fullPath: '/dashboard/accounts'\n      preLoaderRoute: typeof dashboardDashboardAccountsRouteRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/upgrade/': {\n      id: '/(dashboard)/dashboard/upgrade/'\n      path: '/dashboard/upgrade'\n      fullPath: '/dashboard/upgrade/'\n      preLoaderRoute: typeof dashboardDashboardUpgradeIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/': {\n      id: '/(dashboard)/dashboard/settings/'\n      path: '/'\n      fullPath: '/dashboard/settings/'\n      preLoaderRoute: typeof dashboardDashboardSettingsIndexRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/integrations/': {\n      id: '/(dashboard)/dashboard/integrations/'\n      path: '/dashboard/integrations'\n      fullPath: '/dashboard/integrations/'\n      preLoaderRoute: typeof dashboardDashboardIntegrationsIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/events/': {\n      id: '/(dashboard)/dashboard/events/'\n      path: '/dashboard/events'\n      fullPath: '/dashboard/events/'\n      preLoaderRoute: typeof dashboardDashboardEventsIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/connect/': {\n      id: '/(dashboard)/dashboard/connect/'\n      path: '/'\n      fullPath: '/dashboard/connect/'\n      preLoaderRoute: typeof dashboardDashboardConnectIndexRouteImport\n      parentRoute: typeof dashboardDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/outlook': {\n      id: '/(oauth)/dashboard/connect/outlook'\n      path: '/outlook'\n      fullPath: '/dashboard/connect/outlook'\n      preLoaderRoute: typeof oauthDashboardConnectOutlookRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/microsoft': {\n      id: '/(oauth)/dashboard/connect/microsoft'\n      path: '/microsoft'\n      fullPath: '/dashboard/connect/microsoft'\n      preLoaderRoute: typeof oauthDashboardConnectMicrosoftRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/ics-file': {\n      id: '/(oauth)/dashboard/connect/ics-file'\n      path: '/ics-file'\n      fullPath: '/dashboard/connect/ics-file'\n      preLoaderRoute: typeof oauthDashboardConnectIcsFileRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/ical-link': {\n      id: '/(oauth)/dashboard/connect/ical-link'\n      path: '/ical-link'\n      fullPath: '/dashboard/connect/ical-link'\n      preLoaderRoute: typeof oauthDashboardConnectIcalLinkRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/google': {\n      id: '/(oauth)/dashboard/connect/google'\n      path: '/google'\n      fullPath: '/dashboard/connect/google'\n      preLoaderRoute: typeof oauthDashboardConnectGoogleRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/fastmail': {\n      id: '/(oauth)/dashboard/connect/fastmail'\n      path: '/fastmail'\n      fullPath: '/dashboard/connect/fastmail'\n      preLoaderRoute: typeof oauthDashboardConnectFastmailRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/caldav': {\n      id: '/(oauth)/dashboard/connect/caldav'\n      path: '/caldav'\n      fullPath: '/dashboard/connect/caldav'\n      preLoaderRoute: typeof oauthDashboardConnectCaldavRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/apple': {\n      id: '/(oauth)/dashboard/connect/apple'\n      path: '/apple'\n      fullPath: '/dashboard/connect/apple'\n      preLoaderRoute: typeof oauthDashboardConnectAppleRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/passkeys': {\n      id: '/(dashboard)/dashboard/settings/passkeys'\n      path: '/passkeys'\n      fullPath: '/dashboard/settings/passkeys'\n      preLoaderRoute: typeof dashboardDashboardSettingsPasskeysRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/change-password': {\n      id: '/(dashboard)/dashboard/settings/change-password'\n      path: '/change-password'\n      fullPath: '/dashboard/settings/change-password'\n      preLoaderRoute: typeof dashboardDashboardSettingsChangePasswordRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/api-tokens': {\n      id: '/(dashboard)/dashboard/settings/api-tokens'\n      path: '/api-tokens'\n      fullPath: '/dashboard/settings/api-tokens'\n      preLoaderRoute: typeof dashboardDashboardSettingsApiTokensRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts/$accountId/': {\n      id: '/(dashboard)/dashboard/accounts/$accountId/'\n      path: '/$accountId'\n      fullPath: '/dashboard/accounts/$accountId/'\n      preLoaderRoute: typeof dashboardDashboardAccountsAccountIdIndexRouteImport\n      parentRoute: typeof dashboardDashboardAccountsRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts/$accountId/setup': {\n      id: '/(dashboard)/dashboard/accounts/$accountId/setup'\n      path: '/$accountId/setup'\n      fullPath: '/dashboard/accounts/$accountId/setup'\n      preLoaderRoute: typeof dashboardDashboardAccountsAccountIdSetupRouteImport\n      parentRoute: typeof dashboardDashboardAccountsRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts/$accountId/$calendarId': {\n      id: '/(dashboard)/dashboard/accounts/$accountId/$calendarId'\n      path: '/$accountId/$calendarId'\n      fullPath: '/dashboard/accounts/$accountId/$calendarId'\n      preLoaderRoute: typeof dashboardDashboardAccountsAccountIdCalendarIdRouteImport\n      parentRoute: typeof dashboardDashboardAccountsRouteRoute\n    }\n  }\n}\n\ninterface authRouteRouteChildren {\n  authForgotPasswordRoute: typeof authForgotPasswordRoute\n  authLoginRoute: typeof authLoginRoute\n  authRegisterRoute: typeof authRegisterRoute\n  authResetPasswordRoute: typeof authResetPasswordRoute\n  authVerifyAuthenticationRoute: typeof authVerifyAuthenticationRoute\n  authVerifyEmailRoute: typeof authVerifyEmailRoute\n}\n\nconst authRouteRouteChildren: authRouteRouteChildren = {\n  authForgotPasswordRoute: authForgotPasswordRoute,\n  authLoginRoute: authLoginRoute,\n  authRegisterRoute: authRegisterRoute,\n  authResetPasswordRoute: authResetPasswordRoute,\n  authVerifyAuthenticationRoute: authVerifyAuthenticationRoute,\n  authVerifyEmailRoute: authVerifyEmailRoute,\n}\n\nconst authRouteRouteWithChildren = authRouteRoute._addFileChildren(\n  authRouteRouteChildren,\n)\n\ninterface dashboardDashboardAccountsRouteRouteChildren {\n  dashboardDashboardAccountsAccountIdCalendarIdRoute: typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  dashboardDashboardAccountsAccountIdSetupRoute: typeof dashboardDashboardAccountsAccountIdSetupRoute\n  dashboardDashboardAccountsAccountIdIndexRoute: typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\n\nconst dashboardDashboardAccountsRouteRouteChildren: dashboardDashboardAccountsRouteRouteChildren =\n  {\n    dashboardDashboardAccountsAccountIdCalendarIdRoute:\n      dashboardDashboardAccountsAccountIdCalendarIdRoute,\n    dashboardDashboardAccountsAccountIdSetupRoute:\n      dashboardDashboardAccountsAccountIdSetupRoute,\n    dashboardDashboardAccountsAccountIdIndexRoute:\n      dashboardDashboardAccountsAccountIdIndexRoute,\n  }\n\nconst dashboardDashboardAccountsRouteRouteWithChildren =\n  dashboardDashboardAccountsRouteRoute._addFileChildren(\n    dashboardDashboardAccountsRouteRouteChildren,\n  )\n\ninterface dashboardDashboardConnectRouteRouteChildren {\n  dashboardDashboardConnectIndexRoute: typeof dashboardDashboardConnectIndexRoute\n}\n\nconst dashboardDashboardConnectRouteRouteChildren: dashboardDashboardConnectRouteRouteChildren =\n  {\n    dashboardDashboardConnectIndexRoute: dashboardDashboardConnectIndexRoute,\n  }\n\nconst dashboardDashboardConnectRouteRouteWithChildren =\n  dashboardDashboardConnectRouteRoute._addFileChildren(\n    dashboardDashboardConnectRouteRouteChildren,\n  )\n\ninterface dashboardDashboardSettingsRouteRouteChildren {\n  dashboardDashboardSettingsApiTokensRoute: typeof dashboardDashboardSettingsApiTokensRoute\n  dashboardDashboardSettingsChangePasswordRoute: typeof dashboardDashboardSettingsChangePasswordRoute\n  dashboardDashboardSettingsPasskeysRoute: typeof dashboardDashboardSettingsPasskeysRoute\n  dashboardDashboardSettingsIndexRoute: typeof dashboardDashboardSettingsIndexRoute\n}\n\nconst dashboardDashboardSettingsRouteRouteChildren: dashboardDashboardSettingsRouteRouteChildren =\n  {\n    dashboardDashboardSettingsApiTokensRoute:\n      dashboardDashboardSettingsApiTokensRoute,\n    dashboardDashboardSettingsChangePasswordRoute:\n      dashboardDashboardSettingsChangePasswordRoute,\n    dashboardDashboardSettingsPasskeysRoute:\n      dashboardDashboardSettingsPasskeysRoute,\n    dashboardDashboardSettingsIndexRoute: dashboardDashboardSettingsIndexRoute,\n  }\n\nconst dashboardDashboardSettingsRouteRouteWithChildren =\n  dashboardDashboardSettingsRouteRoute._addFileChildren(\n    dashboardDashboardSettingsRouteRouteChildren,\n  )\n\ninterface dashboardRouteRouteChildren {\n  dashboardDashboardAccountsRouteRoute: typeof dashboardDashboardAccountsRouteRouteWithChildren\n  dashboardDashboardConnectRouteRoute: typeof dashboardDashboardConnectRouteRouteWithChildren\n  dashboardDashboardSettingsRouteRoute: typeof dashboardDashboardSettingsRouteRouteWithChildren\n  dashboardDashboardFeedbackRoute: typeof dashboardDashboardFeedbackRoute\n  dashboardDashboardIcalRoute: typeof dashboardDashboardIcalRoute\n  dashboardDashboardReportRoute: typeof dashboardDashboardReportRoute\n  dashboardDashboardIndexRoute: typeof dashboardDashboardIndexRoute\n  dashboardDashboardEventsIndexRoute: typeof dashboardDashboardEventsIndexRoute\n  dashboardDashboardIntegrationsIndexRoute: typeof dashboardDashboardIntegrationsIndexRoute\n  dashboardDashboardUpgradeIndexRoute: typeof dashboardDashboardUpgradeIndexRoute\n}\n\nconst dashboardRouteRouteChildren: dashboardRouteRouteChildren = {\n  dashboardDashboardAccountsRouteRoute:\n    dashboardDashboardAccountsRouteRouteWithChildren,\n  dashboardDashboardConnectRouteRoute:\n    dashboardDashboardConnectRouteRouteWithChildren,\n  dashboardDashboardSettingsRouteRoute:\n    dashboardDashboardSettingsRouteRouteWithChildren,\n  dashboardDashboardFeedbackRoute: dashboardDashboardFeedbackRoute,\n  dashboardDashboardIcalRoute: dashboardDashboardIcalRoute,\n  dashboardDashboardReportRoute: dashboardDashboardReportRoute,\n  dashboardDashboardIndexRoute: dashboardDashboardIndexRoute,\n  dashboardDashboardEventsIndexRoute: dashboardDashboardEventsIndexRoute,\n  dashboardDashboardIntegrationsIndexRoute:\n    dashboardDashboardIntegrationsIndexRoute,\n  dashboardDashboardUpgradeIndexRoute: dashboardDashboardUpgradeIndexRoute,\n}\n\nconst dashboardRouteRouteWithChildren = dashboardRouteRoute._addFileChildren(\n  dashboardRouteRouteChildren,\n)\n\ninterface marketingBlogRouteRouteChildren {\n  marketingBlogSlugRoute: typeof marketingBlogSlugRoute\n  marketingBlogIndexRoute: typeof marketingBlogIndexRoute\n}\n\nconst marketingBlogRouteRouteChildren: marketingBlogRouteRouteChildren = {\n  marketingBlogSlugRoute: marketingBlogSlugRoute,\n  marketingBlogIndexRoute: marketingBlogIndexRoute,\n}\n\nconst marketingBlogRouteRouteWithChildren =\n  marketingBlogRouteRoute._addFileChildren(marketingBlogRouteRouteChildren)\n\ninterface marketingRouteRouteChildren {\n  marketingBlogRouteRoute: typeof marketingBlogRouteRouteWithChildren\n  marketingPrivacyRoute: typeof marketingPrivacyRoute\n  marketingTermsRoute: typeof marketingTermsRoute\n  marketingIndexRoute: typeof marketingIndexRoute\n}\n\nconst marketingRouteRouteChildren: marketingRouteRouteChildren = {\n  marketingBlogRouteRoute: marketingBlogRouteRouteWithChildren,\n  marketingPrivacyRoute: marketingPrivacyRoute,\n  marketingTermsRoute: marketingTermsRoute,\n  marketingIndexRoute: marketingIndexRoute,\n}\n\nconst marketingRouteRouteWithChildren = marketingRouteRoute._addFileChildren(\n  marketingRouteRouteChildren,\n)\n\ninterface oauthAuthRouteRouteChildren {\n  oauthAuthGoogleRoute: typeof oauthAuthGoogleRoute\n  oauthAuthOutlookRoute: typeof oauthAuthOutlookRoute\n}\n\nconst oauthAuthRouteRouteChildren: oauthAuthRouteRouteChildren = {\n  oauthAuthGoogleRoute: oauthAuthGoogleRoute,\n  oauthAuthOutlookRoute: oauthAuthOutlookRoute,\n}\n\nconst oauthAuthRouteRouteWithChildren = oauthAuthRouteRoute._addFileChildren(\n  oauthAuthRouteRouteChildren,\n)\n\ninterface oauthDashboardConnectRouteRouteChildren {\n  oauthDashboardConnectAppleRoute: typeof oauthDashboardConnectAppleRoute\n  oauthDashboardConnectCaldavRoute: typeof oauthDashboardConnectCaldavRoute\n  oauthDashboardConnectFastmailRoute: typeof oauthDashboardConnectFastmailRoute\n  oauthDashboardConnectGoogleRoute: typeof oauthDashboardConnectGoogleRoute\n  oauthDashboardConnectIcalLinkRoute: typeof oauthDashboardConnectIcalLinkRoute\n  oauthDashboardConnectIcsFileRoute: typeof oauthDashboardConnectIcsFileRoute\n  oauthDashboardConnectMicrosoftRoute: typeof oauthDashboardConnectMicrosoftRoute\n  oauthDashboardConnectOutlookRoute: typeof oauthDashboardConnectOutlookRoute\n}\n\nconst oauthDashboardConnectRouteRouteChildren: oauthDashboardConnectRouteRouteChildren =\n  {\n    oauthDashboardConnectAppleRoute: oauthDashboardConnectAppleRoute,\n    oauthDashboardConnectCaldavRoute: oauthDashboardConnectCaldavRoute,\n    oauthDashboardConnectFastmailRoute: oauthDashboardConnectFastmailRoute,\n    oauthDashboardConnectGoogleRoute: oauthDashboardConnectGoogleRoute,\n    oauthDashboardConnectIcalLinkRoute: oauthDashboardConnectIcalLinkRoute,\n    oauthDashboardConnectIcsFileRoute: oauthDashboardConnectIcsFileRoute,\n    oauthDashboardConnectMicrosoftRoute: oauthDashboardConnectMicrosoftRoute,\n    oauthDashboardConnectOutlookRoute: oauthDashboardConnectOutlookRoute,\n  }\n\nconst oauthDashboardConnectRouteRouteWithChildren =\n  oauthDashboardConnectRouteRoute._addFileChildren(\n    oauthDashboardConnectRouteRouteChildren,\n  )\n\ninterface oauthDashboardRouteRouteChildren {\n  oauthDashboardConnectRouteRoute: typeof oauthDashboardConnectRouteRouteWithChildren\n}\n\nconst oauthDashboardRouteRouteChildren: oauthDashboardRouteRouteChildren = {\n  oauthDashboardConnectRouteRoute: oauthDashboardConnectRouteRouteWithChildren,\n}\n\nconst oauthDashboardRouteRouteWithChildren =\n  oauthDashboardRouteRoute._addFileChildren(oauthDashboardRouteRouteChildren)\n\ninterface oauthRouteRouteChildren {\n  oauthAuthRouteRoute: typeof oauthAuthRouteRouteWithChildren\n  oauthDashboardRouteRoute: typeof oauthDashboardRouteRouteWithChildren\n  oauthOauthConsentRoute: typeof oauthOauthConsentRoute\n}\n\nconst oauthRouteRouteChildren: oauthRouteRouteChildren = {\n  oauthAuthRouteRoute: oauthAuthRouteRouteWithChildren,\n  oauthDashboardRouteRoute: oauthDashboardRouteRouteWithChildren,\n  oauthOauthConsentRoute: oauthOauthConsentRoute,\n}\n\nconst oauthRouteRouteWithChildren = oauthRouteRoute._addFileChildren(\n  oauthRouteRouteChildren,\n)\n\nconst rootRouteChildren: RootRouteChildren = {\n  authRouteRoute: authRouteRouteWithChildren,\n  dashboardRouteRoute: dashboardRouteRouteWithChildren,\n  marketingRouteRoute: marketingRouteRouteWithChildren,\n  oauthRouteRoute: oauthRouteRouteWithChildren,\n}\nexport const routeTree = rootRouteImport\n  ._addFileChildren(rootRouteChildren)\n  ._addFileTypes<FileRouteTypes>()\n"
  },
  {
    "path": "applications/web/src/hooks/use-animated-swr.ts",
    "content": "import { useState } from \"react\";\nimport useSWR from \"swr\";\nimport type { SWRConfiguration, SWRResponse } from \"swr\";\n\ninterface AnimatedSWRResponse<T> extends SWRResponse<T> {\n  shouldAnimate: boolean;\n}\n\nfunction useAnimatedSWR<T>(key: string, config?: SWRConfiguration<T>): AnimatedSWRResponse<T> {\n  const response = useSWR<T>(key, config);\n  const [shouldAnimate] = useState(response.isLoading);\n\n  return { ...response, shouldAnimate };\n}\n\nexport { useAnimatedSWR };\n"
  },
  {
    "path": "applications/web/src/hooks/use-api-tokens.ts",
    "content": "import useSWR from \"swr\";\nimport { fetcher, apiFetch } from \"@/lib/fetcher\";\n\nexport interface ApiToken {\n  id: string;\n  name: string;\n  tokenPrefix: string;\n  lastUsedAt: string | null;\n  expiresAt: string | null;\n  createdAt: string;\n}\n\nexport interface CreatedApiToken {\n  id: string;\n  name: string;\n  token: string;\n  tokenPrefix: string;\n  createdAt: string;\n}\n\nexport const useApiTokens = () => {\n  return useSWR<ApiToken[]>(\"/api/tokens\", fetcher);\n};\n\nexport const createApiToken = async (name: string): Promise<CreatedApiToken> => {\n  const response = await apiFetch(\"/api/tokens\", {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({ name }),\n  });\n  return response.json();\n};\n\nexport const deleteApiToken = async (id: string): Promise<void> => {\n  await apiFetch(`/api/tokens/${id}`, { method: \"DELETE\" });\n};\n"
  },
  {
    "path": "applications/web/src/hooks/use-entitlements.ts",
    "content": "import { useMemo, useCallback } from \"react\";\nimport useSWR, { useSWRConfig } from \"swr\";\nimport { fetcher } from \"@/lib/fetcher\";\nimport { useSubscription } from \"./use-subscription\";\n\ninterface EntitlementLimit {\n  current: number;\n  limit: number | null;\n}\n\ninterface Entitlements {\n  plan: \"free\" | \"pro\";\n  accounts: EntitlementLimit;\n  mappings: EntitlementLimit;\n  canCustomizeIcalFeed: boolean;\n  canUseEventFilters: boolean;\n}\n\nconst USAGE_CACHE_KEY = \"/api/entitlements\";\n\nfunction useEntitlements() {\n  const { data: subscription } = useSubscription();\n  const {\n    data: serverEntitlements,\n    mutate,\n    isLoading,\n    error,\n  } = useSWR<Entitlements>(USAGE_CACHE_KEY, fetcher);\n\n  const data = useMemo<Entitlements | undefined>(() => {\n    if (serverEntitlements) {\n      return serverEntitlements;\n    }\n\n    if (subscription?.plan !== \"pro\") {\n      return undefined;\n    }\n\n    return {\n      plan: \"pro\",\n      accounts: { current: 0, limit: null },\n      mappings: { current: 0, limit: null },\n      canCustomizeIcalFeed: true,\n      canUseEventFilters: true,\n    };\n  }, [serverEntitlements, subscription?.plan]);\n\n  return { data, mutate, isLoading, error };\n}\n\nfunction useMutateEntitlements() {\n  const { mutate } = useSWRConfig();\n\n  const adjustMappingCount = useCallback(\n    (delta: number) => {\n      mutate<Entitlements>(\n        USAGE_CACHE_KEY,\n        (current) => {\n          if (!current) return current;\n\n          const nextCount = Math.max(0, current.mappings.current + delta);\n          return {\n            ...current,\n            mappings: {\n              ...current.mappings,\n              current: nextCount,\n            },\n          };\n        },\n        { revalidate: false },\n      );\n    },\n    [mutate],\n  );\n\n  const revalidateEntitlements = useCallback(() => {\n    return mutate(USAGE_CACHE_KEY);\n  }, [mutate]);\n\n  return { adjustMappingCount, revalidateEntitlements };\n}\n\nfunction canAddMore(entitlement: EntitlementLimit | undefined): boolean {\n  if (!entitlement) return true;\n  if (entitlement.limit === null) return true;\n  return entitlement.current < entitlement.limit;\n}\n\nexport { useEntitlements, useMutateEntitlements, canAddMore, USAGE_CACHE_KEY };\nexport type { Entitlements, EntitlementLimit };\n"
  },
  {
    "path": "applications/web/src/hooks/use-events.ts",
    "content": "import useSWRInfinite from \"swr/infinite\";\nimport { fetcher } from \"@/lib/fetcher\";\nimport { useStartOfToday } from \"./use-start-of-today\";\nimport type { ApiEvent } from \"@/types/api\";\n\nexport interface CalendarEvent {\n  id: string;\n  startTime: Date;\n  endTime: Date;\n  calendarId: string;\n  calendarName: string;\n  calendarProvider: string;\n  calendarUrl: string;\n}\n\nconst DAYS_PER_PAGE = 7;\n\nconst buildEventsUrl = (from: Date, to: Date): string => {\n  const url = new URL(\"/api/events\", globalThis.location.origin);\n  url.searchParams.set(\"from\", from.toISOString());\n  url.searchParams.set(\"to\", to.toISOString());\n  return url.toString();\n};\n\nconst fetchEvents = async (url: string): Promise<CalendarEvent[]> => {\n  const data = await fetcher<ApiEvent[]>(url);\n  return data.map((event) => ({\n    id: event.id,\n    startTime: new Date(event.startTime),\n    endTime: new Date(event.endTime),\n    calendarId: event.calendarId,\n    calendarName: event.calendarName,\n    calendarProvider: event.calendarProvider,\n    calendarUrl: event.calendarUrl,\n  }));\n};\n\nexport function useEvents() {\n  const todayStart = useStartOfToday();\n\n  const getKey = (pageIndex: number): string => {\n    const from = new Date(todayStart);\n    from.setDate(from.getDate() + pageIndex * DAYS_PER_PAGE);\n\n    const to = new Date(from);\n    to.setDate(to.getDate() + DAYS_PER_PAGE - 1);\n    to.setHours(23, 59, 59, 999);\n\n    return buildEventsUrl(from, to);\n  };\n\n  const { data, error, setSize, isLoading, isValidating } = useSWRInfinite(\n    getKey,\n    fetchEvents,\n    { revalidateFirstPage: false, keepPreviousData: true },\n  );\n\n  const events = resolveEvents(data);\n  const hasMore = !data || (data[data.length - 1]?.length ?? 0) > 0;\n\n  const loadMore = () => {\n    void setSize((prev) => prev + 1);\n  };\n\n  return { events, error, isLoading, isValidating, hasMore, loadMore };\n}\n\nconst deduplicateEvents = (events: CalendarEvent[]): CalendarEvent[] => [\n  ...new Map(events.map((event) => [event.id, event])).values(),\n];\n\nfunction resolveEvents(data: CalendarEvent[][] | undefined): CalendarEvent[] {\n  if (data) return deduplicateEvents(data.flat());\n  return [];\n}\n"
  },
  {
    "path": "applications/web/src/hooks/use-has-password.ts",
    "content": "import useSWR from \"swr\";\nimport { authClient } from \"@/lib/auth-client\";\n\nconst fetchHasPassword = async (): Promise<boolean> => {\n  const { data } = await authClient.listAccounts();\n  return data?.some((account) => account.providerId === \"credential\") ?? false;\n};\n\nexport const useHasPassword = () => useSWR(\"auth/has-password\", fetchHasPassword);\n"
  },
  {
    "path": "applications/web/src/hooks/use-passkeys.ts",
    "content": "import useSWR from \"swr\";\nimport { authClient } from \"@/lib/auth-client\";\n\nexport interface Passkey {\n  id: string;\n  name?: string | null;\n  createdAt: Date;\n}\n\nconst fetchPasskeys = async (): Promise<Passkey[]> => {\n  const { data } = await authClient.passkey.listUserPasskeys();\n  return data ?? [];\n};\n\nexport const addPasskey = async () => {\n  await authClient.passkey.addPasskey();\n};\n\nexport const deletePasskey = async (id: string) => {\n  await authClient.passkey.deletePasskey({ id });\n};\n\nexport const usePasskeys = (enabled = true) => {\n  return useSWR(enabled ? \"auth/passkeys\" : null, fetchPasskeys);\n};\n"
  },
  {
    "path": "applications/web/src/hooks/use-session.ts",
    "content": "import useSWR from \"swr\";\nimport { authClient } from \"@/lib/auth-client\";\n\nexport interface SessionUser {\n  id: string;\n  email?: string;\n  name?: string;\n  username?: string;\n}\n\nconst fetchSession = async (): Promise<SessionUser | null> => {\n  const { data } = await authClient.getSession();\n  if (!data?.user) return null;\n  const username =\n    \"username\" in data.user && typeof data.user.username === \"string\"\n      ? data.user.username\n      : undefined;\n  const { id, email, name } = data.user;\n  return { id, email, name, username };\n};\n\nexport function useSession() {\n  const { data: user, error, isLoading } = useSWR(\"auth/session\", fetchSession, {\n    revalidateOnFocus: false,\n    revalidateOnReconnect: true,\n  });\n  return { user: user ?? null, error, isLoading };\n}\n"
  },
  {
    "path": "applications/web/src/hooks/use-start-of-today.ts",
    "content": "import { useEffect, useState } from \"react\";\n\nfunction resolveStartOfToday(): Date {\n  const date = new Date();\n  date.setHours(0, 0, 0, 0);\n  return date;\n}\n\nfunction resolveMillisecondsUntilTomorrow(): number {\n  const now = new Date();\n  const tomorrow = new Date(now);\n  tomorrow.setHours(24, 0, 0, 0);\n  return tomorrow.getTime() - now.getTime();\n}\n\nexport function useStartOfToday(): Date {\n  const [todayStart, setTodayStart] = useState(resolveStartOfToday);\n\n  useEffect(() => {\n    const timeoutId = globalThis.setTimeout(() => {\n      setTodayStart(resolveStartOfToday());\n    }, resolveMillisecondsUntilTomorrow());\n\n    return () => {\n      globalThis.clearTimeout(timeoutId);\n    };\n  }, [todayStart]);\n\n  return todayStart;\n}\n"
  },
  {
    "path": "applications/web/src/hooks/use-subscription.ts",
    "content": "import useSWR from \"swr\";\nimport { fetcher } from \"@/lib/fetcher\";\nimport { getCommercialMode } from \"@/config/commercial\";\n\nexport interface SubscriptionState {\n  plan: \"free\" | \"pro\";\n  interval: \"month\" | \"year\" | null;\n}\n\ninterface ActiveSubscription {\n  recurringInterval?: \"month\" | \"year\" | null;\n}\n\ninterface CustomerStateResponse {\n  activeSubscriptions?: ActiveSubscription[] | null;\n}\n\nconst SUBSCRIPTION_STATE_CACHE_KEY = \"customer-state\";\n\nexport const resolveSubscriptionState = (\n  customerState: CustomerStateResponse,\n): SubscriptionState => {\n  const [active] = customerState.activeSubscriptions ?? [];\n\n  if (!active) {\n    return { plan: \"free\", interval: null };\n  }\n\n  return {\n    plan: \"pro\",\n    interval: active.recurringInterval === \"year\" ? \"year\" : \"month\",\n  };\n};\n\nconst fetchSubscriptionState = async (): Promise<SubscriptionState> => {\n  const data = await fetcher<CustomerStateResponse>(\"/api/auth/customer/state\");\n  return resolveSubscriptionState(data);\n};\n\ninterface UseSubscriptionOptions {\n  enabled?: boolean;\n  fallbackData?: SubscriptionState;\n}\n\nconst resolveSubscriptionCacheKey = (enabled: boolean): string | null => {\n  if (!enabled) {\n    return null;\n  }\n\n  return SUBSCRIPTION_STATE_CACHE_KEY;\n};\n\nexport function useSubscription(options: UseSubscriptionOptions = {}) {\n  const { enabled = getCommercialMode(), fallbackData } = options;\n  const cacheKey = resolveSubscriptionCacheKey(enabled);\n  const { data, error, isLoading, mutate } = useSWR(\n    cacheKey,\n    fetchSubscriptionState,\n    { fallbackData },\n  );\n  return { data, error, isLoading, mutate };\n}\n\nexport async function fetchSubscriptionStateWithApi(\n  fetchApi: <T>(path: string, init?: RequestInit) => Promise<T>,\n): Promise<SubscriptionState> {\n  const data = await fetchApi<CustomerStateResponse>(\"/api/auth/customer/state\");\n  return resolveSubscriptionState(data);\n}\n\nexport { fetchSubscriptionState };\n"
  },
  {
    "path": "applications/web/src/illustrations/how-it-works-configure.tsx",
    "content": "function MiniToggle({ checked }: { checked: boolean }) {\n  return (\n    <div\n      className={`w-8 h-4.5 rounded-full shrink-0 flex items-center p-0.5 ${\n        checked ? \"bg-foreground\" : \"bg-interactive-border\"\n      }`}\n    >\n      <div\n        className={`size-3.5 rounded-full bg-background-elevated ${\n          checked ? \"ml-auto\" : \"\"\n        }`}\n      />\n    </div>\n  );\n}\n\nconst SETTINGS = [\n  { label: \"Sync Event Name\", checked: true },\n  { label: \"Sync Event Description\", checked: true },\n  { label: \"Sync Event Location\", checked: false },\n  { label: \"Sync Event Status\", checked: true },\n  { label: \"Sync Attendees\", checked: false },\n];\n\nfunction MiniSettingsRow({ label, checked }: { label: string; checked: boolean }) {\n  return (\n    <div className=\"flex items-center gap-3 px-4 py-3 rounded-xl\">\n      <span className=\"text-sm tracking-tight text-foreground-muted whitespace-nowrap\">{label}</span>\n      <div className=\"ml-auto\">\n        <MiniToggle checked={checked} />\n      </div>\n    </div>\n  );\n}\n\nexport function HowItWorksConfigure() {\n  return (\n    <div className=\"w-full max-w-xs\">\n      <div className=\"rounded-2xl border border-border-elevated bg-background-elevated shadow-xs p-0.5\">\n        {SETTINGS.map(({ label, checked }) => (\n          <MiniSettingsRow key={label} label={label} checked={checked} />\n        ))}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/illustrations/how-it-works-connect.tsx",
    "content": "import ArrowRightIcon from \"lucide-react/dist/esm/icons/arrow-right\";\n\nconst PROVIDERS = [\n  { icon: \"/integrations/icon-google-calendar.svg\", label: \"Connect Google Calendar\" },\n  { icon: \"/integrations/icon-outlook.svg\", label: \"Connect Outlook\" },\n  { icon: \"/integrations/icon-icloud.svg\", label: \"Connect iCloud\" },\n  { icon: \"/integrations/icon-fastmail.svg\", label: \"Connect Fastmail\" },\n  { icon: \"/integrations/icon-microsoft-365.svg\", label: \"Connect Microsoft 365\" },\n];\n\nfunction MiniMenuRow({ icon, label }: { icon: string; label: string }) {\n  return (\n    <div className=\"flex items-center gap-3 px-4 py-3 rounded-xl\">\n      <img src={icon} alt=\"\" width={18} height={18} className=\"shrink-0\" />\n      <span className=\"text-sm tracking-tight text-foreground-muted whitespace-nowrap\">{label}</span>\n      <ArrowRightIcon size={14} className=\"ml-auto shrink-0 text-foreground-muted\" />\n    </div>\n  );\n}\n\nexport function HowItWorksConnect() {\n  return (\n    <div className=\"w-full max-w-xs\">\n      <div className=\"rounded-2xl border border-border-elevated bg-background-elevated shadow-xs p-0.5\">\n        {PROVIDERS.map(({ icon, label }) => (\n          <MiniMenuRow key={label} icon={icon} label={label} />\n        ))}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/illustrations/how-it-works-sync.tsx",
    "content": "import { useEffect, useRef, useState } from \"react\";\nimport { LazyMotion } from \"motion/react\";\nimport * as m from \"motion/react-m\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nconst PLACEHOLDER_COUNTS = [3, 5, 2, 7, 4, 6, 1, 8, 3, 5, 4, 6, 2, 7, 5];\nconst GRAPH_HEIGHT = 128;\nconst MIN_BAR_HEIGHT = 16;\nconst GROWTH_SPACE = GRAPH_HEIGHT - MIN_BAR_HEIGHT;\nconst MAX_COUNT = Math.max(...PLACEHOLDER_COUNTS);\nconst TOTAL_EVENTS = PLACEHOLDER_COUNTS.reduce((sum, count) => sum + count, 0);\nconst TODAY_INDEX = 7;\n\ntype Period = \"past\" | \"today\" | \"future\";\n\nconst barStyle = tv({\n  base: \"flex-1 rounded-[0.625rem]\",\n  variants: {\n    period: {\n      past: \"bg-background-hover border border-border-elevated\",\n      today: \"bg-emerald-400 border-transparent\",\n      future:\n        \"bg-emerald-400 border-emerald-500 bg-[repeating-linear-gradient(-45deg,transparent_0_4px,var(--color-illustration-stripe)_4px_8px)]\",\n    },\n  },\n});\n\nfunction resolvePeriod(index: number): Period {\n  if (index < TODAY_INDEX) return \"past\";\n  if (index === TODAY_INDEX) return \"today\";\n  return \"future\";\n}\n\nfunction resolveBarHeight(count: number): number {\n  return MIN_BAR_HEIGHT + (count / MAX_COUNT) * GROWTH_SPACE;\n}\n\ninterface BarData {\n  height: number;\n  period: Period;\n  index: number;\n}\n\nconst BARS: BarData[] = PLACEHOLDER_COUNTS.map((count, index) => ({\n  height: resolveBarHeight(count),\n  period: resolvePeriod(index),\n  index,\n}));\n\nconst BAR_TRANSITION_EASE = [0.4, 0, 0.2, 1] as const;\n\nexport function HowItWorksSync() {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [visible, setVisible] = useState(false);\n\n  useEffect(() => {\n    const element = containerRef.current;\n    if (!element) return;\n\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        if (entry?.isIntersecting) {\n          setVisible(true);\n          observer.disconnect();\n        }\n      },\n      { rootMargin: \"-64px\" },\n    );\n\n    observer.observe(element);\n    return () => observer.disconnect();\n  }, []);\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <div ref={containerRef} className=\"w-full px-6 sm:px-0 sm:pl-6 sm:-mr-8 flex flex-col gap-4\">\n        <div className=\"flex items-center justify-between\">\n          <Text size=\"sm\" tone=\"muted\" className=\"tabular-nums\">\n            {TOTAL_EVENTS} events\n          </Text>\n          <Text size=\"sm\" tone=\"muted\" className=\"tabular-nums\">\n            This Week\n          </Text>\n        </div>\n        <div className=\"flex gap-0.5\" style={{ height: GRAPH_HEIGHT }}>\n          {BARS.map((bar) => (\n            <div key={bar.index} className=\"flex-1 flex items-end\">\n              <m.div\n                className={barStyle({ period: bar.period, className: \"w-full\" })}\n                initial={{ height: MIN_BAR_HEIGHT }}\n                animate={{ height: visible ? bar.height : MIN_BAR_HEIGHT }}\n                transition={{\n                  duration: 0.3,\n                  ease: BAR_TRANSITION_EASE,\n                  delay: bar.index * 0.02,\n                }}\n              />\n            </div>\n          ))}\n        </div>\n      </div>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/illustrations/marketing-illustration-contributors.tsx",
    "content": "import { AnimatePresence, LazyMotion } from \"motion/react\";\nimport * as m from \"motion/react-m\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport { memo, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport CONTRIBUTORS from \"@/features/marketing/contributors.json\";\n\nconst VISIBLE_COUNT = 3;\nconst ROTATE_INTERVAL_MS = 1800;\nconst FALLBACK_ROW_HEIGHT = 36;\n\nconst SLOT_STYLES = [\n  { scale: 0.92, opacity: 0.35, filter: \"blur(1px)\" },\n  { scale: 1, opacity: 1, filter: \"blur(0px)\" },\n  { scale: 0.92, opacity: 0.35, filter: \"blur(1px)\" },\n];\n\nconst TRANSITION = {\n  type: \"tween\" as const,\n  duration: 0.5,\n  ease: [0.4, 0, 0.2, 1] as const,\n};\n\ntype Contributor = (typeof CONTRIBUTORS)[number];\n\nconst ContributorRow = memo(function ContributorRow({\n  contributor,\n}: {\n  contributor: Contributor;\n}) {\n  return (\n    <div className=\"flex items-center gap-3 px-4 py-1.5\">\n      <img\n        src={contributor.avatarUrl}\n        alt=\"\"\n        width={24}\n        height={24}\n        className=\"size-6 rounded-full shrink-0 bg-interactive-border\"\n        loading=\"lazy\"\n        style={{ aspectRatio: \"1 / 1\" }}\n      />\n      <Text as=\"span\" size=\"xs\" className=\"truncate shrink-0\">\n        {contributor.username}\n      </Text>\n      <Text as=\"span\" size=\"xs\" className=\"truncate ml-auto\">\n        {contributor.name}\n      </Text>\n    </div>\n  );\n});\n\nexport function MarketingIllustrationContributors() {\n  const [offset, setOffset] = useState(0);\n  const [rowHeight, setRowHeight] = useState(FALLBACK_ROW_HEIGHT);\n  const measureRef = useRef<HTMLDivElement>(null);\n\n  useLayoutEffect(() => {\n    if (measureRef.current) {\n      setRowHeight(measureRef.current.getBoundingClientRect().height);\n    }\n  }, []);\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setOffset((previous) => (previous + 1) % CONTRIBUTORS.length);\n    }, ROTATE_INTERVAL_MS);\n\n    return () => clearInterval(interval);\n  }, []);\n\n  const visibleContributors = Array.from({ length: VISIBLE_COUNT }, (_, slot) => {\n    const contributorIndex = (offset + slot) % CONTRIBUTORS.length;\n    return { contributor: CONTRIBUTORS[contributorIndex], slot, contributorIndex };\n  });\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <div className=\"relative w-full pt-3 px-4\" style={{ height: rowHeight * VISIBLE_COUNT + 12 }}>\n        <div ref={measureRef} className=\"absolute inset-x-0 invisible pointer-events-none\" aria-hidden=\"true\">\n          <ContributorRow contributor={CONTRIBUTORS[0]} />\n        </div>\n        <AnimatePresence initial={false}>\n          {visibleContributors.map(({ contributor, slot, contributorIndex }) => (\n            <m.div\n              key={contributorIndex}\n              initial={{\n                y: rowHeight * (VISIBLE_COUNT - 1) + (rowHeight * 2) / 3,\n                opacity: 0,\n                scale: 0.7,\n                filter: \"blur(3px)\",\n              }}\n              animate={{\n                y: rowHeight * slot,\n                opacity: SLOT_STYLES[slot].opacity,\n                scale: SLOT_STYLES[slot].scale,\n                filter: SLOT_STYLES[slot].filter,\n              }}\n              exit={{\n                y: -(rowHeight * 2) / 3,\n                opacity: 0,\n                scale: 0.7,\n                filter: \"blur(3px)\",\n              }}\n              transition={TRANSITION}\n              className=\"absolute inset-x-0\"\n            >\n              <ContributorRow contributor={contributor} />\n            </m.div>\n          ))}\n        </AnimatePresence>\n      </div>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/illustrations/marketing-illustration-providers.tsx",
    "content": "import { providerIcons } from \"@/lib/providers\";\n\nconst ORBIT_ITEMS = Object.entries(providerIcons).reverse();\nconst ORBIT_DURATION = 12;\nconst RADIUS = 110;\nconst ICON_SIZE = 32;\n\nexport function MarketingIllustrationProviders() {\n  return (\n    <div className=\"relative w-full overflow-hidden px-4\" style={{ height: 120 }}>\n      <div\n        className=\"absolute left-1/2 -translate-x-1/2\"\n        style={{ width: 220, height: 220, top: 40 }}\n      >\n        <div\n          className=\"relative w-full h-full\"\n          style={{ animation: `spin ${ORBIT_DURATION}s linear infinite` }}\n        >\n          {ORBIT_ITEMS.map(([provider, iconPath], index) => {\n            const angle = (360 / ORBIT_ITEMS.length) * index;\n            const radians = (angle * Math.PI) / 180;\n            const posX = Math.cos(radians) * RADIUS;\n            const posY = Math.sin(radians) * RADIUS;\n\n            return (\n              <div\n                key={provider}\n                className=\"absolute left-1/2 top-1/2\"\n                style={{ transform: `translate(${posX}px, ${posY}px)` }}\n              >\n                <div\n                  className=\"-translate-x-1/2 -translate-y-1/2\"\n                  style={{ animation: `counter-spin ${ORBIT_DURATION}s linear infinite` }}\n                >\n                  <img\n                    src={iconPath}\n                    alt=\"\"\n                    width={ICON_SIZE}\n                    height={ICON_SIZE}\n                    style={{ width: ICON_SIZE, height: ICON_SIZE }}\n                  />\n                </div>\n              </div>\n            );\n          })}\n        </div>\n      </div>\n      <div className=\"absolute inset-x-0 bottom-0 h-12 bg-linear-to-t from-background to-transparent pointer-events-none\" />\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/illustrations/marketing-illustration-setup.tsx",
    "content": "import { AnimatePresence, LazyMotion } from \"motion/react\";\nimport * as m from \"motion/react-m\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport { useEffect, useRef, useState } from \"react\";\n\ntype Phase = \"button\" | \"cursor\" | \"click\" | \"syncing\" | \"done\";\n\nconst PHASE_DURATIONS: Record<Phase, number> = {\n  button: 600,\n  cursor: 800,\n  click: 400,\n  syncing: 1800,\n  done: 800,\n};\n\nconst PHASE_ORDER: Phase[] = [\"button\", \"cursor\", \"click\", \"syncing\", \"done\"];\n\nconst TRANSITION_ENTER = {\n  type: \"tween\" as const,\n  duration: 0.35,\n  ease: [0.4, 0, 0.2, 1] as const,\n};\n\nconst INITIAL = { opacity: 0, scale: 0.9, filter: \"blur(4px)\" };\nconst ANIMATE = { opacity: 1, scale: 1, filter: \"blur(0px)\" };\nconst EXIT = { opacity: 0, scale: 0.9, filter: \"blur(4px)\" };\n\nconst CIRCLE_RADIUS = 16;\nconst CIRCLE_CIRCUMFERENCE = 2 * Math.PI * CIRCLE_RADIUS;\n\nfunction SyncButton({ pressed }: { pressed: boolean }) {\n  return (\n    <div\n      className={`flex items-center gap-1 rounded-xl tracking-tighter border px-4 py-2.5 font-medium shadow-xs transition-transform duration-100 ${\n        pressed\n          ? \"scale-95 border-transparent bg-foreground-hover text-background\"\n          : \"border-transparent bg-foreground text-background\"\n      }`}\n    >\n      Sync Calendars\n    </div>\n  );\n}\n\nfunction SyncCircle() {\n  const circleRef = useRef<SVGCircleElement>(null);\n\n  useEffect(() => {\n    const frame = requestAnimationFrame(() => {\n      if (circleRef.current) {\n        circleRef.current.style.strokeDashoffset = \"0\";\n      }\n    });\n    return () => cancelAnimationFrame(frame);\n  }, []);\n\n  return (\n    <svg aria-hidden=\"true\" viewBox=\"0 0 40 40\" className=\"-rotate-90 size-10\">\n      <circle\n        cx={20}\n        cy={20}\n        r={CIRCLE_RADIUS}\n        fill=\"none\"\n        strokeWidth={2.5}\n        className=\"stroke-background-hover\"\n      />\n      <circle\n        ref={circleRef}\n        cx={20}\n        cy={20}\n        r={CIRCLE_RADIUS}\n        fill=\"none\"\n        strokeWidth={2.5}\n        strokeLinecap=\"round\"\n        className=\"stroke-emerald-400\"\n        style={{\n          strokeDasharray: CIRCLE_CIRCUMFERENCE,\n          strokeDashoffset: CIRCLE_CIRCUMFERENCE,\n          transition: \"stroke-dashoffset 1.4s ease-out\",\n        }}\n      />\n    </svg>\n  );\n}\n\nexport function MarketingIllustrationSetup() {\n  const [phaseIndex, setPhaseIndex] = useState(0);\n  const phase = PHASE_ORDER[phaseIndex];\n\n  useEffect(() => {\n    const timeout = setTimeout(() => {\n      setPhaseIndex((previous) => (previous + 1) % PHASE_ORDER.length);\n    }, PHASE_DURATIONS[phase]);\n\n    return () => clearTimeout(timeout);\n  }, [phase, phaseIndex]);\n\n  const showButton = phase === \"button\" || phase === \"cursor\" || phase === \"click\";\n  const showCursor = phase === \"cursor\" || phase === \"click\";\n  const showCircle = phase === \"syncing\" || phase === \"done\";\n  const pressed = phase === \"click\";\n\n  return (\n    <LazyMotion features={loadMotionFeatures}>\n      <div className=\"relative w-full flex items-center justify-center px-4 h-full\">\n        <AnimatePresence mode=\"wait\">\n          {showButton && (\n            <m.div\n              key=\"button\"\n              initial={INITIAL}\n              animate={ANIMATE}\n              exit={EXIT}\n              transition={TRANSITION_ENTER}\n              className=\"relative\"\n            >\n              <SyncButton pressed={pressed} />\n              <AnimatePresence>\n                {showCursor && (\n                  <m.div\n                    initial={{ opacity: 0, x: 24, y: 24, scale: 0.8, filter: \"blur(2px)\" }}\n                    animate={{ opacity: 1, x: 8, y: 12, scale: 1, filter: \"blur(0px)\" }}\n                    exit={{ opacity: 0, scale: 0.8, filter: \"blur(2px)\" }}\n                    transition={TRANSITION_ENTER}\n                    className=\"absolute bottom-0 right-0 drop-shadow-sm\"\n                  >\n                    <img src=\"/assets/cursor-pointer.svg\" alt=\"\" width={28} height={28} />\n                  </m.div>\n                )}\n              </AnimatePresence>\n            </m.div>\n          )}\n\n          {showCircle && (\n            <m.div\n              key=\"circle\"\n              initial={INITIAL}\n              animate={ANIMATE}\n              exit={EXIT}\n              transition={TRANSITION_ENTER}\n            >\n              <SyncCircle />\n            </m.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </LazyMotion>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/illustrations/marketing-illustration-sync.tsx",
    "content": "const R = 12;\nconst PATH_UPPER = `M -10,20 L ${210 - R},20 Q 210,20 210,${20 + R} L 210,${50 - R} Q 210,50 ${210 + R},50 L 310,50`;\nconst PATH_LOWER = `M -10,80 L ${210 - R},80 Q 210,80 210,${80 - R} L 210,${50 + R} Q 210,50 ${210 + R},50 L 310,50`;\n\nconst ICON_SIZE = 24;\n\nconst PROVIDERS = [\n  { icon: \"/integrations/icon-google-calendar.svg\", x: 100, y: 20 },\n  { icon: \"/integrations/icon-outlook.svg\", x: 100, y: 80 },\n  { icon: \"/integrations/icon-icloud.svg\", x: 260, y: 50 },\n];\n\nexport function MarketingIllustrationSync() {\n  return (\n    <div className=\"w-full flex items-center justify-center\">\n      <svg\n        viewBox=\"0 0 300 100\"\n        className=\"w-full\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <path\n          d={PATH_UPPER}\n          fill=\"none\"\n          className=\"stroke-foreground-disabled\"\n          strokeWidth={1}\n          strokeDasharray=\"4 3\"\n          vectorEffect=\"non-scaling-stroke\"\n        >\n          <animate\n            attributeName=\"stroke-dashoffset\"\n            from=\"7\"\n            to=\"0\"\n            dur=\"0.8s\"\n            repeatCount=\"indefinite\"\n          />\n        </path>\n        <path\n          d={PATH_LOWER}\n          fill=\"none\"\n          className=\"stroke-foreground-disabled\"\n          strokeWidth={1}\n          strokeDasharray=\"4 3\"\n          vectorEffect=\"non-scaling-stroke\"\n        >\n          <animate\n            attributeName=\"stroke-dashoffset\"\n            from=\"7\"\n            to=\"0\"\n            dur=\"0.8s\"\n            repeatCount=\"indefinite\"\n          />\n        </path>\n\n        {PROVIDERS.map(({ icon, x, y }) => (\n          <image\n            key={icon}\n            href={icon}\n            x={x - ICON_SIZE / 2}\n            y={y - ICON_SIZE / 2}\n            width={ICON_SIZE}\n            height={ICON_SIZE}\n          />\n        ))}\n      </svg>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/index.css",
    "content": "@import \"tailwindcss\";\n\n@custom-variant pointer-hover (@media (hover: hover));\n\nhtml {\n  @apply w-full min-h-full bg-background overflow-x-hidden;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\nbody {\n  @apply w-full;\n  height: 100dvh;\n  overflow-y: scroll;\n  overflow-x: hidden;\n}\n\n#root {\n  @apply w-full;\n}\n\nhtml {\n  color-scheme: light;\n}\n\n:root {\n  --ui-foreground: var(--color-neutral-950);\n  --ui-background: var(--color-neutral-50);\n  --ui-background-inverse: var(--ui-foreground);\n  --ui-foreground-inverse: var(--ui-background);\n  --ui-interactive-border: var(--color-neutral-300);\n  --ui-foreground-muted: var(--color-neutral-500);\n  --ui-foreground-disabled: var(--color-neutral-300);\n  --ui-foreground-hover: color-mix(\n    in srgb,\n    var(--ui-foreground),\n    transparent 20%\n  );\n  --ui-illustration-stripe: color-mix(\n    in srgb,\n    var(--ui-foreground),\n    transparent 92%\n  );\n  --ui-foreground-inverse-muted: color-mix(\n    in srgb,\n    var(--ui-foreground-inverse),\n    transparent 40%\n  );\n  --ui-background-elevated: var(--color-white);\n  --ui-border-elevated: var(--color-neutral-200);\n  --ui-background-inverse-hover: var(--color-neutral-800);\n  --ui-background-hover: color-mix(\n    in srgb,\n    var(--ui-foreground),\n    var(--ui-background) 96.125%\n  );\n  --ui-destructive: var(--color-red-700);\n  --ui-destructive-background: var(--color-red-50);\n  --ui-destructive-border: var(--color-red-200);\n  --ui-destructive-background-hover: var(--color-red-100);\n  --ui-ring: var(--color-blue-500);\n  --ui-template: var(--color-purple-600);\n  --ui-template-muted: color-mix(in srgb, var(--ui-template), transparent 50%);\n}\n\n@font-face {\n  font-family: \"Geist Sans\";\n  src: url(\"/assets/fonts/Geist-variable.woff2\") format(\"woff2\");\n  font-weight: 100 900;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Geist Mono\";\n  src: url(\"/assets/fonts/GeistMono-variable.woff2\") format(\"woff2\");\n  font-weight: 100 900;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Lora\";\n  src: url(\"/assets/fonts/Lora-variable.woff2\") format(\"woff2\");\n  font-weight: 100 900;\n  font-display: swap;\n}\n\n@theme {\n  --color-foreground: var(--ui-foreground);\n  --color-background: var(--ui-background);\n  --color-background-inverse: var(--ui-background-inverse);\n  --color-foreground-inverse: var(--ui-foreground-inverse);\n  --color-interactive-border: var(--ui-interactive-border);\n  --color-foreground-muted: var(--ui-foreground-muted);\n  --color-foreground-disabled: var(--ui-foreground-disabled);\n  --color-foreground-hover: var(--ui-foreground-hover);\n  --color-illustration-stripe: var(--ui-illustration-stripe);\n  --color-foreground-inverse-muted: var(--ui-foreground-inverse-muted);\n  --color-background-elevated: var(--ui-background-elevated);\n  --color-border-elevated: var(--ui-border-elevated);\n  --color-background-inverse-hover: var(--ui-background-inverse-hover);\n  --color-background-hover: var(--ui-background-hover);\n  --color-destructive: var(--ui-destructive);\n  --color-destructive-background: var(--ui-destructive-background);\n  --color-destructive-border: var(--ui-destructive-border);\n  --color-destructive-background-hover: var(--ui-destructive-background-hover);\n  --color-ring: var(--ui-ring);\n  --color-template: var(--ui-template);\n  --color-template-muted: var(--ui-template-muted);\n\n  --font-sans: \"Geist Sans\", system-ui, sans-serif;\n  --font-lora: \"Lora\", Georgia, serif;\n  --font-mono: \"Geist Mono\", ui-monospace, monospace;\n\n  --breakpoint-xs: 28rem;\n\n  --animate-shimmer: shimmer 3s linear infinite;\n}\n\n@keyframes shimmer {\n  0% {\n    background-position: 200% 0;\n  }\n  100% {\n    background-position: -100% 0;\n  }\n}\n\n@keyframes spin {\n  to {\n    rotate: 360deg;\n  }\n}\n\n@keyframes counter-spin {\n  to {\n    rotate: -360deg;\n  }\n}\n\n@keyframes sync-progress {\n  0% {\n    stroke-dashoffset: 87.96;\n  }\n  50% {\n    stroke-dashoffset: 0;\n  }\n  100% {\n    stroke-dashoffset: 87.96;\n  }\n}\n\n@media (prefers-color-scheme: dark) {\n  input:-webkit-autofill,\n  input:-webkit-autofill:hover,\n  input:-webkit-autofill:focus {\n    -webkit-text-fill-color: var(--ui-foreground);\n    -webkit-background-clip: text;\n    caret-color: var(--ui-foreground);\n  }\n}\n\n@media (prefers-color-scheme: dark) {\n  html {\n    color-scheme: dark;\n  }\n\n  :root {\n    --ui-foreground: var(--color-neutral-100);\n    --ui-background: var(--color-neutral-950);\n    --ui-background-inverse: var(--ui-foreground);\n    --ui-foreground-inverse: var(--ui-background);\n    --ui-interactive-border: var(--color-neutral-800);\n    --ui-foreground-muted: var(--color-neutral-400);\n    --ui-foreground-disabled: var(--color-neutral-600);\n    --ui-foreground-hover: color-mix(\n      in srgb,\n      var(--ui-foreground),\n      transparent 16%\n    );\n    --ui-illustration-stripe: color-mix(\n      in srgb,\n      var(--ui-foreground),\n      transparent 88%\n    );\n    --ui-foreground-inverse-muted: color-mix(\n      in srgb,\n      var(--ui-foreground-inverse),\n      transparent 40%\n    );\n    --ui-background-elevated: var(--color-neutral-900);\n    --ui-border-elevated: var(--color-neutral-800);\n    --ui-background-inverse-hover: var(--color-neutral-300);\n    --ui-background-hover: color-mix(\n      in srgb,\n      var(--ui-foreground),\n      var(--ui-background) 90%\n    );\n    --ui-destructive: var(--color-red-300);\n    --ui-destructive-background: color-mix(\n      in srgb,\n      var(--color-red-500),\n      transparent 90%\n    );\n    --ui-destructive-border: color-mix(\n      in srgb,\n      var(--color-red-500),\n      transparent 80%\n    );\n    --ui-destructive-background-hover: color-mix(\n      in srgb,\n      var(--color-red-500),\n      transparent 80%\n    );\n    --ui-ring: var(--color-blue-400);\n    --ui-template: var(--color-purple-400);\n    --ui-template-muted: color-mix(\n      in srgb,\n      var(--ui-template),\n      transparent 40%\n    );\n  }\n}\n"
  },
  {
    "path": "applications/web/src/index.d.ts",
    "content": "declare module \"lucide-react/dist/esm/icons/*\" {\n  import type { LucideIcon } from \"lucide-react\";\n  const icon: LucideIcon;\n  export default icon;\n}\n"
  },
  {
    "path": "applications/web/src/lib/analytics.ts",
    "content": "import type { PublicRuntimeConfig } from \"./runtime-config\";\n\nconst CONSENT_COOKIE = \"keeper.analytics_consent\";\nconst CONSENT_MAX_AGE = 60 * 60 * 24 * 182;\n\nfunction resolveConsentState(granted: boolean): \"granted\" | \"denied\" {\n  if (granted) return \"granted\";\n  return \"denied\";\n}\n\nfunction readCookieSource(cookieHeader?: string): string {\n  if (cookieHeader !== undefined) return cookieHeader;\n  if (typeof document === \"undefined\") return \"\";\n  return document.cookie;\n}\n\nfunction readConsentValue(cookieHeader?: string): string | null {\n  const source = readCookieSource(cookieHeader);\n  const prefix = `${CONSENT_COOKIE}=`;\n  const match = source\n    .split(\";\")\n    .map((cookie) => cookie.trim())\n    .find((cookie) => cookie.startsWith(prefix));\n\n  if (!match) return null;\n  return match.slice(prefix.length);\n}\n\nconst updateGoogleConsent = (granted: boolean): void => {\n  const state = resolveConsentState(granted);\n  globalThis.gtag?.(\"consent\", \"update\", {\n    ad_personalization: state,\n    ad_storage: state,\n    ad_user_data: state,\n    analytics_storage: state,\n  });\n};\n\nconst hasAnalyticsConsent = (cookieHeader?: string): boolean =>\n  readConsentValue(cookieHeader) === \"granted\";\n\nconst hasConsentChoice = (cookieHeader?: string): boolean => {\n  const value = readConsentValue(cookieHeader);\n  return value === \"granted\" || value === \"denied\";\n};\n\nfunction resolveEffectiveConsent(gdprApplies: boolean, cookieHeader?: string): boolean {\n  const value = readConsentValue(cookieHeader);\n  if (value === \"granted\") return true;\n  if (value === \"denied\") return false;\n  return !gdprApplies;\n}\n\nconst setAnalyticsConsent = (granted: boolean): void => {\n  const state = resolveConsentState(granted);\n  document.cookie = `${CONSENT_COOKIE}=${state}; path=/; max-age=${CONSENT_MAX_AGE}; samesite=lax`;\n  updateGoogleConsent(granted);\n  globalThis.dispatchEvent(new StorageEvent(\"storage\", { key: CONSENT_COOKIE }));\n};\n\nexport const ANALYTICS_EVENTS = {\n  signup_completed: \"signup_completed\",\n  login_completed: \"login_completed\",\n  password_reset_requested: \"password_reset_requested\",\n  password_reset_completed: \"password_reset_completed\",\n  logout: \"logout\",\n  calendar_connect_started: \"calendar_connect_started\",\n  calendar_renamed: \"calendar_renamed\",\n  destination_toggled: \"destination_toggled\",\n  calendar_setting_toggled: \"calendar_setting_toggled\",\n  calendar_account_deleted: \"calendar_account_deleted\",\n  setup_step_completed: \"setup_step_completed\",\n  setup_skipped: \"setup_skipped\",\n  setup_completed: \"setup_completed\",\n  password_changed: \"password_changed\",\n  passkey_created: \"passkey_created\",\n  passkey_deleted: \"passkey_deleted\",\n  api_token_created: \"api_token_created\",\n  api_token_deleted: \"api_token_deleted\",\n  analytics_consent_changed: \"analytics_consent_changed\",\n  account_deleted: \"account_deleted\",\n  upgrade_billing_toggled: \"upgrade_billing_toggled\",\n  upgrade_started: \"upgrade_started\",\n  plan_managed: \"plan_managed\",\n  feedback_submitted: \"feedback_submitted\",\n  report_submitted: \"report_submitted\",\n  ical_link_copied: \"ical_link_copied\",\n  ical_setting_toggled: \"ical_setting_toggled\",\n  ical_source_toggled: \"ical_source_toggled\",\n  oauth_consent_granted: \"oauth_consent_granted\",\n  oauth_consent_denied: \"oauth_consent_denied\",\n  marketing_cta_clicked: \"marketing_cta_clicked\",\n} satisfies Record<string, string>;\n\ntype EventProperties = Record<string, string | number | boolean>;\n\nconst track = (event: string, properties?: EventProperties): void => {\n  globalThis.visitors?.track(event, properties);\n};\n\ninterface IdentifyProps {\n  id: string;\n  email?: string;\n  name?: string;\n}\n\nconst identify = (\n  user: IdentifyProps,\n  options: { gdprApplies: boolean },\n): void => {\n  if (options.gdprApplies && !hasAnalyticsConsent()) return;\n  globalThis.visitors?.identify(user);\n};\n\ninterface ConversionOptions {\n  value: number | null;\n  currency: string | null;\n  transactionId: string | null;\n}\n\nconst reportPurchaseConversion = (\n  runtimeConfig: PublicRuntimeConfig,\n  options?: ConversionOptions,\n): void => {\n  const { googleAdsConversionLabel, googleAdsId } = runtimeConfig;\n  if (!googleAdsId || !googleAdsConversionLabel) return;\n  globalThis.gtag?.(\"event\", \"conversion\", {\n    send_to: `${googleAdsId}/${googleAdsConversionLabel}`,\n    ...options,\n  });\n};\n\ndeclare global {\n  var visitors:\n    | {\n        identify: (props: IdentifyProps) => void;\n        track: (event: string, properties?: EventProperties) => void;\n      }\n    | undefined;\n  var gtag: ((...args: unknown[]) => void) | undefined;\n}\n\nexport {\n  hasAnalyticsConsent,\n  hasConsentChoice,\n  identify,\n  reportPurchaseConversion,\n  resolveEffectiveConsent,\n  setAnalyticsConsent,\n  track,\n};\n"
  },
  {
    "path": "applications/web/src/lib/auth-capabilities.ts",
    "content": "import { authCapabilitiesSchema } from \"@keeper.sh/data-schemas\";\nimport type { AuthCapabilities } from \"@keeper.sh/data-schemas\";\nimport type { AppJsonFetcher } from \"./router-context\";\n\ntype SocialProviderId = keyof AuthCapabilities[\"socialProviders\"];\n\ninterface CredentialField {\n  autoComplete: string;\n  id: string;\n  label: string;\n  name: string;\n  placeholder: string;\n  type: \"email\" | \"text\";\n}\n\nconst resolveCredentialField = (\n  capabilities: AuthCapabilities,\n): CredentialField => {\n  if (capabilities.credentialMode === \"username\") {\n    return {\n      autoComplete: \"username\",\n      id: \"username\",\n      label: \"Username\",\n      name: \"username\",\n      placeholder: \"johndoe\",\n      type: \"text\",\n    };\n  }\n\n  return {\n    autoComplete: \"email\",\n    id: \"email\",\n    label: \"Email\",\n    name: \"email\",\n    placeholder: \"johndoe+keeper@example.com\",\n    type: \"email\",\n  };\n};\n\nconst getEnabledSocialProviders = (\n  capabilities: AuthCapabilities,\n): SocialProviderId[] => {\n  /**\n   * TODO: Move this to providers, and have it based off\n   * the defined metadata.\n   * @param providerName\n   */\n  const isValidProvider = (providerName: string): providerName is \"google\" | \"microsoft\" => {\n    if (providerName === \"google\") return true;\n    if (providerName === \"microsoft\") return true;\n    return false;\n  }\n\n  const providers: SocialProviderId[] = [];\n  for (const [provider, enabled] of Object.entries(capabilities.socialProviders)) {\n    if (!isValidProvider(provider) || !enabled) continue;\n    providers.push(provider)\n  }\n\n  return providers;\n}\n\nconst supportsPasskeys = (capabilities: AuthCapabilities): boolean =>\n  capabilities.supportsPasskeys;\n\nconst fetchAuthCapabilitiesWithApi = async (\n  fetchApi: AppJsonFetcher,\n): Promise<AuthCapabilities> => {\n  const data = await fetchApi<unknown>(\"/api/auth/capabilities\");\n  return authCapabilitiesSchema.assert(data);\n};\n\nexport {\n  fetchAuthCapabilitiesWithApi,\n  getEnabledSocialProviders,\n  resolveCredentialField,\n  supportsPasskeys,\n};\nexport type { AuthCapabilities, CredentialField, SocialProviderId };\n"
  },
  {
    "path": "applications/web/src/lib/auth-client.ts",
    "content": "import { createAuthClient } from \"better-auth/react\";\nimport { passkeyClient } from \"@better-auth/passkey/client\";\n\nexport const authClient = createAuthClient({\n  fetchOptions: { credentials: \"include\" },\n  plugins: [passkeyClient()],\n});\n"
  },
  {
    "path": "applications/web/src/lib/auth.ts",
    "content": "import { authClient } from \"./auth-client\";\nimport type { AuthCapabilities } from \"./auth-capabilities\";\n\nasync function authPost(url: string, body: Record<string, unknown> = {}): Promise<void> {\n  const response = await fetch(url, {\n    body: JSON.stringify(body),\n    headers: { \"Content-Type\": \"application/json\" },\n    method: \"POST\",\n    credentials: \"include\",\n  });\n  if (!response.ok) {\n    const data = await response.json().catch(() => ({}));\n    throw new Error(data.message ?? \"Request failed\");\n  }\n}\n\nasync function authJsonPost(url: string, body: Record<string, unknown>): Promise<void> {\n  const response = await fetch(url, {\n    body: JSON.stringify(body),\n    headers: { \"Content-Type\": \"application/json\" },\n    method: \"POST\",\n    credentials: \"include\",\n  });\n  if (!response.ok) {\n    const data = await response.json().catch(() => ({}));\n    const message =\n      typeof data === \"object\" && data !== null && \"message\" in data && typeof data.message === \"string\"\n        ? data.message\n        : typeof data === \"object\" && data !== null && \"error\" in data && typeof data.error === \"string\"\n          ? data.error\n          : \"Request failed\";\n    throw new Error(message);\n  }\n}\n\nexport const signInWithCredential = async (\n  credential: string,\n  password: string,\n  capabilities: AuthCapabilities,\n): Promise<void> => {\n  if (capabilities.credentialMode === \"username\") {\n    await authJsonPost(\"/api/auth/username-only/sign-in\", {\n      password,\n      username: credential,\n    });\n    return;\n  }\n\n  const { error } = await authClient.signIn.email({ email: credential, password });\n  if (error) throw new Error(error.message ?? \"Sign in failed\");\n};\n\nexport const signUpWithCredential = async (\n  credential: string,\n  password: string,\n  capabilities: AuthCapabilities,\n  callbackURL = \"/dashboard\",\n): Promise<void> => {\n  if (capabilities.credentialMode === \"username\") {\n    await authJsonPost(\"/api/auth/username-only/sign-up\", {\n      password,\n      username: credential,\n    });\n    return;\n  }\n\n  const { error } = await authClient.signUp.email({\n    callbackURL,\n    email: credential,\n    name: credential.split(\"@\")[0] ?? credential,\n    password,\n  });\n  if (!error) return;\n  if (error.code === \"USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL\") {\n    throw new Error(\"This email is already registered. Please sign in instead.\");\n  }\n  throw new Error(error.message ?? \"Sign up failed\");\n};\n\nexport const signOut = () => authPost(\"/api/auth/sign-out\");\n\nexport const forgotPassword = async (email: string): Promise<void> => {\n  const { error } = await authClient.requestPasswordReset({\n    email,\n    redirectTo: \"/reset-password\",\n  });\n  if (error) throw new Error(error.message ?? \"Failed to send reset email\");\n};\n\nexport const resetPassword = async (token: string, newPassword: string): Promise<void> => {\n  const { error } = await authClient.resetPassword({ newPassword, token });\n  if (error) throw new Error(error.message ?? \"Failed to reset password\");\n};\n\nexport const changePassword = (currentPassword: string, newPassword: string) =>\n  authPost(\"/api/auth/change-password\", { currentPassword, newPassword });\n\nexport const deleteAccount = (password?: string) =>\n  authPost(\"/api/auth/delete-user\", { ...(password && { password }) });\n"
  },
  {
    "path": "applications/web/src/lib/blog-posts.ts",
    "content": "// @ts-expect-error - virtual module provided by plugins/blog.ts\nimport { blogPosts as processedPosts } from \"virtual:blog-posts\";\n\nexport interface BlogPostMetadata {\n  blurb: string;\n  createdAt: string;\n  description: string;\n  slug?: string;\n  tags: string[];\n  title: string;\n  updatedAt: string;\n}\n\nexport interface BlogPost {\n  content: string;\n  metadata: BlogPostMetadata;\n  slug: string;\n}\n\nexport const blogPosts: BlogPost[] = processedPosts;\n\nexport function findBlogPostBySlug(slug: string): BlogPost | undefined {\n  return blogPosts.find((blogPost) => blogPost.slug === slug);\n}\n\nconst monthNames = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n] as const;\n\nexport function formatIsoDate(isoDate: string): string {\n  const [yearPart, monthPart, dayPart] = isoDate.split(\"-\");\n  const monthName = monthNames[Number(monthPart) - 1];\n  return `${monthName} ${Number(dayPart)}, ${yearPart}`;\n}\n"
  },
  {
    "path": "applications/web/src/lib/fetcher.ts",
    "content": "export class HttpError extends Error {\n  constructor(\n    public readonly status: number,\n    public readonly url: string,\n  ) {\n    super(`${status} ${url}`);\n    this.name = \"HttpError\";\n  }\n}\n\nexport async function fetcher<T>(url: string): Promise<T> {\n  const response = await fetch(url, { credentials: \"include\" });\n  if (!response.ok) throw new HttpError(response.status, url);\n  return response.json();\n}\n\nexport async function apiFetch(\n  url: string,\n  options: RequestInit,\n): Promise<Response> {\n  const response = await fetch(url, { credentials: \"include\", ...options });\n  if (!response.ok) throw new HttpError(response.status, url);\n  return response;\n}\n"
  },
  {
    "path": "applications/web/src/lib/mcp-auth-flow.ts",
    "content": "import { type } from \"arktype\";\n\ntype SearchParams = Record<string, unknown>;\ntype StringSearchParams = Record<string, string>;\n\nconst DEFAULT_POST_AUTH_PATH = \"/dashboard\";\n\nconst mcpAuthorizationSearchSchema = type({\n  client_id: \"string > 0\",\n  code_challenge: \"string > 0\",\n  code_challenge_method: \"string > 0\",\n  redirect_uri: \"string > 0\",\n  response_type: \"string > 0\",\n  scope: \"string > 0\",\n  state: \"string > 0\",\n  \"+\": \"delete\",\n});\n\nconst resolvePathWithSearch = (\n  pathname: string,\n  search?: StringSearchParams,\n): string => {\n  if (!search || Object.keys(search).length === 0) {\n    return pathname;\n  }\n\n  const url = new URL(pathname, \"http://placeholder\");\n  url.search = new URLSearchParams(search).toString();\n  return `${url.pathname}${url.search}`;\n};\n\n// SearchParams values may be non-string (e.g. from route search parsing),\n// so we filter to only string entries before forwarding as query params.\nconst toStringSearchParams = (search: SearchParams): StringSearchParams =>\n  Object.fromEntries(\n    Object.entries(search).filter(\n      (entry): entry is [string, string] => typeof entry[1] === \"string\",\n    ),\n  );\n\nconst getMcpAuthorizationSearch = (\n  search: SearchParams,\n): StringSearchParams | null => {\n  const stringParams = toStringSearchParams(search);\n  const result = mcpAuthorizationSearchSchema(stringParams);\n\n  if (result instanceof type.errors) {\n    return null;\n  }\n\n  // Return the full string params (including optional OAuth keys like\n  // prompt, resource) rather than just the validated required subset.\n  return stringParams;\n};\n\nconst resolveClientApiOrigin = (): string => {\n  const configuredApiOrigin = import.meta.env.VITE_API_URL;\n\n  if (typeof configuredApiOrigin === \"string\" && configuredApiOrigin.length > 0) {\n    return configuredApiOrigin;\n  }\n\n  if (typeof window !== \"undefined\") {\n    return window.location.origin;\n  }\n\n  throw new Error(\n    \"Unable to resolve API origin: VITE_API_URL is not configured and window is undefined\",\n  );\n};\n\nconst resolvePostAuthRedirect = ({\n  apiOrigin,\n  defaultPath = DEFAULT_POST_AUTH_PATH,\n  search,\n}: {\n  apiOrigin: string;\n  defaultPath?: string;\n  search: SearchParams;\n}): string => {\n  const mcpAuthorizationSearch = getMcpAuthorizationSearch(search);\n\n  if (!mcpAuthorizationSearch) {\n    return defaultPath;\n  }\n\n  const authorizeUrl = new URL(\"/api/auth/oauth2/authorize\", apiOrigin);\n  authorizeUrl.search = new URLSearchParams(mcpAuthorizationSearch).toString();\n\n  return authorizeUrl.toString();\n};\n\nconst resolveClientPostAuthRedirect = (\n  search?: SearchParams | null,\n  defaultPath = DEFAULT_POST_AUTH_PATH,\n): string => {\n  if (!search) {\n    return defaultPath;\n  }\n\n  const apiOrigin = resolveClientApiOrigin();\n\n  return resolvePostAuthRedirect({\n    apiOrigin,\n    defaultPath,\n    search,\n  });\n};\n\nexport {\n  getMcpAuthorizationSearch,\n  resolvePathWithSearch,\n  resolveClientPostAuthRedirect,\n  resolvePostAuthRedirect,\n  toStringSearchParams,\n};\nexport type { SearchParams, StringSearchParams };\n"
  },
  {
    "path": "applications/web/src/lib/motion-features.ts",
    "content": "export const loadMotionFeatures = () =>\n  import(\"motion/react\").then((mod) => mod.domMin);\n"
  },
  {
    "path": "applications/web/src/lib/page-metadata.ts",
    "content": "const monthYearFormatter = new Intl.DateTimeFormat(\"en-US\", {\n  month: \"long\",\n  year: \"numeric\",\n  timeZone: \"UTC\",\n});\n\nexport function formatMonthYear(isoDate: string): string {\n  return monthYearFormatter.format(new Date(isoDate));\n}\n\nexport interface PageMetadata {\n  path: string;\n  updatedAt: string;\n}\n\nexport const privacyPageMetadata: PageMetadata = {\n  path: \"/privacy\",\n  updatedAt: \"2025-12-01\",\n};\n\nexport const termsPageMetadata: PageMetadata = {\n  path: \"/terms\",\n  updatedAt: \"2025-12-01\",\n};\n\n"
  },
  {
    "path": "applications/web/src/lib/pluralize.ts",
    "content": "export function pluralize(count: number, singular: string, plural: string = `${singular}s`): string {\n  if (count === 1) return `${count} ${singular}`;\n  return `${count.toLocaleString()} ${plural}`;\n}\n"
  },
  {
    "path": "applications/web/src/lib/providers.ts",
    "content": "export const providerIcons: Record<string, string> = {\n  google: \"/integrations/icon-google-calendar.svg\",\n  outlook: \"/integrations/icon-outlook.svg\",\n  icloud: \"/integrations/icon-icloud.svg\",\n  fastmail: \"/integrations/icon-fastmail.svg\",\n  \"microsoft-365\": \"/integrations/icon-microsoft-365.svg\",\n  nextcloud: \"/integrations/icon-nextcloud.svg\",\n  radicale: \"/integrations/icon-radicale.svg\",\n};\n"
  },
  {
    "path": "applications/web/src/lib/route-access-guards.ts",
    "content": "export type RedirectTarget = \"/dashboard\" | \"/login\";\n\nexport type SubscriptionPlan = \"free\" | \"pro\";\n\nexport const resolveDashboardRedirect = (\n  hasSession: boolean,\n): RedirectTarget | null => {\n  if (!hasSession) {\n    return \"/login\";\n  }\n\n  return null;\n};\n\nexport const resolveAuthRedirect = (\n  hasSession: boolean,\n): RedirectTarget | null => {\n  if (hasSession) {\n    return \"/dashboard\";\n  }\n\n  return null;\n};\n\nexport const resolveUpgradeRedirect = (\n  hasSession: boolean,\n  plan: SubscriptionPlan | null,\n): RedirectTarget | null => {\n  if (!hasSession) {\n    return \"/login\";\n  }\n\n  if (plan === \"pro\") {\n    return \"/dashboard\";\n  }\n\n  return null;\n};\n"
  },
  {
    "path": "applications/web/src/lib/router-context.ts",
    "content": "import type { PublicRuntimeConfig } from \"./runtime-config\";\n\nexport interface AppAuthContext {\n  hasSession: () => boolean;\n}\n\nexport type AppJsonFetcher = <T>(path: string, init?: RequestInit) => Promise<T>;\n\nexport interface ViteScript {\n  src?: string;\n  content?: string;\n}\n\nexport interface ViteAssets {\n  stylesheets: string[];\n  inlineStyles: string[];\n  modulePreloads: string[];\n  headScripts: ViteScript[];\n  bodyScripts: ViteScript[];\n}\n\nexport interface AppRouterContext {\n  auth: AppAuthContext;\n  fetchApi: AppJsonFetcher;\n  fetchWeb: AppJsonFetcher;\n  runtimeConfig: PublicRuntimeConfig;\n  viteAssets: ViteAssets | null;\n}\n"
  },
  {
    "path": "applications/web/src/lib/runtime-config.ts",
    "content": "import { GDPR_COUNTRIES } from \"@/config/gdpr\";\n\ninterface PublicRuntimeConfig {\n  commercialMode: boolean;\n  gdprApplies: boolean;\n  googleAdsConversionLabel: string | null;\n  googleAdsId: string | null;\n  polarProMonthlyProductId: string | null;\n  polarProYearlyProductId: string | null;\n  visitorsNowToken: string | null;\n}\n\ninterface RuntimeConfigSource {\n  commercialMode?: boolean | null;\n  gdprApplies?: boolean | null;\n  googleAdsConversionLabel?: string | null;\n  googleAdsId?: string | null;\n  polarProMonthlyProductId?: string | null;\n  polarProYearlyProductId?: string | null;\n  visitorsNowToken?: string | null;\n}\n\nconst normalizeOptionalValue = (value: string | null | undefined): string | null => {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  return value.length > 0 ? value : null;\n};\n\ninterface ServerRuntimeConfigOptions {\n  environment: Record<string, string | undefined>;\n  countryCode?: string | null;\n}\n\nconst getServerPublicRuntimeConfig = (\n  options: ServerRuntimeConfigOptions,\n): PublicRuntimeConfig => {\n  const { environment, countryCode } = options;\n\n  return {\n    commercialMode: environment.COMMERCIAL_MODE === \"true\",\n    gdprApplies: environment.ENV === \"development\" || (typeof countryCode === \"string\" && GDPR_COUNTRIES.has(countryCode)),\n    googleAdsConversionLabel: normalizeOptionalValue(\n      environment.VITE_GOOGLE_ADS_CONVERSION_LABEL,\n    ),\n    googleAdsId: normalizeOptionalValue(environment.VITE_GOOGLE_ADS_ID),\n    polarProMonthlyProductId: normalizeOptionalValue(environment.POLAR_PRO_MONTHLY_PRODUCT_ID),\n    polarProYearlyProductId: normalizeOptionalValue(environment.POLAR_PRO_YEARLY_PRODUCT_ID),\n    visitorsNowToken: normalizeOptionalValue(environment.VITE_VISITORS_NOW_TOKEN),\n  };\n};\n\nconst getWindowPublicRuntimeConfig = (): RuntimeConfigSource => {\n  if (typeof window === \"undefined\") {\n    return {};\n  }\n\n  return window.__KEEPER_RUNTIME_CONFIG__ ?? {};\n};\n\nconst resolvePublicRuntimeConfig = (source: RuntimeConfigSource): PublicRuntimeConfig => ({\n  commercialMode: source.commercialMode === true,\n  gdprApplies: source.gdprApplies === true,\n  googleAdsConversionLabel: normalizeOptionalValue(source.googleAdsConversionLabel),\n  googleAdsId: normalizeOptionalValue(source.googleAdsId),\n  polarProMonthlyProductId: normalizeOptionalValue(source.polarProMonthlyProductId),\n  polarProYearlyProductId: normalizeOptionalValue(source.polarProYearlyProductId),\n  visitorsNowToken: normalizeOptionalValue(source.visitorsNowToken),\n});\n\nconst getPublicRuntimeConfig = (): PublicRuntimeConfig => resolvePublicRuntimeConfig(\n  getWindowPublicRuntimeConfig(),\n);\n\nconst serializePublicRuntimeConfig = (config: PublicRuntimeConfig): string =>\n  JSON.stringify(config)\n    .replace(/</g, \"\\\\u003C\")\n    .replace(/>/g, \"\\\\u003E\")\n    .replace(/&/g, \"\\\\u0026\");\n\ndeclare global {\n  interface Window {\n    __KEEPER_RUNTIME_CONFIG__?: RuntimeConfigSource;\n  }\n}\n\nexport {\n  getPublicRuntimeConfig,\n  getServerPublicRuntimeConfig,\n  resolvePublicRuntimeConfig,\n  serializePublicRuntimeConfig,\n};\nexport type { PublicRuntimeConfig, RuntimeConfigSource };\n"
  },
  {
    "path": "applications/web/src/lib/seo.ts",
    "content": "const SITE_URL = \"https://keeper.sh\";\nconst SITE_NAME = \"Keeper.sh\";\n\nexport function canonicalUrl(path: string): string {\n  return `${SITE_URL}${path}`;\n}\n\nexport function jsonLdScript(data: Record<string, unknown>) {\n  return { type: \"application/ld+json\", children: JSON.stringify(data) };\n}\n\nexport function seoMeta({\n  title,\n  description,\n  path,\n  type = \"website\",\n  brandPosition = \"after\",\n}: {\n  title: string;\n  description: string;\n  path: string;\n  type?: string;\n  brandPosition?: \"before\" | \"after\";\n}) {\n  const fullTitle = brandPosition === \"before\"\n    ? `${SITE_NAME} — ${title}`\n    : `${title} · ${SITE_NAME}`;\n  return [\n    { title: fullTitle },\n    { content: description, name: \"description\" },\n    { content: type, property: \"og:type\" },\n    { content: title, property: \"og:title\" },\n    { content: description, property: \"og:description\" },\n    { content: canonicalUrl(path), property: \"og:url\" },\n    { content: SITE_NAME, property: \"og:site_name\" },\n    { content: `${SITE_URL}/open-graph.png`, property: \"og:image\" },\n    { content: \"1200\", property: \"og:image:width\" },\n    { content: \"630\", property: \"og:image:height\" },\n    { content: \"summary_large_image\", name: \"twitter:card\" },\n    { content: title, name: \"twitter:title\" },\n    { content: description, name: \"twitter:description\" },\n    { content: `${SITE_URL}/open-graph.png`, name: \"twitter:image\" },\n  ];\n}\n\nexport const organizationSchema = {\n  \"@context\": \"https://schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Organization\",\n      \"@id\": `${SITE_URL}/#organization`,\n      name: SITE_NAME,\n      url: SITE_URL,\n      logo: {\n        \"@type\": \"ImageObject\",\n        url: `${SITE_URL}/512x512-on-light.png`,\n        width: 512,\n        height: 512,\n      },\n      sameAs: [\"https://github.com/ridafkih/keeper.sh\"],\n    },\n    {\n      \"@type\": \"WebSite\",\n      \"@id\": `${SITE_URL}/#website`,\n      name: SITE_NAME,\n      url: SITE_URL,\n      publisher: { \"@id\": `${SITE_URL}/#organization` },\n    },\n  ],\n};\n\nexport function breadcrumbSchema(\n  items: Array<{ name: string; path: string }>,\n) {\n  return {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"BreadcrumbList\",\n    itemListElement: items.map((item, index) => ({\n      \"@type\": \"ListItem\",\n      position: index + 1,\n      name: item.name,\n      item: canonicalUrl(item.path),\n    })),\n  };\n}\n\nexport function webPageSchema(name: string, description: string, path: string) {\n  return {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"WebPage\",\n    \"@id\": `${canonicalUrl(path)}/#webpage`,\n    name,\n    description,\n    url: canonicalUrl(path),\n    isPartOf: { \"@id\": `${SITE_URL}/#website` },\n    publisher: { \"@id\": `${SITE_URL}/#organization` },\n  };\n}\n\nexport function softwareApplicationSchema() {\n  return {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"SoftwareApplication\",\n    \"@id\": `${SITE_URL}/#software`,\n    name: SITE_NAME,\n    description:\n      \"Open-source calendar event syncing tool. Synchronize events between your personal, work, business and school calendars.\",\n    url: SITE_URL,\n    image: `${SITE_URL}/open-graph.png`,\n    applicationCategory: \"BusinessApplication\",\n    operatingSystem: \"Web\",\n    offers: [\n      {\n        \"@type\": \"Offer\",\n        name: \"Free\",\n        price: \"0\",\n        priceCurrency: \"USD\",\n        description:\n          \"For users that just want to get basic calendar syncing up and running.\",\n      },\n      {\n        \"@type\": \"Offer\",\n        name: \"Pro\",\n        price: \"5.00\",\n        priceCurrency: \"USD\",\n        priceSpecification: {\n          \"@type\": \"UnitPriceSpecification\",\n          price: \"5.00\",\n          priceCurrency: \"USD\",\n          billingDuration: \"P1M\",\n        },\n        description:\n          \"For power users who want minutely syncs and unlimited calendars.\",\n      },\n    ],\n    provider: { \"@id\": `${SITE_URL}/#organization` },\n  };\n}\n\nexport function collectionPageSchema(posts: Array<{ slug: string; metadata: { title: string } }>) {\n  return {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"CollectionPage\",\n    \"@id\": `${SITE_URL}/blog/#collectionpage`,\n    name: \"Blog\",\n    url: canonicalUrl(\"/blog\"),\n    isPartOf: { \"@id\": `${SITE_URL}/#website` },\n    mainEntity: {\n      \"@type\": \"ItemList\",\n      itemListElement: posts.map((post, index) => ({\n        \"@type\": \"ListItem\",\n        position: index + 1,\n        url: canonicalUrl(`/blog/${post.slug}`),\n        name: post.metadata.title,\n      })),\n    },\n  };\n}\n\nexport const authorPersonSchema = {\n  \"@type\": \"Person\",\n  \"@id\": `${SITE_URL}/#author`,\n  name: \"Rida F'kih\",\n  url: \"https://rida.dev\",\n  sameAs: [\"https://github.com/ridafkih\"],\n};\n\nexport function blogPostingSchema(post: {\n  title: string;\n  description: string;\n  slug: string;\n  createdAt: string;\n  updatedAt: string;\n  tags: string[];\n}) {\n  const url = canonicalUrl(`/blog/${post.slug}`);\n  return {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"BlogPosting\",\n    \"@id\": `${url}/#blogposting`,\n    headline: post.title,\n    description: post.description,\n    image: `${SITE_URL}/open-graph.png`,\n    url,\n    datePublished: post.createdAt,\n    dateModified: post.updatedAt,\n    keywords: post.tags,\n    author: authorPersonSchema,\n    publisher: { \"@id\": `${SITE_URL}/#organization` },\n    isPartOf: { \"@id\": `${SITE_URL}/#website` },\n    mainEntityOfPage: { \"@type\": \"WebPage\", \"@id\": url },\n  };\n}\n"
  },
  {
    "path": "applications/web/src/lib/serialized-mutate.ts",
    "content": "type ErrorHandler = (error: unknown) => void;\n\ninterface QueuedPatch {\n  patch: Record<string, unknown>;\n  flush: (mergedPatch: Record<string, unknown>) => Promise<unknown>;\n  onError: ErrorHandler;\n}\n\nconst activePatchMutations = new Set<string>();\nconst patchQueue = new Map<string, QueuedPatch>();\n\nfunction runFlush(\n  promise: Promise<unknown>,\n  onError: ErrorHandler,\n  cleanup: () => void,\n) {\n  promise\n    .catch(onError)\n    .finally(cleanup);\n}\n\nfunction drainPatchQueue(key: string) {\n  const pending = patchQueue.get(key);\n  if (!pending) return;\n  patchQueue.delete(key);\n\n  activePatchMutations.add(key);\n  runFlush(\n    pending.flush({ ...pending.patch }),\n    pending.onError,\n    () => {\n      activePatchMutations.delete(key);\n      drainPatchQueue(key);\n    },\n  );\n}\n\nexport function serializedPatch(\n  key: string,\n  patch: Record<string, unknown>,\n  flush: (mergedPatch: Record<string, unknown>) => Promise<unknown>,\n  onError?: ErrorHandler,\n) {\n  const handleError = onError ?? defaultOnError;\n\n  if (activePatchMutations.has(key)) {\n    const existing = patchQueue.get(key);\n\n    if (existing) {\n      Object.assign(existing.patch, patch);\n      existing.flush = flush;\n      existing.onError = handleError;\n      return;\n    }\n\n    patchQueue.set(key, { patch: { ...patch }, flush, onError: handleError });\n    return;\n  }\n\n  activePatchMutations.add(key);\n  runFlush(\n    flush(patch),\n    handleError,\n    () => {\n      activePatchMutations.delete(key);\n      drainPatchQueue(key);\n    },\n  );\n}\n\ninterface QueuedCall {\n  callback: () => Promise<unknown>;\n  onError: ErrorHandler;\n}\n\nconst activeCallMutations = new Set<string>();\nconst callQueue = new Map<string, QueuedCall>();\n\nfunction drainCallQueue(key: string) {\n  const pending = callQueue.get(key);\n  if (!pending) return;\n  callQueue.delete(key);\n\n  activeCallMutations.add(key);\n  runFlush(\n    pending.callback(),\n    pending.onError,\n    () => {\n      activeCallMutations.delete(key);\n      drainCallQueue(key);\n    },\n  );\n}\n\nexport function serializedCall(\n  key: string,\n  callback: () => Promise<unknown>,\n  onError?: ErrorHandler,\n) {\n  const handleError = onError ?? defaultOnError;\n\n  if (activeCallMutations.has(key)) {\n    callQueue.set(key, { callback, onError: handleError });\n    return;\n  }\n\n  activeCallMutations.add(key);\n  runFlush(\n    callback(),\n    handleError,\n    () => {\n      activeCallMutations.delete(key);\n      drainCallQueue(key);\n    },\n  );\n}\n\nfunction defaultOnError() {}\n"
  },
  {
    "path": "applications/web/src/lib/session-cookie.ts",
    "content": "const SESSION_COOKIE = \"keeper.has_session=1\";\n\nexport function hasSessionCookie(cookieHeader?: string): boolean {\n  const cookieSource = cookieHeader\n    ?? (typeof document === \"undefined\" ? \"\" : document.cookie);\n\n  return cookieSource\n    .split(\";\")\n    .map((cookie) => cookie.trim())\n    .some((cookie) => cookie.startsWith(SESSION_COOKIE));\n}\n"
  },
  {
    "path": "applications/web/src/lib/swr.ts",
    "content": "import type { ScopedMutator } from \"swr\";\n\n/**\n * Revalidate all account and source caches.\n * Use after creating, updating, or deleting accounts/sources.\n */\nexport function invalidateAccountsAndSources(\n  globalMutate: ScopedMutator,\n  ...additionalKeys: string[]\n) {\n  return Promise.all([\n    globalMutate(\"/api/accounts\"),\n    globalMutate(\"/api/sources\"),\n    ...additionalKeys.map((key) => globalMutate(key)),\n  ]);\n}\n"
  },
  {
    "path": "applications/web/src/lib/time.ts",
    "content": "const MINS_PER_HOUR = 60;\nconst HOURS_PER_DAY = 24;\nconst MINS_PER_DAY = MINS_PER_HOUR * HOURS_PER_DAY;\n\nconst getSuffixAndPrefix = (\n  diffMins: number,\n): { suffix: string; prefix: string } => {\n  if (diffMins < 0) return { suffix: \" ago\", prefix: \"\" };\n  if (diffMins > 0) return { suffix: \"\", prefix: \"in \" };\n  return { suffix: \"\", prefix: \"\" };\n};\n\nexport const formatTimeUntil = (date: Date): string => {\n  const now = new Date();\n  const diffMs = date.getTime() - now.getTime();\n  const diffMins = Math.round(diffMs / (1000 * 60));\n\n  if (diffMins === 0) return \"now\";\n\n  const absMins = Math.abs(diffMins);\n  const { suffix, prefix } = getSuffixAndPrefix(diffMins);\n\n  if (absMins < MINS_PER_HOUR) return `${prefix}${absMins}m${suffix}`;\n\n  const hours = Math.floor(absMins / MINS_PER_HOUR);\n  if (hours < 48) return `${prefix}${hours}h${suffix}`;\n\n  const days = Math.floor(absMins / MINS_PER_DAY);\n  return `${prefix}${days}d${suffix}`;\n};\n\nexport const isEventPast = (endTime: Date): boolean =>\n  endTime.getTime() < Date.now();\n\nconst resolvePeriod = (hours: number): string => {\n  if (hours >= 12) return \"PM\";\n  return \"AM\";\n};\n\nexport const formatTime = (date: Date): string => {\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const period = resolvePeriod(hours);\n  const displayHours = hours % 12 || 12;\n\n  return `${displayHours}:${minutes.toString().padStart(2, \"0\")} ${period}`;\n};\n\nexport const formatDate = (date: string | Date): string =>\n  new Date(date).toLocaleDateString(undefined, {\n    month: \"long\",\n    day: \"numeric\",\n    year: \"numeric\",\n  });\n\nexport const formatDateShort = (date: string | Date): string =>\n  new Date(date).toLocaleDateString(\"en-US\", {\n    month: \"short\",\n    day: \"numeric\",\n    year: \"numeric\",\n  });\n\nexport const formatDayHeader = (date: Date): string => {\n  const now = new Date();\n  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n  const target = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n  const diffDays = Math.round(\n    (target.getTime() - today.getTime()) / (1000 * 60 * 60 * 24),\n  );\n\n  if (diffDays === 0) return \"Today\";\n  if (diffDays === 1) return \"Tomorrow\";\n  if (diffDays === -1) return \"Yesterday\";\n\n  return date.toLocaleDateString(\"en-US\", {\n    weekday: \"long\",\n    month: \"short\",\n    day: \"numeric\",\n  });\n};\n"
  },
  {
    "path": "applications/web/src/main.tsx",
    "content": "import { StrictMode } from \"react\";\nimport { createRoot, hydrateRoot } from \"react-dom/client\";\nimport { RouterProvider } from \"@tanstack/react-router\";\nimport { RouterClient } from \"@tanstack/react-router/ssr/client\";\nimport { createAppRouter } from \"./router\";\n\nconst rootElement = document.getElementById(\"root\");\nconst router = createAppRouter();\n\nif (rootElement && rootElement.innerHTML.length > 0) {\n  hydrateRoot(\n    document,\n    <StrictMode>\n      <RouterClient router={router} />\n    </StrictMode>,\n  );\n} else if (rootElement) {\n  const root = createRoot(rootElement);\n\n  root.render(\n    <StrictMode>\n      <RouterProvider router={router} />\n    </StrictMode>,\n  );\n}\n"
  },
  {
    "path": "applications/web/src/providers/sync-provider-logic.ts",
    "content": "import { isSocketMessage, isSyncAggregate } from \"@keeper.sh/data-schemas/client\";\nimport type { CompositeSyncState, SyncAggregateData } from \"@/state/sync\";\n\ntype IncomingSocketAction =\n  | { kind: \"ignore\" }\n  | { kind: \"pong\" }\n  | { kind: \"reconnect\" }\n  | { kind: \"aggregate\"; data: SyncAggregateData };\n\ninterface AggregateDecision {\n  accepted: boolean;\n  nextSeq: number;\n}\n\nconst parseTimestampMs = (value: string | null | undefined): number | null => {\n  if (!value) {\n    return null;\n  }\n\n  const timestamp = Date.parse(value);\n  return Number.isFinite(timestamp) ? timestamp : null;\n};\n\nconst isForwardProgress = (\n  current: CompositeSyncState,\n  next: SyncAggregateData,\n): boolean => {\n  const currentLastSyncedAtMs = parseTimestampMs(current.lastSyncedAt);\n  const nextLastSyncedAtMs = parseTimestampMs(next.lastSyncedAt);\n\n  if (\n    nextLastSyncedAtMs !== null &&\n    (currentLastSyncedAtMs === null || nextLastSyncedAtMs > currentLastSyncedAtMs)\n  ) {\n    return true;\n  }\n\n  if (next.syncEventsProcessed > current.syncEventsProcessed) {\n    return true;\n  }\n\n  if (next.syncEventsRemaining < current.syncEventsRemaining) {\n    return true;\n  }\n\n  if (next.progressPercent > current.progressPercent) {\n    return true;\n  }\n\n  if (current.state === \"idle\" && next.syncing) {\n    return true;\n  }\n\n  if (current.state === \"syncing\" && !next.syncing && next.syncEventsRemaining === 0) {\n    return true;\n  }\n\n  return false;\n};\n\nconst parseIncomingSocketAction = (\n  raw: string,\n): IncomingSocketAction => {\n  let parsed: unknown;\n\n  try {\n    parsed = JSON.parse(raw);\n  } catch {\n    return { kind: \"reconnect\" };\n  }\n\n  if (!isSocketMessage(parsed)) {\n    return { kind: \"reconnect\" };\n  }\n\n  if (parsed.event === \"ping\") {\n    return { kind: \"pong\" };\n  }\n\n  if (parsed.event !== \"sync:aggregate\") {\n    return { kind: \"ignore\" };\n  }\n\n  if (!isSyncAggregate(parsed.data)) {\n    return { kind: \"reconnect\" };\n  }\n\n  return {\n    data: parsed.data,\n    kind: \"aggregate\",\n  };\n};\n\nconst shouldAcceptAggregatePayload = (\n  currentState: CompositeSyncState,\n  lastSeq: number,\n  nextAggregate: SyncAggregateData,\n): AggregateDecision => {\n  const isNewerSequence = nextAggregate.seq > lastSeq;\n  if (!isNewerSequence && !isForwardProgress(currentState, nextAggregate)) {\n    return {\n      accepted: false,\n      nextSeq: lastSeq,\n    };\n  }\n\n  return {\n    accepted: true,\n    nextSeq: Math.max(lastSeq, nextAggregate.seq),\n  };\n};\n\nexport { parseIncomingSocketAction, shouldAcceptAggregatePayload };\nexport type { IncomingSocketAction, AggregateDecision };\n"
  },
  {
    "path": "applications/web/src/providers/sync-provider.tsx",
    "content": "import { useEffect } from \"react\";\nimport { useSetAtom } from \"jotai\";\nimport { syncStateAtom, type CompositeSyncState } from \"@/state/sync\";\nimport {\n  parseIncomingSocketAction,\n  shouldAcceptAggregatePayload,\n} from \"./sync-provider-logic\";\n\ninterface ConnectionState {\n  socket: WebSocket | null;\n  abortController: AbortController;\n  reconnectTimer: ReturnType<typeof setTimeout> | null;\n  initialAggregateTimer: ReturnType<typeof setTimeout> | null;\n  attempts: number;\n  disposed: boolean;\n  hasReceivedSocketAggregate: boolean;\n  lastSeq: number;\n  currentState: CompositeSyncState;\n}\n\nconst MAX_RECONNECT_DELAY_MS = 30_000;\nconst BASE_RECONNECT_DELAY_MS = 2_000;\nconst INITIAL_AGGREGATE_TIMEOUT_MS = 10_000;\n\nconst INITIAL_SYNC_STATE: CompositeSyncState = {\n  connected: false,\n  lastSyncedAt: null,\n  progressPercent: 100,\n  seq: 0,\n  syncEventsProcessed: 0,\n  syncEventsRemaining: 0,\n  syncEventsTotal: 0,\n  state: \"idle\",\n  hasReceivedAggregate: false,\n};\n\nconst getWebSocketProtocol = (): string =>\n  globalThis.location.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\nconst buildWebSocketUrl = (socketPath: string): string => {\n  const url = new URL(socketPath, globalThis.location.origin);\n  url.protocol = getWebSocketProtocol();\n  return url.toString();\n};\n\nconst fetchSocketUrl = async (signal: AbortSignal): Promise<string> => {\n  const response = await fetch(\"/api/socket/url\", { credentials: \"include\", signal });\n  if (!response.ok) {\n    throw new Error(`Failed to fetch socket URL: ${response.status}`);\n  }\n\n  const { socketUrl, socketPath } = await response.json();\n  return socketUrl ?? buildWebSocketUrl(socketPath);\n};\n\nconst getReconnectDelay = (attempts: number): number =>\n  Math.min(BASE_RECONNECT_DELAY_MS * 2 ** attempts, MAX_RECONNECT_DELAY_MS);\n\nconst applyState = (\n  connectionState: ConnectionState,\n  setSyncState: (state: CompositeSyncState) => void,\n  state: CompositeSyncState,\n): void => {\n  connectionState.currentState = state;\n  setSyncState(state);\n};\n\nconst setConnected = (\n  connectionState: ConnectionState,\n  setSyncState: (state: CompositeSyncState) => void,\n  connected: boolean,\n): void => {\n  applyState(connectionState, setSyncState, {\n    ...connectionState.currentState,\n    connected,\n  });\n};\n\nconst clearInitialAggregateTimer = (connectionState: ConnectionState): void => {\n  if (connectionState.initialAggregateTimer) {\n    clearTimeout(connectionState.initialAggregateTimer);\n    connectionState.initialAggregateTimer = null;\n  }\n};\n\nconst startInitialAggregateTimer = (\n  connectionState: ConnectionState,\n  socket: WebSocket,\n): void => {\n  clearInitialAggregateTimer(connectionState);\n  connectionState.initialAggregateTimer = setTimeout(() => {\n    if (connectionState.disposed || connectionState.socket !== socket) {\n      return;\n    }\n\n    if (connectionState.hasReceivedSocketAggregate) {\n      return;\n    }\n\n    socket.close();\n  }, INITIAL_AGGREGATE_TIMEOUT_MS);\n};\n\nconst resolveProgressPercent = (data: { syncEventsRemaining: number; progressPercent: number }): number => {\n  if (data.syncEventsRemaining === 0) {\n    return 100;\n  }\n  return data.progressPercent;\n};\n\nconst handleMessage = (\n  connectionState: ConnectionState,\n  setSyncState: (state: CompositeSyncState) => void,\n  raw: string,\n  socket: WebSocket,\n): void => {\n  const action = parseIncomingSocketAction(raw);\n\n  if (action.kind === \"ignore\") {\n    return;\n  }\n\n  if (action.kind === \"pong\") {\n    socket.send(JSON.stringify({ event: \"pong\" }));\n    return;\n  }\n\n  if (action.kind === \"reconnect\") {\n    if (connectionState.socket === socket && socket.readyState === WebSocket.OPEN) {\n      socket.close();\n    }\n    return;\n  }\n\n  const decision = shouldAcceptAggregatePayload(\n    connectionState.currentState,\n    connectionState.lastSeq,\n    action.data,\n  );\n  if (!decision.accepted) {\n    return;\n  }\n\n  connectionState.hasReceivedSocketAggregate = true;\n  clearInitialAggregateTimer(connectionState);\n  connectionState.lastSeq = decision.nextSeq;\n\n  applyState(connectionState, setSyncState, {\n    connected: true,\n    hasReceivedAggregate: true,\n    lastSyncedAt: action.data.lastSyncedAt ?? null,\n    progressPercent: resolveProgressPercent(action.data),\n    seq: action.data.seq,\n    syncEventsProcessed: action.data.syncEventsProcessed,\n    syncEventsRemaining: action.data.syncEventsRemaining,\n    syncEventsTotal: action.data.syncEventsTotal,\n    state: action.data.syncing ? \"syncing\" : \"idle\",\n  });\n};\n\nconst scheduleReconnect = (connectionState: ConnectionState, connectFn: () => void): void => {\n  if (connectionState.disposed) {\n    return;\n  }\n\n  const delay = getReconnectDelay(connectionState.attempts);\n  connectionState.attempts += 1;\n  connectionState.reconnectTimer = setTimeout(connectFn, delay);\n};\n\nconst connect = async (\n  connectionState: ConnectionState,\n  setSyncState: (state: CompositeSyncState) => void,\n): Promise<void> => {\n  if (connectionState.disposed) {\n    return;\n  }\n\n  connectionState.abortController = new AbortController();\n\n  try {\n    const socketUrl = await fetchSocketUrl(connectionState.abortController.signal);\n    if (connectionState.disposed) {\n      return;\n    }\n\n    const socket = new WebSocket(socketUrl);\n    connectionState.socket = socket;\n\n    socket.addEventListener(\"open\", () => {\n      connectionState.attempts = 0;\n      connectionState.lastSeq = -1;\n      connectionState.hasReceivedSocketAggregate = false;\n      setConnected(connectionState, setSyncState, false);\n      startInitialAggregateTimer(connectionState, socket);\n    });\n    socket.addEventListener(\"message\", (event) => {\n      handleMessage(connectionState, setSyncState, String(event.data), socket);\n    });\n    socket.addEventListener(\"close\", () => {\n      clearInitialAggregateTimer(connectionState);\n      connectionState.hasReceivedSocketAggregate = false;\n      setConnected(connectionState, setSyncState, false);\n      scheduleReconnect(connectionState, () => {\n        void connect(connectionState, setSyncState);\n      });\n    });\n    socket.addEventListener(\"error\", () => {\n      socket.close();\n    });\n  } catch {\n    setConnected(connectionState, setSyncState, false);\n    scheduleReconnect(connectionState, () => {\n      void connect(connectionState, setSyncState);\n    });\n  }\n};\n\nconst dispose = (connectionState: ConnectionState): void => {\n  connectionState.disposed = true;\n  connectionState.abortController.abort();\n  clearInitialAggregateTimer(connectionState);\n  if (connectionState.reconnectTimer) {\n    clearTimeout(connectionState.reconnectTimer);\n  }\n  connectionState.socket?.close();\n};\n\nexport function SyncProvider() {\n  const setSyncState = useSetAtom(syncStateAtom);\n\n  useEffect(() => {\n    const connectionState: ConnectionState = {\n      abortController: new AbortController(),\n      attempts: 0,\n      currentState: INITIAL_SYNC_STATE,\n      disposed: false,\n      hasReceivedSocketAggregate: false,\n      initialAggregateTimer: null,\n      lastSeq: -1,\n      reconnectTimer: null,\n      socket: null,\n    };\n\n    void connect(connectionState, setSyncState);\n    return () => {\n      dispose(connectionState);\n    };\n  }, [setSyncState]);\n\n  return null;\n}\n"
  },
  {
    "path": "applications/web/src/routeTree.gen.ts",
    "content": "/* eslint-disable */\n\n// @ts-nocheck\n\n// noinspection JSUnusedGlobalSymbols\n\n// This file was automatically generated by TanStack Router.\n// You should NOT make any changes in this file as it will be overwritten.\n// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.\n\nimport { Route as rootRouteImport } from './routes/__root'\nimport { Route as oauthRouteRouteImport } from './routes/(oauth)/route'\nimport { Route as marketingRouteRouteImport } from './routes/(marketing)/route'\nimport { Route as dashboardRouteRouteImport } from './routes/(dashboard)/route'\nimport { Route as authRouteRouteImport } from './routes/(auth)/route'\nimport { Route as marketingIndexRouteImport } from './routes/(marketing)/index'\nimport { Route as marketingTermsRouteImport } from './routes/(marketing)/terms'\nimport { Route as marketingPrivacyRouteImport } from './routes/(marketing)/privacy'\nimport { Route as authVerifyEmailRouteImport } from './routes/(auth)/verify-email'\nimport { Route as authVerifyAuthenticationRouteImport } from './routes/(auth)/verify-authentication'\nimport { Route as authResetPasswordRouteImport } from './routes/(auth)/reset-password'\nimport { Route as authRegisterRouteImport } from './routes/(auth)/register'\nimport { Route as authLoginRouteImport } from './routes/(auth)/login'\nimport { Route as authForgotPasswordRouteImport } from './routes/(auth)/forgot-password'\nimport { Route as oauthDashboardRouteRouteImport } from './routes/(oauth)/dashboard/route'\nimport { Route as oauthAuthRouteRouteImport } from './routes/(oauth)/auth/route'\nimport { Route as marketingBlogRouteRouteImport } from './routes/(marketing)/blog/route'\nimport { Route as marketingBlogIndexRouteImport } from './routes/(marketing)/blog/index'\nimport { Route as dashboardDashboardIndexRouteImport } from './routes/(dashboard)/dashboard/index'\nimport { Route as oauthOauthConsentRouteImport } from './routes/(oauth)/oauth/consent'\nimport { Route as oauthAuthOutlookRouteImport } from './routes/(oauth)/auth/outlook'\nimport { Route as oauthAuthGoogleRouteImport } from './routes/(oauth)/auth/google'\nimport { Route as marketingBlogSlugRouteImport } from './routes/(marketing)/blog/$slug'\nimport { Route as dashboardDashboardReportRouteImport } from './routes/(dashboard)/dashboard/report'\nimport { Route as dashboardDashboardIcalRouteImport } from './routes/(dashboard)/dashboard/ical'\nimport { Route as dashboardDashboardFeedbackRouteImport } from './routes/(dashboard)/dashboard/feedback'\nimport { Route as oauthDashboardConnectRouteRouteImport } from './routes/(oauth)/dashboard/connect/route'\nimport { Route as dashboardDashboardSettingsRouteRouteImport } from './routes/(dashboard)/dashboard/settings/route'\nimport { Route as dashboardDashboardConnectRouteRouteImport } from './routes/(dashboard)/dashboard/connect/route'\nimport { Route as dashboardDashboardAccountsRouteRouteImport } from './routes/(dashboard)/dashboard/accounts/route'\nimport { Route as dashboardDashboardUpgradeIndexRouteImport } from './routes/(dashboard)/dashboard/upgrade/index'\nimport { Route as dashboardDashboardSettingsIndexRouteImport } from './routes/(dashboard)/dashboard/settings/index'\nimport { Route as dashboardDashboardIntegrationsIndexRouteImport } from './routes/(dashboard)/dashboard/integrations/index'\nimport { Route as dashboardDashboardEventsIndexRouteImport } from './routes/(dashboard)/dashboard/events/index'\nimport { Route as dashboardDashboardConnectIndexRouteImport } from './routes/(dashboard)/dashboard/connect/index'\nimport { Route as oauthDashboardConnectOutlookRouteImport } from './routes/(oauth)/dashboard/connect/outlook'\nimport { Route as oauthDashboardConnectMicrosoftRouteImport } from './routes/(oauth)/dashboard/connect/microsoft'\nimport { Route as oauthDashboardConnectIcsFileRouteImport } from './routes/(oauth)/dashboard/connect/ics-file'\nimport { Route as oauthDashboardConnectIcalLinkRouteImport } from './routes/(oauth)/dashboard/connect/ical-link'\nimport { Route as oauthDashboardConnectGoogleRouteImport } from './routes/(oauth)/dashboard/connect/google'\nimport { Route as oauthDashboardConnectFastmailRouteImport } from './routes/(oauth)/dashboard/connect/fastmail'\nimport { Route as oauthDashboardConnectCaldavRouteImport } from './routes/(oauth)/dashboard/connect/caldav'\nimport { Route as oauthDashboardConnectAppleRouteImport } from './routes/(oauth)/dashboard/connect/apple'\nimport { Route as dashboardDashboardSettingsPasskeysRouteImport } from './routes/(dashboard)/dashboard/settings/passkeys'\nimport { Route as dashboardDashboardSettingsChangePasswordRouteImport } from './routes/(dashboard)/dashboard/settings/change-password'\nimport { Route as dashboardDashboardSettingsApiTokensRouteImport } from './routes/(dashboard)/dashboard/settings/api-tokens'\nimport { Route as dashboardDashboardAccountsAccountIdIndexRouteImport } from './routes/(dashboard)/dashboard/accounts/$accountId.index'\nimport { Route as dashboardDashboardAccountsAccountIdSetupRouteImport } from './routes/(dashboard)/dashboard/accounts/$accountId.setup'\nimport { Route as dashboardDashboardAccountsAccountIdCalendarIdRouteImport } from './routes/(dashboard)/dashboard/accounts/$accountId.$calendarId'\n\nconst oauthRouteRoute = oauthRouteRouteImport.update({\n  id: '/(oauth)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst marketingRouteRoute = marketingRouteRouteImport.update({\n  id: '/(marketing)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst dashboardRouteRoute = dashboardRouteRouteImport.update({\n  id: '/(dashboard)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst authRouteRoute = authRouteRouteImport.update({\n  id: '/(auth)',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst marketingIndexRoute = marketingIndexRouteImport.update({\n  id: '/',\n  path: '/',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst marketingTermsRoute = marketingTermsRouteImport.update({\n  id: '/terms',\n  path: '/terms',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst marketingPrivacyRoute = marketingPrivacyRouteImport.update({\n  id: '/privacy',\n  path: '/privacy',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst authVerifyEmailRoute = authVerifyEmailRouteImport.update({\n  id: '/verify-email',\n  path: '/verify-email',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authVerifyAuthenticationRoute =\n  authVerifyAuthenticationRouteImport.update({\n    id: '/verify-authentication',\n    path: '/verify-authentication',\n    getParentRoute: () => authRouteRoute,\n  } as any)\nconst authResetPasswordRoute = authResetPasswordRouteImport.update({\n  id: '/reset-password',\n  path: '/reset-password',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authRegisterRoute = authRegisterRouteImport.update({\n  id: '/register',\n  path: '/register',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authLoginRoute = authLoginRouteImport.update({\n  id: '/login',\n  path: '/login',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst authForgotPasswordRoute = authForgotPasswordRouteImport.update({\n  id: '/forgot-password',\n  path: '/forgot-password',\n  getParentRoute: () => authRouteRoute,\n} as any)\nconst oauthDashboardRouteRoute = oauthDashboardRouteRouteImport.update({\n  id: '/dashboard',\n  path: '/dashboard',\n  getParentRoute: () => oauthRouteRoute,\n} as any)\nconst oauthAuthRouteRoute = oauthAuthRouteRouteImport.update({\n  id: '/auth',\n  path: '/auth',\n  getParentRoute: () => oauthRouteRoute,\n} as any)\nconst marketingBlogRouteRoute = marketingBlogRouteRouteImport.update({\n  id: '/blog',\n  path: '/blog',\n  getParentRoute: () => marketingRouteRoute,\n} as any)\nconst marketingBlogIndexRoute = marketingBlogIndexRouteImport.update({\n  id: '/',\n  path: '/',\n  getParentRoute: () => marketingBlogRouteRoute,\n} as any)\nconst dashboardDashboardIndexRoute = dashboardDashboardIndexRouteImport.update({\n  id: '/dashboard/',\n  path: '/dashboard/',\n  getParentRoute: () => dashboardRouteRoute,\n} as any)\nconst oauthOauthConsentRoute = oauthOauthConsentRouteImport.update({\n  id: '/oauth/consent',\n  path: '/oauth/consent',\n  getParentRoute: () => oauthRouteRoute,\n} as any)\nconst oauthAuthOutlookRoute = oauthAuthOutlookRouteImport.update({\n  id: '/outlook',\n  path: '/outlook',\n  getParentRoute: () => oauthAuthRouteRoute,\n} as any)\nconst oauthAuthGoogleRoute = oauthAuthGoogleRouteImport.update({\n  id: '/google',\n  path: '/google',\n  getParentRoute: () => oauthAuthRouteRoute,\n} as any)\nconst marketingBlogSlugRoute = marketingBlogSlugRouteImport.update({\n  id: '/$slug',\n  path: '/$slug',\n  getParentRoute: () => marketingBlogRouteRoute,\n} as any)\nconst dashboardDashboardReportRoute =\n  dashboardDashboardReportRouteImport.update({\n    id: '/dashboard/report',\n    path: '/dashboard/report',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardIcalRoute = dashboardDashboardIcalRouteImport.update({\n  id: '/dashboard/ical',\n  path: '/dashboard/ical',\n  getParentRoute: () => dashboardRouteRoute,\n} as any)\nconst dashboardDashboardFeedbackRoute =\n  dashboardDashboardFeedbackRouteImport.update({\n    id: '/dashboard/feedback',\n    path: '/dashboard/feedback',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst oauthDashboardConnectRouteRoute =\n  oauthDashboardConnectRouteRouteImport.update({\n    id: '/connect',\n    path: '/connect',\n    getParentRoute: () => oauthDashboardRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsRouteRoute =\n  dashboardDashboardSettingsRouteRouteImport.update({\n    id: '/dashboard/settings',\n    path: '/dashboard/settings',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardConnectRouteRoute =\n  dashboardDashboardConnectRouteRouteImport.update({\n    id: '/dashboard/connect',\n    path: '/dashboard/connect',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsRouteRoute =\n  dashboardDashboardAccountsRouteRouteImport.update({\n    id: '/dashboard/accounts',\n    path: '/dashboard/accounts',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardUpgradeIndexRoute =\n  dashboardDashboardUpgradeIndexRouteImport.update({\n    id: '/dashboard/upgrade/',\n    path: '/dashboard/upgrade/',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsIndexRoute =\n  dashboardDashboardSettingsIndexRouteImport.update({\n    id: '/',\n    path: '/',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardIntegrationsIndexRoute =\n  dashboardDashboardIntegrationsIndexRouteImport.update({\n    id: '/dashboard/integrations/',\n    path: '/dashboard/integrations/',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardEventsIndexRoute =\n  dashboardDashboardEventsIndexRouteImport.update({\n    id: '/dashboard/events/',\n    path: '/dashboard/events/',\n    getParentRoute: () => dashboardRouteRoute,\n  } as any)\nconst dashboardDashboardConnectIndexRoute =\n  dashboardDashboardConnectIndexRouteImport.update({\n    id: '/',\n    path: '/',\n    getParentRoute: () => dashboardDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectOutlookRoute =\n  oauthDashboardConnectOutlookRouteImport.update({\n    id: '/outlook',\n    path: '/outlook',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectMicrosoftRoute =\n  oauthDashboardConnectMicrosoftRouteImport.update({\n    id: '/microsoft',\n    path: '/microsoft',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectIcsFileRoute =\n  oauthDashboardConnectIcsFileRouteImport.update({\n    id: '/ics-file',\n    path: '/ics-file',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectIcalLinkRoute =\n  oauthDashboardConnectIcalLinkRouteImport.update({\n    id: '/ical-link',\n    path: '/ical-link',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectGoogleRoute =\n  oauthDashboardConnectGoogleRouteImport.update({\n    id: '/google',\n    path: '/google',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectFastmailRoute =\n  oauthDashboardConnectFastmailRouteImport.update({\n    id: '/fastmail',\n    path: '/fastmail',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectCaldavRoute =\n  oauthDashboardConnectCaldavRouteImport.update({\n    id: '/caldav',\n    path: '/caldav',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst oauthDashboardConnectAppleRoute =\n  oauthDashboardConnectAppleRouteImport.update({\n    id: '/apple',\n    path: '/apple',\n    getParentRoute: () => oauthDashboardConnectRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsPasskeysRoute =\n  dashboardDashboardSettingsPasskeysRouteImport.update({\n    id: '/passkeys',\n    path: '/passkeys',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsChangePasswordRoute =\n  dashboardDashboardSettingsChangePasswordRouteImport.update({\n    id: '/change-password',\n    path: '/change-password',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardSettingsApiTokensRoute =\n  dashboardDashboardSettingsApiTokensRouteImport.update({\n    id: '/api-tokens',\n    path: '/api-tokens',\n    getParentRoute: () => dashboardDashboardSettingsRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsAccountIdIndexRoute =\n  dashboardDashboardAccountsAccountIdIndexRouteImport.update({\n    id: '/$accountId/',\n    path: '/$accountId/',\n    getParentRoute: () => dashboardDashboardAccountsRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsAccountIdSetupRoute =\n  dashboardDashboardAccountsAccountIdSetupRouteImport.update({\n    id: '/$accountId/setup',\n    path: '/$accountId/setup',\n    getParentRoute: () => dashboardDashboardAccountsRouteRoute,\n  } as any)\nconst dashboardDashboardAccountsAccountIdCalendarIdRoute =\n  dashboardDashboardAccountsAccountIdCalendarIdRouteImport.update({\n    id: '/$accountId/$calendarId',\n    path: '/$accountId/$calendarId',\n    getParentRoute: () => dashboardDashboardAccountsRouteRoute,\n  } as any)\n\nexport interface FileRoutesByFullPath {\n  '/blog': typeof marketingBlogRouteRouteWithChildren\n  '/auth': typeof oauthAuthRouteRouteWithChildren\n  '/dashboard': typeof oauthDashboardRouteRouteWithChildren\n  '/forgot-password': typeof authForgotPasswordRoute\n  '/login': typeof authLoginRoute\n  '/register': typeof authRegisterRoute\n  '/reset-password': typeof authResetPasswordRoute\n  '/verify-authentication': typeof authVerifyAuthenticationRoute\n  '/verify-email': typeof authVerifyEmailRoute\n  '/privacy': typeof marketingPrivacyRoute\n  '/terms': typeof marketingTermsRoute\n  '/': typeof marketingIndexRoute\n  '/dashboard/accounts': typeof dashboardDashboardAccountsRouteRouteWithChildren\n  '/dashboard/connect': typeof oauthDashboardConnectRouteRouteWithChildren\n  '/dashboard/settings': typeof dashboardDashboardSettingsRouteRouteWithChildren\n  '/dashboard/feedback': typeof dashboardDashboardFeedbackRoute\n  '/dashboard/ical': typeof dashboardDashboardIcalRoute\n  '/dashboard/report': typeof dashboardDashboardReportRoute\n  '/blog/$slug': typeof marketingBlogSlugRoute\n  '/auth/google': typeof oauthAuthGoogleRoute\n  '/auth/outlook': typeof oauthAuthOutlookRoute\n  '/oauth/consent': typeof oauthOauthConsentRoute\n  '/dashboard/': typeof dashboardDashboardIndexRoute\n  '/blog/': typeof marketingBlogIndexRoute\n  '/dashboard/settings/api-tokens': typeof dashboardDashboardSettingsApiTokensRoute\n  '/dashboard/settings/change-password': typeof dashboardDashboardSettingsChangePasswordRoute\n  '/dashboard/settings/passkeys': typeof dashboardDashboardSettingsPasskeysRoute\n  '/dashboard/connect/apple': typeof oauthDashboardConnectAppleRoute\n  '/dashboard/connect/caldav': typeof oauthDashboardConnectCaldavRoute\n  '/dashboard/connect/fastmail': typeof oauthDashboardConnectFastmailRoute\n  '/dashboard/connect/google': typeof oauthDashboardConnectGoogleRoute\n  '/dashboard/connect/ical-link': typeof oauthDashboardConnectIcalLinkRoute\n  '/dashboard/connect/ics-file': typeof oauthDashboardConnectIcsFileRoute\n  '/dashboard/connect/microsoft': typeof oauthDashboardConnectMicrosoftRoute\n  '/dashboard/connect/outlook': typeof oauthDashboardConnectOutlookRoute\n  '/dashboard/connect/': typeof dashboardDashboardConnectIndexRoute\n  '/dashboard/events/': typeof dashboardDashboardEventsIndexRoute\n  '/dashboard/integrations/': typeof dashboardDashboardIntegrationsIndexRoute\n  '/dashboard/settings/': typeof dashboardDashboardSettingsIndexRoute\n  '/dashboard/upgrade/': typeof dashboardDashboardUpgradeIndexRoute\n  '/dashboard/accounts/$accountId/$calendarId': typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  '/dashboard/accounts/$accountId/setup': typeof dashboardDashboardAccountsAccountIdSetupRoute\n  '/dashboard/accounts/$accountId/': typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\nexport interface FileRoutesByTo {\n  '/auth': typeof oauthAuthRouteRouteWithChildren\n  '/dashboard': typeof dashboardDashboardIndexRoute\n  '/forgot-password': typeof authForgotPasswordRoute\n  '/login': typeof authLoginRoute\n  '/register': typeof authRegisterRoute\n  '/reset-password': typeof authResetPasswordRoute\n  '/verify-authentication': typeof authVerifyAuthenticationRoute\n  '/verify-email': typeof authVerifyEmailRoute\n  '/privacy': typeof marketingPrivacyRoute\n  '/terms': typeof marketingTermsRoute\n  '/': typeof marketingIndexRoute\n  '/dashboard/accounts': typeof dashboardDashboardAccountsRouteRouteWithChildren\n  '/dashboard/connect': typeof dashboardDashboardConnectIndexRoute\n  '/dashboard/feedback': typeof dashboardDashboardFeedbackRoute\n  '/dashboard/ical': typeof dashboardDashboardIcalRoute\n  '/dashboard/report': typeof dashboardDashboardReportRoute\n  '/blog/$slug': typeof marketingBlogSlugRoute\n  '/auth/google': typeof oauthAuthGoogleRoute\n  '/auth/outlook': typeof oauthAuthOutlookRoute\n  '/oauth/consent': typeof oauthOauthConsentRoute\n  '/blog': typeof marketingBlogIndexRoute\n  '/dashboard/settings/api-tokens': typeof dashboardDashboardSettingsApiTokensRoute\n  '/dashboard/settings/change-password': typeof dashboardDashboardSettingsChangePasswordRoute\n  '/dashboard/settings/passkeys': typeof dashboardDashboardSettingsPasskeysRoute\n  '/dashboard/connect/apple': typeof oauthDashboardConnectAppleRoute\n  '/dashboard/connect/caldav': typeof oauthDashboardConnectCaldavRoute\n  '/dashboard/connect/fastmail': typeof oauthDashboardConnectFastmailRoute\n  '/dashboard/connect/google': typeof oauthDashboardConnectGoogleRoute\n  '/dashboard/connect/ical-link': typeof oauthDashboardConnectIcalLinkRoute\n  '/dashboard/connect/ics-file': typeof oauthDashboardConnectIcsFileRoute\n  '/dashboard/connect/microsoft': typeof oauthDashboardConnectMicrosoftRoute\n  '/dashboard/connect/outlook': typeof oauthDashboardConnectOutlookRoute\n  '/dashboard/events': typeof dashboardDashboardEventsIndexRoute\n  '/dashboard/integrations': typeof dashboardDashboardIntegrationsIndexRoute\n  '/dashboard/settings': typeof dashboardDashboardSettingsIndexRoute\n  '/dashboard/upgrade': typeof dashboardDashboardUpgradeIndexRoute\n  '/dashboard/accounts/$accountId/$calendarId': typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  '/dashboard/accounts/$accountId/setup': typeof dashboardDashboardAccountsAccountIdSetupRoute\n  '/dashboard/accounts/$accountId': typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\nexport interface FileRoutesById {\n  __root__: typeof rootRouteImport\n  '/(auth)': typeof authRouteRouteWithChildren\n  '/(dashboard)': typeof dashboardRouteRouteWithChildren\n  '/(marketing)': typeof marketingRouteRouteWithChildren\n  '/(oauth)': typeof oauthRouteRouteWithChildren\n  '/(marketing)/blog': typeof marketingBlogRouteRouteWithChildren\n  '/(oauth)/auth': typeof oauthAuthRouteRouteWithChildren\n  '/(oauth)/dashboard': typeof oauthDashboardRouteRouteWithChildren\n  '/(auth)/forgot-password': typeof authForgotPasswordRoute\n  '/(auth)/login': typeof authLoginRoute\n  '/(auth)/register': typeof authRegisterRoute\n  '/(auth)/reset-password': typeof authResetPasswordRoute\n  '/(auth)/verify-authentication': typeof authVerifyAuthenticationRoute\n  '/(auth)/verify-email': typeof authVerifyEmailRoute\n  '/(marketing)/privacy': typeof marketingPrivacyRoute\n  '/(marketing)/terms': typeof marketingTermsRoute\n  '/(marketing)/': typeof marketingIndexRoute\n  '/(dashboard)/dashboard/accounts': typeof dashboardDashboardAccountsRouteRouteWithChildren\n  '/(dashboard)/dashboard/connect': typeof dashboardDashboardConnectRouteRouteWithChildren\n  '/(dashboard)/dashboard/settings': typeof dashboardDashboardSettingsRouteRouteWithChildren\n  '/(oauth)/dashboard/connect': typeof oauthDashboardConnectRouteRouteWithChildren\n  '/(dashboard)/dashboard/feedback': typeof dashboardDashboardFeedbackRoute\n  '/(dashboard)/dashboard/ical': typeof dashboardDashboardIcalRoute\n  '/(dashboard)/dashboard/report': typeof dashboardDashboardReportRoute\n  '/(marketing)/blog/$slug': typeof marketingBlogSlugRoute\n  '/(oauth)/auth/google': typeof oauthAuthGoogleRoute\n  '/(oauth)/auth/outlook': typeof oauthAuthOutlookRoute\n  '/(oauth)/oauth/consent': typeof oauthOauthConsentRoute\n  '/(dashboard)/dashboard/': typeof dashboardDashboardIndexRoute\n  '/(marketing)/blog/': typeof marketingBlogIndexRoute\n  '/(dashboard)/dashboard/settings/api-tokens': typeof dashboardDashboardSettingsApiTokensRoute\n  '/(dashboard)/dashboard/settings/change-password': typeof dashboardDashboardSettingsChangePasswordRoute\n  '/(dashboard)/dashboard/settings/passkeys': typeof dashboardDashboardSettingsPasskeysRoute\n  '/(oauth)/dashboard/connect/apple': typeof oauthDashboardConnectAppleRoute\n  '/(oauth)/dashboard/connect/caldav': typeof oauthDashboardConnectCaldavRoute\n  '/(oauth)/dashboard/connect/fastmail': typeof oauthDashboardConnectFastmailRoute\n  '/(oauth)/dashboard/connect/google': typeof oauthDashboardConnectGoogleRoute\n  '/(oauth)/dashboard/connect/ical-link': typeof oauthDashboardConnectIcalLinkRoute\n  '/(oauth)/dashboard/connect/ics-file': typeof oauthDashboardConnectIcsFileRoute\n  '/(oauth)/dashboard/connect/microsoft': typeof oauthDashboardConnectMicrosoftRoute\n  '/(oauth)/dashboard/connect/outlook': typeof oauthDashboardConnectOutlookRoute\n  '/(dashboard)/dashboard/connect/': typeof dashboardDashboardConnectIndexRoute\n  '/(dashboard)/dashboard/events/': typeof dashboardDashboardEventsIndexRoute\n  '/(dashboard)/dashboard/integrations/': typeof dashboardDashboardIntegrationsIndexRoute\n  '/(dashboard)/dashboard/settings/': typeof dashboardDashboardSettingsIndexRoute\n  '/(dashboard)/dashboard/upgrade/': typeof dashboardDashboardUpgradeIndexRoute\n  '/(dashboard)/dashboard/accounts/$accountId/$calendarId': typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  '/(dashboard)/dashboard/accounts/$accountId/setup': typeof dashboardDashboardAccountsAccountIdSetupRoute\n  '/(dashboard)/dashboard/accounts/$accountId/': typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\nexport interface FileRouteTypes {\n  fileRoutesByFullPath: FileRoutesByFullPath\n  fullPaths:\n    | '/blog'\n    | '/auth'\n    | '/dashboard'\n    | '/forgot-password'\n    | '/login'\n    | '/register'\n    | '/reset-password'\n    | '/verify-authentication'\n    | '/verify-email'\n    | '/privacy'\n    | '/terms'\n    | '/'\n    | '/dashboard/accounts'\n    | '/dashboard/connect'\n    | '/dashboard/settings'\n    | '/dashboard/feedback'\n    | '/dashboard/ical'\n    | '/dashboard/report'\n    | '/blog/$slug'\n    | '/auth/google'\n    | '/auth/outlook'\n    | '/oauth/consent'\n    | '/dashboard/'\n    | '/blog/'\n    | '/dashboard/settings/api-tokens'\n    | '/dashboard/settings/change-password'\n    | '/dashboard/settings/passkeys'\n    | '/dashboard/connect/apple'\n    | '/dashboard/connect/caldav'\n    | '/dashboard/connect/fastmail'\n    | '/dashboard/connect/google'\n    | '/dashboard/connect/ical-link'\n    | '/dashboard/connect/ics-file'\n    | '/dashboard/connect/microsoft'\n    | '/dashboard/connect/outlook'\n    | '/dashboard/connect/'\n    | '/dashboard/events/'\n    | '/dashboard/integrations/'\n    | '/dashboard/settings/'\n    | '/dashboard/upgrade/'\n    | '/dashboard/accounts/$accountId/$calendarId'\n    | '/dashboard/accounts/$accountId/setup'\n    | '/dashboard/accounts/$accountId/'\n  fileRoutesByTo: FileRoutesByTo\n  to:\n    | '/auth'\n    | '/dashboard'\n    | '/forgot-password'\n    | '/login'\n    | '/register'\n    | '/reset-password'\n    | '/verify-authentication'\n    | '/verify-email'\n    | '/privacy'\n    | '/terms'\n    | '/'\n    | '/dashboard/accounts'\n    | '/dashboard/connect'\n    | '/dashboard/feedback'\n    | '/dashboard/ical'\n    | '/dashboard/report'\n    | '/blog/$slug'\n    | '/auth/google'\n    | '/auth/outlook'\n    | '/oauth/consent'\n    | '/blog'\n    | '/dashboard/settings/api-tokens'\n    | '/dashboard/settings/change-password'\n    | '/dashboard/settings/passkeys'\n    | '/dashboard/connect/apple'\n    | '/dashboard/connect/caldav'\n    | '/dashboard/connect/fastmail'\n    | '/dashboard/connect/google'\n    | '/dashboard/connect/ical-link'\n    | '/dashboard/connect/ics-file'\n    | '/dashboard/connect/microsoft'\n    | '/dashboard/connect/outlook'\n    | '/dashboard/events'\n    | '/dashboard/integrations'\n    | '/dashboard/settings'\n    | '/dashboard/upgrade'\n    | '/dashboard/accounts/$accountId/$calendarId'\n    | '/dashboard/accounts/$accountId/setup'\n    | '/dashboard/accounts/$accountId'\n  id:\n    | '__root__'\n    | '/(auth)'\n    | '/(dashboard)'\n    | '/(marketing)'\n    | '/(oauth)'\n    | '/(marketing)/blog'\n    | '/(oauth)/auth'\n    | '/(oauth)/dashboard'\n    | '/(auth)/forgot-password'\n    | '/(auth)/login'\n    | '/(auth)/register'\n    | '/(auth)/reset-password'\n    | '/(auth)/verify-authentication'\n    | '/(auth)/verify-email'\n    | '/(marketing)/privacy'\n    | '/(marketing)/terms'\n    | '/(marketing)/'\n    | '/(dashboard)/dashboard/accounts'\n    | '/(dashboard)/dashboard/connect'\n    | '/(dashboard)/dashboard/settings'\n    | '/(oauth)/dashboard/connect'\n    | '/(dashboard)/dashboard/feedback'\n    | '/(dashboard)/dashboard/ical'\n    | '/(dashboard)/dashboard/report'\n    | '/(marketing)/blog/$slug'\n    | '/(oauth)/auth/google'\n    | '/(oauth)/auth/outlook'\n    | '/(oauth)/oauth/consent'\n    | '/(dashboard)/dashboard/'\n    | '/(marketing)/blog/'\n    | '/(dashboard)/dashboard/settings/api-tokens'\n    | '/(dashboard)/dashboard/settings/change-password'\n    | '/(dashboard)/dashboard/settings/passkeys'\n    | '/(oauth)/dashboard/connect/apple'\n    | '/(oauth)/dashboard/connect/caldav'\n    | '/(oauth)/dashboard/connect/fastmail'\n    | '/(oauth)/dashboard/connect/google'\n    | '/(oauth)/dashboard/connect/ical-link'\n    | '/(oauth)/dashboard/connect/ics-file'\n    | '/(oauth)/dashboard/connect/microsoft'\n    | '/(oauth)/dashboard/connect/outlook'\n    | '/(dashboard)/dashboard/connect/'\n    | '/(dashboard)/dashboard/events/'\n    | '/(dashboard)/dashboard/integrations/'\n    | '/(dashboard)/dashboard/settings/'\n    | '/(dashboard)/dashboard/upgrade/'\n    | '/(dashboard)/dashboard/accounts/$accountId/$calendarId'\n    | '/(dashboard)/dashboard/accounts/$accountId/setup'\n    | '/(dashboard)/dashboard/accounts/$accountId/'\n  fileRoutesById: FileRoutesById\n}\nexport interface RootRouteChildren {\n  authRouteRoute: typeof authRouteRouteWithChildren\n  dashboardRouteRoute: typeof dashboardRouteRouteWithChildren\n  marketingRouteRoute: typeof marketingRouteRouteWithChildren\n  oauthRouteRoute: typeof oauthRouteRouteWithChildren\n}\n\ndeclare module '@tanstack/react-router' {\n  interface FileRoutesByPath {\n    '/(oauth)': {\n      id: '/(oauth)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof oauthRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(marketing)': {\n      id: '/(marketing)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof marketingRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(dashboard)': {\n      id: '/(dashboard)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof dashboardRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(auth)': {\n      id: '/(auth)'\n      path: ''\n      fullPath: ''\n      preLoaderRoute: typeof authRouteRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/(marketing)/': {\n      id: '/(marketing)/'\n      path: '/'\n      fullPath: '/'\n      preLoaderRoute: typeof marketingIndexRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(marketing)/terms': {\n      id: '/(marketing)/terms'\n      path: '/terms'\n      fullPath: '/terms'\n      preLoaderRoute: typeof marketingTermsRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(marketing)/privacy': {\n      id: '/(marketing)/privacy'\n      path: '/privacy'\n      fullPath: '/privacy'\n      preLoaderRoute: typeof marketingPrivacyRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(auth)/verify-email': {\n      id: '/(auth)/verify-email'\n      path: '/verify-email'\n      fullPath: '/verify-email'\n      preLoaderRoute: typeof authVerifyEmailRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/verify-authentication': {\n      id: '/(auth)/verify-authentication'\n      path: '/verify-authentication'\n      fullPath: '/verify-authentication'\n      preLoaderRoute: typeof authVerifyAuthenticationRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/reset-password': {\n      id: '/(auth)/reset-password'\n      path: '/reset-password'\n      fullPath: '/reset-password'\n      preLoaderRoute: typeof authResetPasswordRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/register': {\n      id: '/(auth)/register'\n      path: '/register'\n      fullPath: '/register'\n      preLoaderRoute: typeof authRegisterRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/login': {\n      id: '/(auth)/login'\n      path: '/login'\n      fullPath: '/login'\n      preLoaderRoute: typeof authLoginRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(auth)/forgot-password': {\n      id: '/(auth)/forgot-password'\n      path: '/forgot-password'\n      fullPath: '/forgot-password'\n      preLoaderRoute: typeof authForgotPasswordRouteImport\n      parentRoute: typeof authRouteRoute\n    }\n    '/(oauth)/dashboard': {\n      id: '/(oauth)/dashboard'\n      path: '/dashboard'\n      fullPath: '/dashboard'\n      preLoaderRoute: typeof oauthDashboardRouteRouteImport\n      parentRoute: typeof oauthRouteRoute\n    }\n    '/(oauth)/auth': {\n      id: '/(oauth)/auth'\n      path: '/auth'\n      fullPath: '/auth'\n      preLoaderRoute: typeof oauthAuthRouteRouteImport\n      parentRoute: typeof oauthRouteRoute\n    }\n    '/(marketing)/blog': {\n      id: '/(marketing)/blog'\n      path: '/blog'\n      fullPath: '/blog'\n      preLoaderRoute: typeof marketingBlogRouteRouteImport\n      parentRoute: typeof marketingRouteRoute\n    }\n    '/(marketing)/blog/': {\n      id: '/(marketing)/blog/'\n      path: '/'\n      fullPath: '/blog/'\n      preLoaderRoute: typeof marketingBlogIndexRouteImport\n      parentRoute: typeof marketingBlogRouteRoute\n    }\n    '/(dashboard)/dashboard/': {\n      id: '/(dashboard)/dashboard/'\n      path: '/dashboard'\n      fullPath: '/dashboard/'\n      preLoaderRoute: typeof dashboardDashboardIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(oauth)/oauth/consent': {\n      id: '/(oauth)/oauth/consent'\n      path: '/oauth/consent'\n      fullPath: '/oauth/consent'\n      preLoaderRoute: typeof oauthOauthConsentRouteImport\n      parentRoute: typeof oauthRouteRoute\n    }\n    '/(oauth)/auth/outlook': {\n      id: '/(oauth)/auth/outlook'\n      path: '/outlook'\n      fullPath: '/auth/outlook'\n      preLoaderRoute: typeof oauthAuthOutlookRouteImport\n      parentRoute: typeof oauthAuthRouteRoute\n    }\n    '/(oauth)/auth/google': {\n      id: '/(oauth)/auth/google'\n      path: '/google'\n      fullPath: '/auth/google'\n      preLoaderRoute: typeof oauthAuthGoogleRouteImport\n      parentRoute: typeof oauthAuthRouteRoute\n    }\n    '/(marketing)/blog/$slug': {\n      id: '/(marketing)/blog/$slug'\n      path: '/$slug'\n      fullPath: '/blog/$slug'\n      preLoaderRoute: typeof marketingBlogSlugRouteImport\n      parentRoute: typeof marketingBlogRouteRoute\n    }\n    '/(dashboard)/dashboard/report': {\n      id: '/(dashboard)/dashboard/report'\n      path: '/dashboard/report'\n      fullPath: '/dashboard/report'\n      preLoaderRoute: typeof dashboardDashboardReportRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/ical': {\n      id: '/(dashboard)/dashboard/ical'\n      path: '/dashboard/ical'\n      fullPath: '/dashboard/ical'\n      preLoaderRoute: typeof dashboardDashboardIcalRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/feedback': {\n      id: '/(dashboard)/dashboard/feedback'\n      path: '/dashboard/feedback'\n      fullPath: '/dashboard/feedback'\n      preLoaderRoute: typeof dashboardDashboardFeedbackRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(oauth)/dashboard/connect': {\n      id: '/(oauth)/dashboard/connect'\n      path: '/connect'\n      fullPath: '/dashboard/connect'\n      preLoaderRoute: typeof oauthDashboardConnectRouteRouteImport\n      parentRoute: typeof oauthDashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/settings': {\n      id: '/(dashboard)/dashboard/settings'\n      path: '/dashboard/settings'\n      fullPath: '/dashboard/settings'\n      preLoaderRoute: typeof dashboardDashboardSettingsRouteRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/connect': {\n      id: '/(dashboard)/dashboard/connect'\n      path: '/dashboard/connect'\n      fullPath: '/dashboard/connect'\n      preLoaderRoute: typeof dashboardDashboardConnectRouteRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts': {\n      id: '/(dashboard)/dashboard/accounts'\n      path: '/dashboard/accounts'\n      fullPath: '/dashboard/accounts'\n      preLoaderRoute: typeof dashboardDashboardAccountsRouteRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/upgrade/': {\n      id: '/(dashboard)/dashboard/upgrade/'\n      path: '/dashboard/upgrade'\n      fullPath: '/dashboard/upgrade/'\n      preLoaderRoute: typeof dashboardDashboardUpgradeIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/': {\n      id: '/(dashboard)/dashboard/settings/'\n      path: '/'\n      fullPath: '/dashboard/settings/'\n      preLoaderRoute: typeof dashboardDashboardSettingsIndexRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/integrations/': {\n      id: '/(dashboard)/dashboard/integrations/'\n      path: '/dashboard/integrations'\n      fullPath: '/dashboard/integrations/'\n      preLoaderRoute: typeof dashboardDashboardIntegrationsIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/events/': {\n      id: '/(dashboard)/dashboard/events/'\n      path: '/dashboard/events'\n      fullPath: '/dashboard/events/'\n      preLoaderRoute: typeof dashboardDashboardEventsIndexRouteImport\n      parentRoute: typeof dashboardRouteRoute\n    }\n    '/(dashboard)/dashboard/connect/': {\n      id: '/(dashboard)/dashboard/connect/'\n      path: '/'\n      fullPath: '/dashboard/connect/'\n      preLoaderRoute: typeof dashboardDashboardConnectIndexRouteImport\n      parentRoute: typeof dashboardDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/outlook': {\n      id: '/(oauth)/dashboard/connect/outlook'\n      path: '/outlook'\n      fullPath: '/dashboard/connect/outlook'\n      preLoaderRoute: typeof oauthDashboardConnectOutlookRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/microsoft': {\n      id: '/(oauth)/dashboard/connect/microsoft'\n      path: '/microsoft'\n      fullPath: '/dashboard/connect/microsoft'\n      preLoaderRoute: typeof oauthDashboardConnectMicrosoftRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/ics-file': {\n      id: '/(oauth)/dashboard/connect/ics-file'\n      path: '/ics-file'\n      fullPath: '/dashboard/connect/ics-file'\n      preLoaderRoute: typeof oauthDashboardConnectIcsFileRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/ical-link': {\n      id: '/(oauth)/dashboard/connect/ical-link'\n      path: '/ical-link'\n      fullPath: '/dashboard/connect/ical-link'\n      preLoaderRoute: typeof oauthDashboardConnectIcalLinkRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/google': {\n      id: '/(oauth)/dashboard/connect/google'\n      path: '/google'\n      fullPath: '/dashboard/connect/google'\n      preLoaderRoute: typeof oauthDashboardConnectGoogleRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/fastmail': {\n      id: '/(oauth)/dashboard/connect/fastmail'\n      path: '/fastmail'\n      fullPath: '/dashboard/connect/fastmail'\n      preLoaderRoute: typeof oauthDashboardConnectFastmailRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/caldav': {\n      id: '/(oauth)/dashboard/connect/caldav'\n      path: '/caldav'\n      fullPath: '/dashboard/connect/caldav'\n      preLoaderRoute: typeof oauthDashboardConnectCaldavRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(oauth)/dashboard/connect/apple': {\n      id: '/(oauth)/dashboard/connect/apple'\n      path: '/apple'\n      fullPath: '/dashboard/connect/apple'\n      preLoaderRoute: typeof oauthDashboardConnectAppleRouteImport\n      parentRoute: typeof oauthDashboardConnectRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/passkeys': {\n      id: '/(dashboard)/dashboard/settings/passkeys'\n      path: '/passkeys'\n      fullPath: '/dashboard/settings/passkeys'\n      preLoaderRoute: typeof dashboardDashboardSettingsPasskeysRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/change-password': {\n      id: '/(dashboard)/dashboard/settings/change-password'\n      path: '/change-password'\n      fullPath: '/dashboard/settings/change-password'\n      preLoaderRoute: typeof dashboardDashboardSettingsChangePasswordRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/settings/api-tokens': {\n      id: '/(dashboard)/dashboard/settings/api-tokens'\n      path: '/api-tokens'\n      fullPath: '/dashboard/settings/api-tokens'\n      preLoaderRoute: typeof dashboardDashboardSettingsApiTokensRouteImport\n      parentRoute: typeof dashboardDashboardSettingsRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts/$accountId/': {\n      id: '/(dashboard)/dashboard/accounts/$accountId/'\n      path: '/$accountId'\n      fullPath: '/dashboard/accounts/$accountId/'\n      preLoaderRoute: typeof dashboardDashboardAccountsAccountIdIndexRouteImport\n      parentRoute: typeof dashboardDashboardAccountsRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts/$accountId/setup': {\n      id: '/(dashboard)/dashboard/accounts/$accountId/setup'\n      path: '/$accountId/setup'\n      fullPath: '/dashboard/accounts/$accountId/setup'\n      preLoaderRoute: typeof dashboardDashboardAccountsAccountIdSetupRouteImport\n      parentRoute: typeof dashboardDashboardAccountsRouteRoute\n    }\n    '/(dashboard)/dashboard/accounts/$accountId/$calendarId': {\n      id: '/(dashboard)/dashboard/accounts/$accountId/$calendarId'\n      path: '/$accountId/$calendarId'\n      fullPath: '/dashboard/accounts/$accountId/$calendarId'\n      preLoaderRoute: typeof dashboardDashboardAccountsAccountIdCalendarIdRouteImport\n      parentRoute: typeof dashboardDashboardAccountsRouteRoute\n    }\n  }\n}\n\ninterface authRouteRouteChildren {\n  authForgotPasswordRoute: typeof authForgotPasswordRoute\n  authLoginRoute: typeof authLoginRoute\n  authRegisterRoute: typeof authRegisterRoute\n  authResetPasswordRoute: typeof authResetPasswordRoute\n  authVerifyAuthenticationRoute: typeof authVerifyAuthenticationRoute\n  authVerifyEmailRoute: typeof authVerifyEmailRoute\n}\n\nconst authRouteRouteChildren: authRouteRouteChildren = {\n  authForgotPasswordRoute: authForgotPasswordRoute,\n  authLoginRoute: authLoginRoute,\n  authRegisterRoute: authRegisterRoute,\n  authResetPasswordRoute: authResetPasswordRoute,\n  authVerifyAuthenticationRoute: authVerifyAuthenticationRoute,\n  authVerifyEmailRoute: authVerifyEmailRoute,\n}\n\nconst authRouteRouteWithChildren = authRouteRoute._addFileChildren(\n  authRouteRouteChildren,\n)\n\ninterface dashboardDashboardAccountsRouteRouteChildren {\n  dashboardDashboardAccountsAccountIdCalendarIdRoute: typeof dashboardDashboardAccountsAccountIdCalendarIdRoute\n  dashboardDashboardAccountsAccountIdSetupRoute: typeof dashboardDashboardAccountsAccountIdSetupRoute\n  dashboardDashboardAccountsAccountIdIndexRoute: typeof dashboardDashboardAccountsAccountIdIndexRoute\n}\n\nconst dashboardDashboardAccountsRouteRouteChildren: dashboardDashboardAccountsRouteRouteChildren =\n  {\n    dashboardDashboardAccountsAccountIdCalendarIdRoute:\n      dashboardDashboardAccountsAccountIdCalendarIdRoute,\n    dashboardDashboardAccountsAccountIdSetupRoute:\n      dashboardDashboardAccountsAccountIdSetupRoute,\n    dashboardDashboardAccountsAccountIdIndexRoute:\n      dashboardDashboardAccountsAccountIdIndexRoute,\n  }\n\nconst dashboardDashboardAccountsRouteRouteWithChildren =\n  dashboardDashboardAccountsRouteRoute._addFileChildren(\n    dashboardDashboardAccountsRouteRouteChildren,\n  )\n\ninterface dashboardDashboardConnectRouteRouteChildren {\n  dashboardDashboardConnectIndexRoute: typeof dashboardDashboardConnectIndexRoute\n}\n\nconst dashboardDashboardConnectRouteRouteChildren: dashboardDashboardConnectRouteRouteChildren =\n  {\n    dashboardDashboardConnectIndexRoute: dashboardDashboardConnectIndexRoute,\n  }\n\nconst dashboardDashboardConnectRouteRouteWithChildren =\n  dashboardDashboardConnectRouteRoute._addFileChildren(\n    dashboardDashboardConnectRouteRouteChildren,\n  )\n\ninterface dashboardDashboardSettingsRouteRouteChildren {\n  dashboardDashboardSettingsApiTokensRoute: typeof dashboardDashboardSettingsApiTokensRoute\n  dashboardDashboardSettingsChangePasswordRoute: typeof dashboardDashboardSettingsChangePasswordRoute\n  dashboardDashboardSettingsPasskeysRoute: typeof dashboardDashboardSettingsPasskeysRoute\n  dashboardDashboardSettingsIndexRoute: typeof dashboardDashboardSettingsIndexRoute\n}\n\nconst dashboardDashboardSettingsRouteRouteChildren: dashboardDashboardSettingsRouteRouteChildren =\n  {\n    dashboardDashboardSettingsApiTokensRoute:\n      dashboardDashboardSettingsApiTokensRoute,\n    dashboardDashboardSettingsChangePasswordRoute:\n      dashboardDashboardSettingsChangePasswordRoute,\n    dashboardDashboardSettingsPasskeysRoute:\n      dashboardDashboardSettingsPasskeysRoute,\n    dashboardDashboardSettingsIndexRoute: dashboardDashboardSettingsIndexRoute,\n  }\n\nconst dashboardDashboardSettingsRouteRouteWithChildren =\n  dashboardDashboardSettingsRouteRoute._addFileChildren(\n    dashboardDashboardSettingsRouteRouteChildren,\n  )\n\ninterface dashboardRouteRouteChildren {\n  dashboardDashboardAccountsRouteRoute: typeof dashboardDashboardAccountsRouteRouteWithChildren\n  dashboardDashboardConnectRouteRoute: typeof dashboardDashboardConnectRouteRouteWithChildren\n  dashboardDashboardSettingsRouteRoute: typeof dashboardDashboardSettingsRouteRouteWithChildren\n  dashboardDashboardFeedbackRoute: typeof dashboardDashboardFeedbackRoute\n  dashboardDashboardIcalRoute: typeof dashboardDashboardIcalRoute\n  dashboardDashboardReportRoute: typeof dashboardDashboardReportRoute\n  dashboardDashboardIndexRoute: typeof dashboardDashboardIndexRoute\n  dashboardDashboardEventsIndexRoute: typeof dashboardDashboardEventsIndexRoute\n  dashboardDashboardIntegrationsIndexRoute: typeof dashboardDashboardIntegrationsIndexRoute\n  dashboardDashboardUpgradeIndexRoute: typeof dashboardDashboardUpgradeIndexRoute\n}\n\nconst dashboardRouteRouteChildren: dashboardRouteRouteChildren = {\n  dashboardDashboardAccountsRouteRoute:\n    dashboardDashboardAccountsRouteRouteWithChildren,\n  dashboardDashboardConnectRouteRoute:\n    dashboardDashboardConnectRouteRouteWithChildren,\n  dashboardDashboardSettingsRouteRoute:\n    dashboardDashboardSettingsRouteRouteWithChildren,\n  dashboardDashboardFeedbackRoute: dashboardDashboardFeedbackRoute,\n  dashboardDashboardIcalRoute: dashboardDashboardIcalRoute,\n  dashboardDashboardReportRoute: dashboardDashboardReportRoute,\n  dashboardDashboardIndexRoute: dashboardDashboardIndexRoute,\n  dashboardDashboardEventsIndexRoute: dashboardDashboardEventsIndexRoute,\n  dashboardDashboardIntegrationsIndexRoute:\n    dashboardDashboardIntegrationsIndexRoute,\n  dashboardDashboardUpgradeIndexRoute: dashboardDashboardUpgradeIndexRoute,\n}\n\nconst dashboardRouteRouteWithChildren = dashboardRouteRoute._addFileChildren(\n  dashboardRouteRouteChildren,\n)\n\ninterface marketingBlogRouteRouteChildren {\n  marketingBlogSlugRoute: typeof marketingBlogSlugRoute\n  marketingBlogIndexRoute: typeof marketingBlogIndexRoute\n}\n\nconst marketingBlogRouteRouteChildren: marketingBlogRouteRouteChildren = {\n  marketingBlogSlugRoute: marketingBlogSlugRoute,\n  marketingBlogIndexRoute: marketingBlogIndexRoute,\n}\n\nconst marketingBlogRouteRouteWithChildren =\n  marketingBlogRouteRoute._addFileChildren(marketingBlogRouteRouteChildren)\n\ninterface marketingRouteRouteChildren {\n  marketingBlogRouteRoute: typeof marketingBlogRouteRouteWithChildren\n  marketingPrivacyRoute: typeof marketingPrivacyRoute\n  marketingTermsRoute: typeof marketingTermsRoute\n  marketingIndexRoute: typeof marketingIndexRoute\n}\n\nconst marketingRouteRouteChildren: marketingRouteRouteChildren = {\n  marketingBlogRouteRoute: marketingBlogRouteRouteWithChildren,\n  marketingPrivacyRoute: marketingPrivacyRoute,\n  marketingTermsRoute: marketingTermsRoute,\n  marketingIndexRoute: marketingIndexRoute,\n}\n\nconst marketingRouteRouteWithChildren = marketingRouteRoute._addFileChildren(\n  marketingRouteRouteChildren,\n)\n\ninterface oauthAuthRouteRouteChildren {\n  oauthAuthGoogleRoute: typeof oauthAuthGoogleRoute\n  oauthAuthOutlookRoute: typeof oauthAuthOutlookRoute\n}\n\nconst oauthAuthRouteRouteChildren: oauthAuthRouteRouteChildren = {\n  oauthAuthGoogleRoute: oauthAuthGoogleRoute,\n  oauthAuthOutlookRoute: oauthAuthOutlookRoute,\n}\n\nconst oauthAuthRouteRouteWithChildren = oauthAuthRouteRoute._addFileChildren(\n  oauthAuthRouteRouteChildren,\n)\n\ninterface oauthDashboardConnectRouteRouteChildren {\n  oauthDashboardConnectAppleRoute: typeof oauthDashboardConnectAppleRoute\n  oauthDashboardConnectCaldavRoute: typeof oauthDashboardConnectCaldavRoute\n  oauthDashboardConnectFastmailRoute: typeof oauthDashboardConnectFastmailRoute\n  oauthDashboardConnectGoogleRoute: typeof oauthDashboardConnectGoogleRoute\n  oauthDashboardConnectIcalLinkRoute: typeof oauthDashboardConnectIcalLinkRoute\n  oauthDashboardConnectIcsFileRoute: typeof oauthDashboardConnectIcsFileRoute\n  oauthDashboardConnectMicrosoftRoute: typeof oauthDashboardConnectMicrosoftRoute\n  oauthDashboardConnectOutlookRoute: typeof oauthDashboardConnectOutlookRoute\n}\n\nconst oauthDashboardConnectRouteRouteChildren: oauthDashboardConnectRouteRouteChildren =\n  {\n    oauthDashboardConnectAppleRoute: oauthDashboardConnectAppleRoute,\n    oauthDashboardConnectCaldavRoute: oauthDashboardConnectCaldavRoute,\n    oauthDashboardConnectFastmailRoute: oauthDashboardConnectFastmailRoute,\n    oauthDashboardConnectGoogleRoute: oauthDashboardConnectGoogleRoute,\n    oauthDashboardConnectIcalLinkRoute: oauthDashboardConnectIcalLinkRoute,\n    oauthDashboardConnectIcsFileRoute: oauthDashboardConnectIcsFileRoute,\n    oauthDashboardConnectMicrosoftRoute: oauthDashboardConnectMicrosoftRoute,\n    oauthDashboardConnectOutlookRoute: oauthDashboardConnectOutlookRoute,\n  }\n\nconst oauthDashboardConnectRouteRouteWithChildren =\n  oauthDashboardConnectRouteRoute._addFileChildren(\n    oauthDashboardConnectRouteRouteChildren,\n  )\n\ninterface oauthDashboardRouteRouteChildren {\n  oauthDashboardConnectRouteRoute: typeof oauthDashboardConnectRouteRouteWithChildren\n}\n\nconst oauthDashboardRouteRouteChildren: oauthDashboardRouteRouteChildren = {\n  oauthDashboardConnectRouteRoute: oauthDashboardConnectRouteRouteWithChildren,\n}\n\nconst oauthDashboardRouteRouteWithChildren =\n  oauthDashboardRouteRoute._addFileChildren(oauthDashboardRouteRouteChildren)\n\ninterface oauthRouteRouteChildren {\n  oauthAuthRouteRoute: typeof oauthAuthRouteRouteWithChildren\n  oauthDashboardRouteRoute: typeof oauthDashboardRouteRouteWithChildren\n  oauthOauthConsentRoute: typeof oauthOauthConsentRoute\n}\n\nconst oauthRouteRouteChildren: oauthRouteRouteChildren = {\n  oauthAuthRouteRoute: oauthAuthRouteRouteWithChildren,\n  oauthDashboardRouteRoute: oauthDashboardRouteRouteWithChildren,\n  oauthOauthConsentRoute: oauthOauthConsentRoute,\n}\n\nconst oauthRouteRouteWithChildren = oauthRouteRoute._addFileChildren(\n  oauthRouteRouteChildren,\n)\n\nconst rootRouteChildren: RootRouteChildren = {\n  authRouteRoute: authRouteRouteWithChildren,\n  dashboardRouteRoute: dashboardRouteRouteWithChildren,\n  marketingRouteRoute: marketingRouteRouteWithChildren,\n  oauthRouteRoute: oauthRouteRouteWithChildren,\n}\nexport const routeTree = rootRouteImport\n  ._addFileChildren(rootRouteChildren)\n  ._addFileTypes<FileRouteTypes>()\n"
  },
  {
    "path": "applications/web/src/router.ts",
    "content": "import { createRouter } from \"@tanstack/react-router\";\nimport { routeTree } from \"./generated/tanstack/route-tree.generated\";\nimport { HttpError } from \"./lib/fetcher\";\nimport { getPublicRuntimeConfig, getServerPublicRuntimeConfig } from \"./lib/runtime-config\";\nimport type { PublicRuntimeConfig } from \"./lib/runtime-config\";\nimport { hasSessionCookie } from \"./lib/session-cookie\";\nimport type { AppRouterContext } from \"./lib/router-context\";\n\nimport type { ViteAssets } from \"./lib/router-context\";\n\ninterface CreateAppRouterOptions {\n  request?: Request;\n  viteAssets?: ViteAssets;\n}\n\nfunction getConfiguredApiOrigin(): string | undefined {\n  if (typeof window === \"undefined\") {\n    return process.env.VITE_API_URL;\n  }\n\n  return import.meta.env.VITE_API_URL;\n}\n\nfunction resolveApiOrigin(request: Request | undefined): string {\n  const configuredApiOrigin = getConfiguredApiOrigin();\n  if (configuredApiOrigin && configuredApiOrigin.length > 0) {\n    return configuredApiOrigin;\n  }\n\n  if (request) {\n    return new URL(request.url).origin;\n  }\n\n  if (typeof window !== \"undefined\") {\n    return window.location.origin;\n  }\n\n  throw new Error(\"Unable to resolve API origin.\");\n}\n\nfunction resolveWebOrigin(request: Request | undefined): string {\n  if (request) {\n    return new URL(request.url).origin;\n  }\n\n  if (typeof window !== \"undefined\") {\n    return window.location.origin;\n  }\n\n  throw new Error(\"Unable to resolve web origin.\");\n}\n\nfunction createJsonFetcher(\n  requestCookie: string | null,\n  origin: string,\n): AppRouterContext[\"fetchApi\"] {\n  return async <T>(path: string, init: RequestInit = {}): Promise<T> => {\n    const requestHeaders = new Headers(init.headers);\n    if (requestCookie && !requestHeaders.has(\"cookie\")) {\n      requestHeaders.set(\"cookie\", requestCookie);\n    }\n\n    const absoluteUrl = new URL(path, origin).toString();\n    const response = await fetch(absoluteUrl, {\n      ...init,\n      credentials: \"include\",\n      headers: requestHeaders,\n    });\n\n    if (!response.ok) {\n      throw new HttpError(response.status, path);\n    }\n\n    return response.json();\n  };\n}\n\nfunction createApiFetcher(\n  request: Request | undefined,\n): AppRouterContext[\"fetchApi\"] {\n  const requestCookie = request?.headers.get(\"cookie\") ?? null;\n  const apiOrigin = resolveApiOrigin(request);\n  return createJsonFetcher(requestCookie, apiOrigin);\n}\n\nfunction createWebFetcher(\n  request: Request | undefined,\n): AppRouterContext[\"fetchWeb\"] {\n  const requestCookie = request?.headers.get(\"cookie\") ?? null;\n  const webOrigin = resolveWebOrigin(request);\n  return createJsonFetcher(requestCookie, webOrigin);\n}\n\nfunction resolveRuntimeConfig(request: Request | undefined): PublicRuntimeConfig {\n  if (request) {\n    return getServerPublicRuntimeConfig({\n      environment: process.env,\n      countryCode: request.headers.get(\"cf-ipcountry\"),\n    });\n  }\n\n  return getPublicRuntimeConfig();\n}\n\nfunction createSessionChecker(\n  request: Request | undefined,\n): () => boolean {\n  if (request) {\n    const cookieHeader = request.headers.get(\"cookie\") ?? undefined;\n    const serverHasSession = hasSessionCookie(cookieHeader);\n    return () => serverHasSession;\n  }\n\n  return () => hasSessionCookie();\n}\n\nfunction buildRouterContext(\n  request: Request | undefined,\n  viteAssets: ViteAssets | undefined,\n): AppRouterContext {\n  return {\n    auth: {\n      hasSession: createSessionChecker(request),\n    },\n    fetchApi: createApiFetcher(request),\n    fetchWeb: createWebFetcher(request),\n    runtimeConfig: resolveRuntimeConfig(request),\n    viteAssets: viteAssets ?? null,\n  };\n}\n\nexport function createAppRouter(options: CreateAppRouterOptions = {}) {\n  const router = createRouter({\n    context: buildRouterContext(options.request, options.viteAssets),\n    defaultPreload: \"intent\",\n    routeTree,\n    scrollRestoration: false,\n  });\n\n  return router;\n}\n\ndeclare module \"@tanstack/react-router\" {\n  interface Register {\n    router: ReturnType<typeof createAppRouter>;\n  }\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/forgot-password.tsx",
    "content": "import { useState } from \"react\";\nimport { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport Mail from \"lucide-react/dist/esm/icons/mail\";\nimport { forgotPassword } from \"@/lib/auth\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { TextLink } from \"@/components/ui/primitives/text-link\";\nimport { AuthSwitchPrompt } from \"@/features/auth/components/auth-switch-prompt\";\n\nexport const Route = createFileRoute(\"/(auth)/forgot-password\")({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.supportsPasswordReset) {\n      throw redirect({ to: \"/login\" });\n    }\n    return capabilities;\n  },\n  component: ForgotPasswordPage,\n});\n\nfunction ForgotPasswordPage() {\n  const [status, setStatus] = useState<\"idle\" | \"loading\" | \"sent\">(\"idle\");\n  const [error, setError] = useState<string | null>(null);\n\n  if (status === \"sent\") return <SuccessState />;\n\n  const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const formData = new FormData(event.currentTarget);\n    const email = String(formData.get(\"email\") ?? \"\");\n    if (!email) return;\n\n    setStatus(\"loading\");\n    setError(null);\n\n    try {\n      await forgotPassword(email);\n      track(ANALYTICS_EVENTS.password_reset_requested);\n      setStatus(\"sent\");\n    } catch (err) {\n      setError(resolveErrorMessage(err, \"Failed to send reset email\"));\n      setStatus(\"idle\");\n    }\n  };\n\n  return (\n    <>\n      <div className=\"flex flex-col py-2\">\n        <Heading2 as=\"span\" className=\"text-center\">Reset password</Heading2>\n        <Text size=\"sm\" tone=\"muted\" align=\"center\">\n          Enter your email and we&apos;ll send you a link to reset your password.\n        </Text>\n      </div>\n      {error && <Text size=\"sm\" tone=\"danger\" align=\"center\">{error}</Text>}\n      <form onSubmit={handleSubmit} className=\"contents\">\n        <Input name=\"email\" type=\"email\" placeholder=\"johndoe+keeper@example.com\" required autoComplete=\"email\" />\n        <Button type=\"submit\" className=\"w-full justify-center\" disabled={status === \"loading\"}>\n          <ButtonText>Send reset link</ButtonText>\n        </Button>\n      </form>\n      <AuthSwitchPrompt>\n        Remember your password? <TextLink to=\"/login\">Sign in</TextLink>\n      </AuthSwitchPrompt>\n    </>\n  );\n}\n\nfunction SuccessState() {\n  return (\n    <>\n      <div className=\"flex flex-col items-center gap-3 py-2\">\n        <div className=\"p-3 rounded-full bg-background-hover\">\n          <Mail size={24} className=\"text-foreground-muted\" />\n        </div>\n        <div className=\"flex flex-col\">\n          <Heading2 as=\"span\" className=\"text-center\">Check your email</Heading2>\n          <Text size=\"sm\" tone=\"muted\" align=\"center\">\n            If an account exists with that email, we sent you a password reset link.\n          </Text>\n        </div>\n      </div>\n      <TextLink to=\"/login\">Back to sign in</TextLink>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/login.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { AuthForm, type AuthScreenCopy } from \"@/features/auth/components/auth-form\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport {\n  getMcpAuthorizationSearch,\n  toStringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\n\nexport const Route = createFileRoute(\"/(auth)/login\")({\n  loader: ({ context }) => fetchAuthCapabilitiesWithApi(context.fetchApi),\n  component: LoginPage,\n  validateSearch: toStringSearchParams,\n});\n\nconst copy: AuthScreenCopy = {\n  heading: \"Welcome back\",\n  subtitle: \"Sign in to your Keeper.sh account\",\n  oauthActionLabel: \"Sign in\",\n  submitLabel: \"Sign in\",\n  switchPrompt: \"Don't have an account yet?\",\n  switchCta: \"Register\",\n  switchTo: \"/register\",\n  action: \"signIn\",\n};\n\nfunction LoginPage() {\n  const capabilities = Route.useLoaderData();\n  const search = Route.useSearch();\n\n  return (\n    <AuthForm\n      capabilities={capabilities}\n      copy={copy}\n      authorizationSearch={getMcpAuthorizationSearch(search) ?? undefined}\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/register.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { AuthForm, type AuthScreenCopy } from \"@/features/auth/components/auth-form\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport {\n  getMcpAuthorizationSearch,\n  toStringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\n\nexport const Route = createFileRoute(\"/(auth)/register\")({\n  loader: ({ context }) => fetchAuthCapabilitiesWithApi(context.fetchApi),\n  component: RegisterPage,\n  validateSearch: toStringSearchParams,\n});\n\nconst copy: AuthScreenCopy = {\n  heading: \"Create your account\",\n  subtitle: \"Get started with Keeper.sh for free\",\n  oauthActionLabel: \"Sign up\",\n  submitLabel: \"Sign up\",\n  switchPrompt: \"Already have an account?\",\n  switchCta: \"Sign in\",\n  switchTo: \"/login\",\n  action: \"signUp\",\n};\n\nfunction RegisterPage() {\n  const capabilities = Route.useLoaderData();\n  const search = Route.useSearch();\n\n  return (\n    <AuthForm\n      capabilities={capabilities}\n      copy={copy}\n      authorizationSearch={getMcpAuthorizationSearch(search) ?? undefined}\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/reset-password.tsx",
    "content": "import { useState } from \"react\";\nimport { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport CircleCheck from \"lucide-react/dist/esm/icons/circle-check\";\nimport { resetPassword } from \"@/lib/auth\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { TextLink } from \"@/components/ui/primitives/text-link\";\nimport { AuthSwitchPrompt } from \"@/features/auth/components/auth-switch-prompt\";\n\ntype SearchParams = { token?: string };\n\nexport const Route = createFileRoute(\"/(auth)/reset-password\")({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.supportsPasswordReset) {\n      throw redirect({ to: \"/login\" });\n    }\n    return capabilities;\n  },\n  component: ResetPasswordPage,\n  validateSearch: (search: Record<string, unknown>): SearchParams => ({\n    token: typeof search.token === \"string\" ? search.token : undefined,\n  }),\n});\n\nfunction ResetPasswordPage() {\n  const { token } = Route.useSearch();\n\n  if (!token) return <InvalidTokenState />;\n  return <ResetPasswordForm token={token} />;\n}\n\nfunction ResetPasswordForm({ token }: { token: string }) {\n  const [status, setStatus] = useState<\"idle\" | \"loading\" | \"success\">(\"idle\");\n  const [error, setError] = useState<string | null>(null);\n\n  const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const formData = new FormData(event.currentTarget);\n    const password = String(formData.get(\"password\") ?? \"\");\n    const confirmPassword = String(formData.get(\"confirmPassword\") ?? \"\");\n\n    if (!password || !confirmPassword) return;\n    if (password !== confirmPassword) {\n      setError(\"Passwords do not match.\");\n      return;\n    }\n\n    setStatus(\"loading\");\n    setError(null);\n\n    try {\n      await resetPassword(token, password);\n      track(ANALYTICS_EVENTS.password_reset_completed);\n      setStatus(\"success\");\n    } catch (err) {\n      setError(resolveErrorMessage(err, \"Failed to reset password\"));\n      setStatus(\"idle\");\n    }\n  };\n\n  if (status === \"success\") return <SuccessState />;\n\n  return (\n    <>\n      <div className=\"flex flex-col py-2\">\n        <Heading2 as=\"span\" className=\"text-center\">Set new password</Heading2>\n        <Text size=\"sm\" tone=\"muted\" align=\"center\">\n          Enter your new password below.\n        </Text>\n      </div>\n      {error && <Text size=\"sm\" tone=\"danger\" align=\"center\">{error}</Text>}\n      <form onSubmit={handleSubmit} className=\"contents\">\n        <Input\n          name=\"password\"\n          type=\"password\"\n          placeholder=\"New password\"\n          required\n          minLength={8}\n          maxLength={128}\n          autoComplete=\"new-password\"\n        />\n        <Input\n          name=\"confirmPassword\"\n          type=\"password\"\n          placeholder=\"Confirm password\"\n          required\n          minLength={8}\n          maxLength={128}\n          autoComplete=\"new-password\"\n        />\n        <Button type=\"submit\" className=\"w-full justify-center\" disabled={status === \"loading\"}>\n          <ButtonText>Reset password</ButtonText>\n        </Button>\n      </form>\n    </>\n  );\n}\n\nfunction SuccessState() {\n  return (\n    <>\n      <div className=\"flex flex-col items-center gap-3 py-2\">\n        <div className=\"p-3 rounded-full bg-background-muted\">\n          <CircleCheck size={24} className=\"text-foreground-muted\" />\n        </div>\n        <div className=\"flex flex-col\">\n          <Heading2 as=\"span\" className=\"text-center\">Password reset</Heading2>\n          <Text size=\"sm\" tone=\"muted\" align=\"center\">\n            Your password has been successfully reset.\n          </Text>\n        </div>\n      </div>\n      <AuthSwitchPrompt>\n        <TextLink to=\"/login\">Back to sign in</TextLink>\n      </AuthSwitchPrompt>\n    </>\n  );\n}\n\nfunction InvalidTokenState() {\n  return (\n    <>\n      <div className=\"flex flex-col py-2\">\n        <Heading2 as=\"span\" className=\"text-center\">Invalid link</Heading2>\n        <Text size=\"sm\" tone=\"muted\" align=\"center\">\n          This password reset link is invalid or has expired.\n        </Text>\n      </div>\n      <AuthSwitchPrompt>\n        <TextLink to=\"/forgot-password\">Request a new link</TextLink>\n      </AuthSwitchPrompt>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/route.tsx",
    "content": "import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\";\nimport { getMcpAuthorizationSearch } from \"@/lib/mcp-auth-flow\";\nimport { resolveAuthRedirect } from \"@/lib/route-access-guards\";\n\nexport const Route = createFileRoute(\"/(auth)\")({\n  beforeLoad: ({ context, search }) => {\n    if (getMcpAuthorizationSearch(search)) {\n      return;\n    }\n\n    const redirectTarget = resolveAuthRedirect(context.auth.hasSession());\n    if (redirectTarget) {\n      throw redirect({ to: redirectTarget });\n    }\n  },\n  component: AuthLayout,\n  head: () => ({\n    meta: [{ content: \"noindex, nofollow\", name: \"robots\" }],\n  }),\n});\n\nfunction AuthLayout() {\n  return (\n    <div className=\"flex flex-col items-center justify-center min-h-dvh px-2\">\n      <div className=\"flex flex-col gap-2 w-full max-w-xs\">\n        <Outlet />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/verify-authentication.tsx",
    "content": "import { useEffect } from \"react\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport { useSession } from \"@/hooks/use-session\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nexport const Route = createFileRoute(\"/(auth)/verify-authentication\")({\n  component: VerifyAuthenticationPage,\n});\n\nfunction VerifyAuthenticationPage() {\n  const navigate = useNavigate();\n  const { user, isLoading } = useSession();\n\n  useEffect(() => {\n    if (!isLoading && user) navigate({ to: \"/dashboard\" });\n  }, [user, isLoading, navigate]);\n\n  return (\n    <Text size=\"sm\" tone=\"muted\" align=\"center\">Redirecting...</Text>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(auth)/verify-email.tsx",
    "content": "import { useState } from \"react\";\nimport { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport Mail from \"lucide-react/dist/esm/icons/mail\";\nimport { authClient } from \"@/lib/auth-client\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\nexport const Route = createFileRoute(\"/(auth)/verify-email\")({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.requiresEmailVerification) {\n      throw redirect({ to: \"/login\" });\n    }\n    return capabilities;\n  },\n  component: VerifyEmailPage,\n});\n\nfunction VerifyEmailPage() {\n  const [status, setStatus] = useState<\"idle\" | \"loading\" | \"sent\">(\"idle\");\n  const [error, setError] = useState<string | null>(null);\n\n  const [email] = useState(() => {\n    const stored = sessionStorage.getItem(\"pendingVerificationEmail\");\n    if (stored) sessionStorage.removeItem(\"pendingVerificationEmail\");\n    return stored;\n  });\n  const [callbackURL] = useState(() => {\n    const stored = sessionStorage.getItem(\"pendingVerificationCallbackUrl\");\n    if (stored) sessionStorage.removeItem(\"pendingVerificationCallbackUrl\");\n    return stored ?? \"/dashboard\";\n  });\n\n  const handleResend = async () => {\n    if (!email) return;\n\n    setStatus(\"loading\");\n    setError(null);\n\n    const { error } = await authClient.sendVerificationEmail({\n      callbackURL,\n      email,\n    });\n\n    if (error) {\n      setError(error.message ?? \"Failed to resend verification email\");\n      setStatus(\"idle\");\n      return;\n    }\n\n    setStatus(\"sent\");\n  };\n\n  return (\n    <>\n      <div className=\"flex flex-col items-center gap-3 py-2\">\n        <div className=\"p-3 rounded-full bg-background-muted\">\n          <Mail size={24} className=\"text-foreground-muted\" />\n        </div>\n        <div className=\"flex flex-col\">\n          <Heading2 as=\"span\" className=\"text-center\">Check your email</Heading2>\n          <Text size=\"sm\" tone=\"muted\" align=\"center\">\n            We sent a verification link to your email. Click the link to verify your account. Please check your spam or junk folder if you don't see it in your inbox.\n          </Text>\n        </div>\n      </div>\n      {error && (\n        <Text size=\"sm\" tone=\"danger\" align=\"center\">{error}</Text>\n      )}\n      {status === \"sent\" && (\n        <Text size=\"sm\" tone=\"muted\" align=\"center\">Verification email sent.</Text>\n      )}\n      <Button\n        variant=\"border\"\n        className=\"w-full justify-center\"\n        onClick={handleResend}\n        disabled={!email || status === \"loading\"}\n      >\n        <ButtonText>Resend verification email</ButtonText>\n      </Button>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/accounts/$accountId.$calendarId.tsx",
    "content": "import { use, useEffect, useMemo } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport useSWR, { preload, useSWRConfig } from \"swr\";\nimport CheckIcon from \"lucide-react/dist/esm/icons/check\";\nimport { useAtomValue, useStore } from \"jotai\";\nimport { useEntitlements, useMutateEntitlements, canAddMore } from \"@/hooks/use-entitlements\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { UpgradeHint, PremiumFeatureGate } from \"@/components/ui/primitives/upgrade-hint\";\nimport { Pagination, PaginationPrevious, PaginationNext } from \"@/components/ui/primitives/pagination\";\nimport { RouteShell } from \"@/components/ui/shells/route-shell\";\nimport { MetadataRow } from \"@/features/dashboard/components/metadata-row\";\nimport { ProviderIcon } from \"@/components/ui/primitives/provider-icon\";\nimport { DashboardHeading1, DashboardSection } from \"@/components/ui/primitives/dashboard-heading\";\nimport { apiFetch, fetcher } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { serializedPatch, serializedCall } from \"@/lib/serialized-mutate\";\nimport { formatDate } from \"@/lib/time\";\nimport { canPull, canPush } from \"@/utils/calendars\";\nimport type { CalendarAccount, CalendarDetail, CalendarSource } from \"@/types/api\";\nimport {\n  NavigationMenu,\n  NavigationMenuEmptyItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport {\n  NavigationMenuEditableItem,\n  NavigationMenuEditableTemplateItem,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-editable\";\nimport { MenuVariantContext, ItemDisabledContext } from \"@/components/ui/composites/navigation-menu/navigation-menu.contexts\";\nimport {\n  DISABLED_LABEL_TONE,\n  LABEL_TONE,\n  navigationMenuItemStyle,\n  navigationMenuCheckbox,\n  navigationMenuCheckboxIcon,\n  navigationMenuToggleTrack,\n  navigationMenuToggleThumb,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu.styles\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { TemplateText } from \"@/components/ui/primitives/template-text\";\nimport {\n  calendarDetailAtom,\n  calendarDetailLoadedAtom,\n  calendarDetailErrorAtom,\n  calendarNameAtom,\n  calendarProviderAtom,\n  calendarTypeAtom,\n  customEventNameAtom,\n  excludeEventNameAtom,\n  excludeFieldAtoms,\n} from \"@/state/calendar-detail\";\nimport type { ExcludeField } from \"@/state/calendar-detail\";\nimport {\n  destinationIdsAtom,\n  selectDestinationInclusion,\n} from \"@/state/destination-ids\";\n\n\nexport const Route = createFileRoute(\n  \"/(dashboard)/dashboard/accounts/$accountId/$calendarId\",\n)({\n  component: CalendarDetailPage,\n});\n\ninterface SyncSetting {\n  field: ExcludeField;\n  label: string;\n  matchesField: boolean;\n}\n\nconst SYNC_SETTINGS: SyncSetting[] = [\n  { field: \"excludeEventDescription\", label: \"Sync Event Description\", matchesField: false },\n  { field: \"excludeEventLocation\", label: \"Sync Event Location\", matchesField: false },\n];\n\nconst EXCLUSION_SETTINGS: SyncSetting[] = [\n  { field: \"excludeAllDayEvents\", label: \"Exclude All Day Events\", matchesField: true },\n];\n\nconst PROVIDER_EXCLUSION_SETTINGS: SyncSetting[] = [\n  { field: \"excludeFocusTime\", label: \"Exclude Focus Time Events\", matchesField: true },\n  { field: \"excludeOutOfOffice\", label: \"Exclude Out of Office Events\", matchesField: true },\n];\n\nconst PROVIDERS_WITH_EXTRA_SETTINGS = new Set([\"google\"]);\n\nfunction patchSource(\n  store: ReturnType<typeof useStore>,\n  calendarId: string,\n  patch: Record<string, unknown>,\n) {\n  const swrKey = `/api/sources/${calendarId}`;\n  serializedPatch(\n    swrKey,\n    patch,\n    (mergedPatch) => {\n      return apiFetch(swrKey, {\n        method: \"PATCH\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(mergedPatch),\n      });\n    },\n    () => {\n      fetcher<CalendarDetail>(swrKey).then((serverState) => {\n        store.set(calendarDetailAtom, serverState);\n      });\n    },\n  );\n}\n\nfunction useSeedCalendarDetail(calendarId: string, calendar: CalendarDetail | undefined) {\n  const store = useStore();\n\n  useEffect(() => {\n    if (!calendar) return;\n    if (store.get(calendarDetailLoadedAtom) === calendarId) return;\n\n    store.set(calendarDetailAtom, calendar);\n    store.set(calendarDetailLoadedAtom, calendarId);\n    store.set(calendarDetailErrorAtom, null);\n  }, [calendarId, calendar, store]);\n}\n\nfunction CalendarDetailPage() {\n  const { accountId, calendarId } = Route.useParams();\n  const { data: account, isLoading: accountLoading, error: accountError, mutate: mutateAccount } = useSWR<CalendarAccount>(`/api/accounts/${accountId}`);\n  const { data: calendar, isLoading: calendarLoading, error: calendarError } = useSWR<CalendarDetail>(`/api/sources/${calendarId}`);\n  const { mutate: mutateCalendar } = useSWRConfig();\n\n  useSeedCalendarDetail(calendarId, calendar);\n\n  const isLoading = accountLoading || calendarLoading;\n  const error = accountError || calendarError;\n\n  if (error || isLoading || !account || !calendar) {\n    if (error) return <RouteShell backFallback={`/dashboard/accounts/${accountId}`} status=\"error\" onRetry={async () => { await Promise.all([mutateAccount(), mutateCalendar(`/api/sources/${calendarId}`)]); }} />;\n    return <RouteShell backFallback={`/dashboard/accounts/${accountId}`} status=\"loading\" />;\n  }\n\n  const isPullCapable = canPull(calendar);\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <div className=\"flex items-center justify-between\">\n        <BackButton fallback={`/dashboard/accounts/${accountId}`} />\n        <CalendarPrevNext calendarId={calendarId} />\n      </div>\n      <CalendarHeader account={account} />\n      <RenameSection calendarId={calendarId} />\n      {isPullCapable && (\n        <>\n          <DashboardSection\n            title=\"Send Events to Calendars\"\n            description=\"Select which calendars should receive events from this calendar.\"\n          />\n          <DestinationsSection calendarId={calendarId} />\n        </>\n      )}\n      {isPullCapable && <SyncSettingsSection calendarId={calendarId} />}\n      {isPullCapable && <ExclusionsSection calendarId={calendarId} provider={calendar.provider} />}\n      <CalendarInfoSection account={account} accountId={accountId} />\n    </div>\n  );\n}\n\nfunction CalendarPrevNext({ calendarId }: { calendarId: string }) {\n  const { data: allCalendars } = useSWR<CalendarSource[]>(\"/api/sources\");\n  const calendars = allCalendars ?? [];\n\n  const currentIndex = calendars.findIndex((c) => c.id === calendarId);\n  const prev = currentIndex > 0 ? calendars[currentIndex - 1] : null;\n  const next = currentIndex < calendars.length - 1 ? calendars[currentIndex + 1] : null;\n\n  useEffect(() => {\n    if (prev) preload(`/api/sources/${prev.id}`, fetcher);\n    if (next) preload(`/api/sources/${next.id}`, fetcher);\n  }, [prev, next]);\n\n  const toCalendar = (c: CalendarSource) => `/dashboard/accounts/${c.accountId}/${c.id}`;\n\n  return (\n    <Pagination>\n      <PaginationPrevious to={prev ? toCalendar(prev) : undefined} />\n      <PaginationNext to={next ? toCalendar(next) : undefined} />\n    </Pagination>\n  );\n}\n\nfunction CalendarHeader({ account }: { account: CalendarAccount }) {\n  const provider = useAtomValue(calendarProviderAtom);\n  const calendarType = useAtomValue(calendarTypeAtom);\n\n  return (\n    <div className=\"flex flex-col px-0.5 pt-4\">\n      <CalendarTitle />\n      <div className=\"flex items-center gap-1.5 pt-0.5\">\n        <ProviderIcon provider={provider} calendarType={calendarType} size={14} />\n        <Text className=\"truncate overflow-hidden\" size=\"sm\" tone=\"muted\">{account.accountLabel}</Text>\n      </div>\n    </div>\n  );\n}\n\nfunction CalendarTitle() {\n  const name = useAtomValue(calendarNameAtom);\n  return <DashboardHeading1 className=\"select-none\">{name}</DashboardHeading1>;\n}\n\nfunction RenameSection({ calendarId }: { calendarId: string }) {\n  return (\n    <>\n      <DashboardSection\n        title=\"Calendar Name\"\n        description=\"Click below to rename the calendar within Keeper.sh. This does not affect the calendar outside of the Keeper.sh ecosystem.\"\n      />\n      <NavigationMenu>\n        <RenameItem calendarId={calendarId} />\n      </NavigationMenu>\n    </>\n  );\n}\n\nfunction RenameItem({ calendarId }: { calendarId: string }) {\n  const store = useStore();\n  const name = useAtomValue(calendarNameAtom);\n\n  return (\n    <NavigationMenuEditableItem\n      value={name}\n      onCommit={(newName) => {\n        track(ANALYTICS_EVENTS.calendar_renamed);\n        store.set(calendarDetailAtom, (prev) => (prev ? { ...prev, name: newName } : prev));\n        patchSource(store, calendarId, { name: newName });\n      }}\n    >\n      <RenameItemValue />\n    </NavigationMenuEditableItem>\n  );\n}\n\nfunction RenameItemValue() {\n  const name = useAtomValue(calendarNameAtom);\n  const variant = use(MenuVariantContext);\n  const disabled = use(ItemDisabledContext);\n\n  return (\n    <Text\n      size=\"sm\"\n      tone={(disabled ? DISABLED_LABEL_TONE : LABEL_TONE)[variant ?? \"default\"]}\n      className=\"min-w-0 truncate\"\n    >\n      {name}\n    </Text>\n  );\n}\n\nfunction DestinationsSeed({ calendarId }: { calendarId: string }) {\n  const { data } = useSWR<{ destinationIds: string[] }>(\n    `/api/sources/${calendarId}/destinations`,\n  );\n  const store = useStore();\n\n  useEffect(() => {\n    store.set(destinationIdsAtom, new Set(data?.destinationIds));\n  }, [calendarId, data, store]);\n\n  return null;\n}\n\nfunction DestinationsSection({ calendarId }: { calendarId: string }) {\n  const { data: allCalendars } = useSWR<CalendarSource[]>(\"/api/sources\");\n  const { data: entitlements } = useEntitlements();\n  const atLimit = !canAddMore(entitlements?.mappings);\n\n  const pushCalendars = useMemo(\n    () => (allCalendars ?? []).filter((calendar) => canPush(calendar) && calendar.id !== calendarId),\n    [allCalendars, calendarId],\n  );\n\n  return (\n    <>\n      <DestinationsSeed calendarId={calendarId} />\n      <NavigationMenu>\n        {pushCalendars.length === 0 ? (\n          <NavigationMenuEmptyItem>No destination calendars available</NavigationMenuEmptyItem>\n        ) : (\n          pushCalendars.map((calendar) => (\n            <DestinationCheckboxItem\n              key={calendar.id}\n              calendarId={calendarId}\n              destinationId={calendar.id}\n              name={calendar.name}\n              provider={calendar.provider}\n              calendarType={calendar.calendarType}\n            />\n          ))\n        )}\n      </NavigationMenu>\n      {atLimit && <UpgradeHint>Mapping limit reached.</UpgradeHint>}\n    </>\n  );\n}\n\nfunction DestinationCheckboxItem({\n  calendarId,\n  destinationId,\n  name,\n  provider,\n  calendarType,\n}: {\n  calendarId: string;\n  destinationId: string;\n  name: string;\n  provider: string;\n  calendarType: string;\n}) {\n  const store = useStore();\n  const variant = use(MenuVariantContext);\n  const { mutate } = useSWRConfig();\n  const { data: entitlements } = useEntitlements();\n  const { adjustMappingCount, revalidateEntitlements } = useMutateEntitlements();\n\n  const checkedAtom = useMemo(() => selectDestinationInclusion(destinationId), [destinationId]);\n  const checked = useAtomValue(checkedAtom);\n  const atLimit = !canAddMore(entitlements?.mappings);\n  const disabled = atLimit && !checked;\n\n  const handleClick = () => {\n    if (disabled) return;\n\n    const currentIds = store.get(destinationIdsAtom);\n    const willCheck = !currentIds.has(destinationId);\n    track(ANALYTICS_EVENTS.destination_toggled, { enabled: willCheck });\n    const updatedSet = new Set(currentIds);\n\n    if (willCheck) {\n      updatedSet.add(destinationId);\n      adjustMappingCount(1);\n    } else {\n      updatedSet.delete(destinationId);\n      adjustMappingCount(-1);\n    }\n\n    store.set(destinationIdsAtom, updatedSet);\n\n    const swrKey = `/api/sources/${calendarId}/destinations`;\n    serializedCall(swrKey, () => {\n      const latestIds = Array.from(store.get(destinationIdsAtom));\n      return mutate(\n        swrKey,\n        async () => {\n          await apiFetch(swrKey, {\n            method: \"PUT\",\n            headers: { \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({ calendarIds: latestIds }),\n          });\n          return { destinationIds: latestIds };\n        },\n        {\n          optimisticData: { destinationIds: latestIds },\n          rollbackOnError: true,\n          revalidate: false,\n        },\n      ).catch(() => {\n        void mutate(swrKey);\n      }).finally(() => {\n        void revalidateEntitlements();\n      });\n    });\n  };\n\n  return (\n    <li>\n      <ItemDisabledContext value={disabled}>\n        <button\n          type=\"button\"\n          role=\"checkbox\"\n          disabled={disabled}\n          onClick={handleClick}\n          className={navigationMenuItemStyle({ variant, interactive: !disabled })}\n        >\n          <NavigationMenuItemIcon>\n            <ProviderIcon provider={provider} calendarType={calendarType} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>{name}</NavigationMenuItemLabel>\n          <DestinationCheckboxIndicator destinationId={destinationId} />\n        </button>\n      </ItemDisabledContext>\n    </li>\n  );\n}\n\nfunction DestinationCheckboxIndicator({ destinationId }: { destinationId: string }) {\n  const checkedAtom = useMemo(() => selectDestinationInclusion(destinationId), [destinationId]);\n  const checked = useAtomValue(checkedAtom);\n  const variant = use(MenuVariantContext);\n\n  return (\n    <div className={navigationMenuCheckbox({ variant, checked, className: \"ml-auto\" })}>\n      {checked && <CheckIcon size={12} className={navigationMenuCheckboxIcon({ variant })} />}\n    </div>\n  );\n}\n\nfunction SyncSettingsSection({ calendarId }: { calendarId: string }) {\n  const { data: entitlements } = useEntitlements();\n  const locked = entitlements ? !entitlements.canUseEventFilters : false;\n\n  return (\n    <>\n      <DashboardSection\n        title=\"Sync Settings\"\n        description={<>Choose which event details are synced to destination calendars. Use <Text as=\"span\" size=\"sm\" className=\"text-template inline\">{\"{{calendar_name}}\"}</Text> or <Text as=\"span\" size=\"sm\" className=\"text-template inline\">{\"{{event_name}}\"}</Text> in text fields for dynamic values.</>}\n      />\n      <PremiumFeatureGate locked={locked} hint=\"Event filters are a Pro feature.\">\n        <NavigationMenu>\n          <SyncEventNameTemplateItem calendarId={calendarId} locked={locked} />\n          <SyncEventNameToggle calendarId={calendarId} locked={locked} />\n          {SYNC_SETTINGS.map((setting) => (\n            <ExcludeFieldToggle\n              key={setting.field}\n              calendarId={calendarId}\n              field={setting.field}\n              label={setting.label}\n              matchesField={setting.matchesField}\n              locked={locked}\n            />\n          ))}\n        </NavigationMenu>\n      </PremiumFeatureGate>\n    </>\n  );\n}\n\nfunction SyncEventNameDisabledProvider({ locked, children }: { locked: boolean; children: React.ReactNode }) {\n  const excludeEventName = useAtomValue(excludeEventNameAtom);\n  return <ItemDisabledContext value={locked || !excludeEventName}>{children}</ItemDisabledContext>;\n}\n\nfunction SyncEventNameTemplateItem({ calendarId, locked }: { calendarId: string; locked: boolean }) {\n  const store = useStore();\n  const customEventName = useAtomValue(customEventNameAtom);\n\n  return (\n    <SyncEventNameDisabledProvider locked={locked}>\n      <NavigationMenuEditableTemplateItem\n        label=\"Event Name\"\n        disabled={locked}\n        value={customEventName || \"{{event_name}}\"}\n        renderInput={(live) => (\n          <SyncEventNameTemplateInput template={live} />\n        )}\n        onCommit={(customEventName) => {\n          store.set(calendarDetailAtom, (prev) => (prev ? { ...prev, customEventName } : prev));\n          patchSource(store, calendarId, { customEventName });\n        }}\n      >\n        <SyncEventNameTemplateValue />\n      </NavigationMenuEditableTemplateItem>\n    </SyncEventNameDisabledProvider>\n  );\n}\n\nfunction SyncEventNameTemplateInput({ template }: { template: string }) {\n  return <TemplateText template={template} variables={TEMPLATE_VARIABLES} />;\n}\n\nconst TEMPLATE_VARIABLES = { calendar_name: \"Calendar Name\", event_name: \"Event Name\" };\n\nfunction SyncEventNameTemplateValue() {\n  const customEventName = useAtomValue(customEventNameAtom);\n  const excludeEventName = useAtomValue(excludeEventNameAtom);\n  const disabled = !excludeEventName;\n  const template = customEventName || \"{{event_name}}\";\n\n  return (\n    <Text\n      size=\"sm\"\n      tone={disabled ? \"disabled\" : \"muted\"}\n      className=\"min-w-0 truncate flex-1 text-right\"\n    >\n      <TemplateText\n        template={template}\n        variables={TEMPLATE_VARIABLES}\n        disabled={disabled}\n      />\n    </Text>\n  );\n}\n\nfunction SyncEventNameToggle({ calendarId, locked }: { calendarId: string; locked: boolean }) {\n  const store = useStore();\n  const variant = use(MenuVariantContext);\n\n  const handleClick = () => {\n    if (locked) return;\n    const current = store.get(calendarDetailAtom);\n    if (!current) return;\n\n    const patch = current.excludeEventName\n      ? { excludeEventName: false, customEventName: \"{{event_name}}\" }\n      : { excludeEventName: true, customEventName: \"{{calendar_name}}\" };\n\n    track(ANALYTICS_EVENTS.calendar_setting_toggled, { field: \"excludeEventName\", enabled: !current.excludeEventName });\n    store.set(calendarDetailAtom, (prev) => (prev ? { ...prev, ...patch } : prev));\n    patchSource(store, calendarId, patch);\n  };\n\n  return (\n    <li>\n      <ItemDisabledContext value={locked}>\n        <button\n          type=\"button\"\n          role=\"switch\"\n          disabled={locked}\n          onClick={handleClick}\n          className={navigationMenuItemStyle({ variant, interactive: !locked })}\n        >\n          <NavigationMenuItemLabel>Sync Event Name</NavigationMenuItemLabel>\n          <SyncEventNameToggleIndicator disabled={locked} />\n        </button>\n      </ItemDisabledContext>\n    </li>\n  );\n}\n\nfunction SyncEventNameToggleIndicator({ disabled }: { disabled: boolean }) {\n  const excludeEventName = useAtomValue(excludeEventNameAtom);\n  const variant = use(MenuVariantContext);\n  const checked = !excludeEventName;\n\n  return (\n    <div className={navigationMenuToggleTrack({ variant, checked, disabled, className: \"ml-auto\" })}>\n      <div className={navigationMenuToggleThumb({ variant, checked })} />\n    </div>\n  );\n}\n\nfunction ExclusionsSection({ calendarId, provider }: { calendarId: string; provider: string }) {\n  const { data: entitlements } = useEntitlements();\n  const locked = entitlements ? !entitlements.canUseEventFilters : false;\n  const hasExtraSettings = PROVIDERS_WITH_EXTRA_SETTINGS.has(provider);\n  const exclusionSettings = hasExtraSettings\n    ? [...EXCLUSION_SETTINGS, ...PROVIDER_EXCLUSION_SETTINGS]\n    : EXCLUSION_SETTINGS;\n\n  return (\n    <>\n      <DashboardSection\n        title=\"Exclusions\"\n        description=\"Choose which event types to exclude from syncing.\"\n      />\n      <PremiumFeatureGate locked={locked} hint=\"Event exclusions are a Pro feature.\">\n        <NavigationMenu>\n          {exclusionSettings.map((setting) => (\n            <ExcludeFieldToggle\n              key={setting.field}\n              calendarId={calendarId}\n              field={setting.field}\n              label={setting.label}\n              matchesField={setting.matchesField}\n              locked={locked}\n            />\n          ))}\n        </NavigationMenu>\n      </PremiumFeatureGate>\n    </>\n  );\n}\n\nfunction ExcludeFieldToggle({\n  calendarId,\n  field,\n  label,\n  matchesField,\n  locked = false,\n}: {\n  calendarId: string;\n  field: ExcludeField;\n  label: string;\n  matchesField: boolean;\n  locked?: boolean;\n}) {\n  const store = useStore();\n  const variant = use(MenuVariantContext);\n\n  const handleClick = () => {\n    if (locked) return;\n    const current = store.get(calendarDetailAtom);\n    if (!current) return;\n\n    const newValue = !current[field];\n    track(ANALYTICS_EVENTS.calendar_setting_toggled, { field, enabled: newValue });\n    store.set(calendarDetailAtom, (prev) => (prev ? { ...prev, [field]: newValue } : prev));\n    patchSource(store, calendarId, { [field]: newValue });\n  };\n\n  return (\n    <li>\n      <ItemDisabledContext value={locked}>\n        <button\n          type=\"button\"\n          role=\"switch\"\n          disabled={locked}\n          onClick={handleClick}\n          className={navigationMenuItemStyle({ variant, interactive: !locked })}\n        >\n          <NavigationMenuItemLabel>{label}</NavigationMenuItemLabel>\n          <ExcludeFieldToggleIndicator field={field} matchesField={matchesField} disabled={locked} />\n        </button>\n      </ItemDisabledContext>\n    </li>\n  );\n}\n\nfunction ExcludeFieldToggleIndicator({ field, matchesField, disabled }: { field: ExcludeField; matchesField: boolean; disabled: boolean }) {\n  const raw = useAtomValue(excludeFieldAtoms[field]);\n  const variant = use(MenuVariantContext);\n  const checked = matchesField ? raw : !raw;\n\n  return (\n    <div className={navigationMenuToggleTrack({ variant, checked, disabled, className: \"ml-auto\" })}>\n      <div className={navigationMenuToggleThumb({ variant, checked })} />\n    </div>\n  );\n}\n\n\nfunction CalendarInfoSection({ account, accountId }: { account: CalendarAccount; accountId: string }) {\n  const calendar = useAtomValue(calendarDetailAtom);\n\n  if (!calendar) return null;\n\n  return (\n    <>\n      <DashboardSection\n        title=\"Calendar Information\"\n        description=\"View details about the calendar.\"\n      />\n      <NavigationMenu>\n        <MetadataRow label=\"Resource Type\" value=\"Calendar\" />\n        <MetadataRow label=\"Type\" value={calendar.calendarType} />\n        <MetadataRow label=\"Capabilities\" value={calendar.capabilities.join(\", \")} />\n        {calendar.originalName && (\n          <MetadataRow label=\"Original Source Name\" value={calendar.originalName} truncate />\n        )}\n        {calendar.url && (\n          <MetadataRow label=\"URL\" value={calendar.url} truncate />\n        )}\n        {calendar.calendarUrl && (\n          <MetadataRow label=\"Calendar URL\" value={calendar.calendarUrl} truncate />\n        )}\n        <MetadataRow label=\"Added\" value={formatDate(calendar.createdAt)} />\n        <MetadataRow\n          label=\"Account Identifier\"\n          value={account.accountIdentifier ?? \"\"}\n          truncate\n          to={`/dashboard/accounts/${accountId}`}\n        />\n      </NavigationMenu>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/accounts/$accountId.index.tsx",
    "content": "import { useEffect, useMemo, useState, useTransition } from \"react\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport useSWR, { preload, useSWRConfig } from \"swr\";\nimport Calendar from \"lucide-react/dist/esm/icons/calendar\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Pagination, PaginationPrevious, PaginationNext } from \"@/components/ui/primitives/pagination\";\nimport { RouteShell } from \"@/components/ui/shells/route-shell\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { MetadataRow } from \"@/features/dashboard/components/metadata-row\";\nimport { fetcher, apiFetch } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { formatDate } from \"@/lib/time\";\nimport { invalidateAccountsAndSources } from \"@/lib/swr\";\nimport type { CalendarAccount, CalendarSource } from \"@/types/api\";\nimport {\n  NavigationMenu,\n  NavigationMenuEmptyItem,\n  NavigationMenuButtonItem,\n  NavigationMenuLinkItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuItemTrailing,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { DeleteConfirmation } from \"@/components/ui/primitives/delete-confirmation\";\nimport { DashboardSection } from \"@/components/ui/primitives/dashboard-heading\";\nimport { pluralize } from \"@/lib/pluralize\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\n\nexport const Route = createFileRoute(\n  \"/(dashboard)/dashboard/accounts/$accountId/\",\n)({\n  component: AccountDetailPage,\n});\n\nfunction CalendarList({ calendars, accountId }: { calendars: CalendarSource[]; accountId: string }) {\n  if (calendars.length === 0) {\n    return <NavigationMenuEmptyItem>No calendars</NavigationMenuEmptyItem>;\n  }\n  return calendars.map((calendar) => (\n    <NavigationMenuLinkItem\n      key={calendar.id}\n      to={`/dashboard/accounts/${accountId}/${calendar.id}`}\n      onMouseEnter={() => preload(`/api/sources/${calendar.id}`, fetcher)}\n    >\n      <NavigationMenuItemIcon>\n        <Calendar size={15} />\n      </NavigationMenuItemIcon>\n      <NavigationMenuItemLabel>\n        {calendar.name}\n      </NavigationMenuItemLabel>\n      <NavigationMenuItemTrailing />\n    </NavigationMenuLinkItem>\n  ));\n}\n\nfunction AccountDetailPage() {\n  const { accountId } = Route.useParams();\n  const navigate = useNavigate();\n  const { mutate: globalMutate } = useSWRConfig();\n  const { data: account, isLoading: accountLoading, error: accountError } = useSWR<CalendarAccount>(\n    `/api/accounts/${accountId}`,\n  );\n  const { data: allCalendars, isLoading: calendarsLoading, error: calendarsError } = useSWR<CalendarSource[]>(\n    \"/api/sources\",\n  );\n\n  const [deleteOpen, setDeleteOpen] = useState(false);\n  const [isDeleting, startDeleteTransition] = useTransition();\n  const [deleteError, setDeleteError] = useState<string | null>(null);\n\n  const isLoading = accountLoading || calendarsLoading;\n  const error = accountError || calendarsError;\n\n  const handleConfirmDelete = () => {\n    setDeleteError(null);\n\n    startDeleteTransition(async () => {\n      try {\n        await apiFetch(`/api/accounts/${accountId}`, { method: \"DELETE\" });\n        if (account) {\n          track(ANALYTICS_EVENTS.calendar_account_deleted, { provider: account.provider });\n        }\n        await invalidateAccountsAndSources(globalMutate, `/api/accounts/${accountId}`);\n        navigate({ to: \"/dashboard\" });\n      } catch (err) {\n        setDeleteError(resolveErrorMessage(err, \"Failed to delete account.\"));\n      }\n    });\n  };\n\n  if (error || isLoading || !account) {\n    if (error) return <RouteShell status=\"error\" onRetry={async () => { await invalidateAccountsAndSources(globalMutate, `/api/accounts/${accountId}`); }} />;\n    return <RouteShell status=\"loading\" />;\n  }\n\n  const calendars = (allCalendars ?? []).filter(\n    (calendar) => calendar.accountId === accountId,\n  );\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <div className=\"flex items-center justify-between\">\n        <BackButton />\n        <AccountPrevNext accountId={accountId} />\n      </div>\n      <DashboardSection\n        title=\"Account Information\"\n        description=\"View details about the account and its calendars.\"\n      />\n      <NavigationMenu>\n        <MetadataRow label=\"Resource Type\" value=\"Account\" />\n        <MetadataRow label=\"Calendar Count\" value={String(calendars.length)} />\n        <MetadataRow label=\"Identifier\" value={account.accountIdentifier ?? \"\"} truncate />\n        <MetadataRow label=\"Provider\" value={account.providerName} />\n        <MetadataRow label=\"Authenticated\" value={account.authType} />\n        <MetadataRow label=\"Connected\" value={formatDate(account.createdAt)} />\n      </NavigationMenu>\n      <NavigationMenu>\n        <NavigationMenuButtonItem onClick={() => setDeleteOpen(true)}>\n          <Text size=\"sm\" tone=\"danger\">Delete Account</Text>\n        </NavigationMenuButtonItem>\n      </NavigationMenu>\n      <DashboardSection\n        title=\"Account Calendars\"\n        description={<>This account has {pluralize(calendars.length, \"calendar\")} attached to it, choose a calendar below to view more details and configure it.</>}\n      />\n      <NavigationMenu>\n        <CalendarList calendars={calendars} accountId={accountId} />\n      </NavigationMenu>\n      {deleteError && <Text size=\"sm\" tone=\"danger\">{deleteError}</Text>}\n      <DeleteConfirmation\n        title=\"Delete calendar account?\"\n        description=\"This will remove the account and all its calendars. Any sync profiles using these calendars will be affected.\"\n        open={deleteOpen}\n        onOpenChange={setDeleteOpen}\n        deleting={isDeleting}\n        onConfirm={handleConfirmDelete}\n      />\n    </div>\n  );\n}\n\nfunction AccountPrevNext({ accountId }: { accountId: string }) {\n  const { data: accounts } = useSWR<CalendarAccount[]>(\"/api/accounts\");\n\n  const currentIndex = useMemo(\n    () => (accounts ?? []).findIndex((a) => a.id === accountId),\n    [accounts, accountId],\n  );\n\n  const prev = accounts && currentIndex > 0 ? accounts[currentIndex - 1] : null;\n  const next = accounts && currentIndex < accounts.length - 1 ? accounts[currentIndex + 1] : null;\n\n  useEffect(() => {\n    if (prev) preload(`/api/accounts/${prev.id}`, fetcher);\n    if (next) preload(`/api/accounts/${next.id}`, fetcher);\n  }, [prev, next]);\n\n  if (!accounts || accounts.length <= 1) return null;\n\n  return (\n    <Pagination>\n      <PaginationPrevious to={prev ? `/dashboard/accounts/${prev.id}` : undefined} />\n      <PaginationNext to={next ? `/dashboard/accounts/${next.id}` : undefined} />\n    </Pagination>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/accounts/$accountId.setup.tsx",
    "content": "import { useState } from \"react\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport useSWR from \"swr\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { UpgradeHint } from \"@/components/ui/primitives/upgrade-hint\";\nimport { DashboardSection } from \"@/components/ui/primitives/dashboard-heading\";\nimport { Button, LinkButton, ButtonText } from \"@/components/ui/primitives/button\";\nimport { apiFetch } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { useEntitlements, useMutateEntitlements, canAddMore } from \"@/hooks/use-entitlements\";\nimport type { CalendarSource } from \"@/types/api\";\nimport {\n  NavigationMenu,\n  NavigationMenuCheckboxItem,\n  NavigationMenuEmptyItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { NavigationMenuEditableItem } from \"@/components/ui/composites/navigation-menu/navigation-menu-editable\";\nimport { ProviderIcon } from \"@/components/ui/primitives/provider-icon\";\nimport { RouteShell } from \"@/components/ui/shells/route-shell\";\nimport { canPull, canPush, getCalendarProvider } from \"@/utils/calendars\";\nimport { resolveUpdatedIds } from \"@/utils/collections\";\n\nconst VALID_STEPS = [\"select\", \"rename\", \"destinations\", \"sources\"] as const;\ntype SetupStep = (typeof VALID_STEPS)[number];\n\ninterface SetupSearch {\n  step?: SetupStep;\n  id?: string;\n  index?: number;\n}\n\ntype MappingRoute = \"destinations\" | \"sources\";\ntype MappingResponseKey = \"destinationIds\" | \"sourceIds\";\ntype CalendarMappingData = Partial<Record<MappingResponseKey, string[]>>;\n\nfunction isValidStep(value: unknown): value is SetupStep {\n  const validSteps: readonly string[] = VALID_STEPS;\n  return typeof value === \"string\" && validSteps.includes(value);\n}\n\nfunction parseSearchIndex(value: unknown): number | undefined {\n  const parsed = typeof value === \"number\" ? value : typeof value === \"string\" ? Number(value) : NaN;\n  if (!Number.isInteger(parsed) || parsed < 0) return undefined;\n  return parsed;\n}\n\nexport const Route = createFileRoute(\n  \"/(dashboard)/dashboard/accounts/$accountId/setup\",\n)({\n  component: AccountSetupPage,\n  validateSearch: (search: Record<string, unknown>): SetupSearch => {\n    return {\n      step: isValidStep(search.step) ? search.step : undefined,\n      id: typeof search.id === \"string\" ? search.id : undefined,\n      index: parseSearchIndex(search.index),\n    };\n  },\n});\n\nfunction parseSelectedIds(commaIds: string | undefined): Set<string> {\n  if (!commaIds) return new Set();\n  return new Set(commaIds.split(\",\").filter(Boolean));\n}\n\nfunction resolveStepCalendarIndex(index: number, count: number): number {\n  if (count === 0) return 0;\n  if (index >= count) return count - 1;\n  return index;\n}\n\ninterface SetupWorkflowData {\n  accountCalendars: CalendarSource[];\n  selectedCalendars: CalendarSource[];\n  destinationCalendars: CalendarSource[];\n  sourceCalendars: CalendarSource[];\n  destinationCalendarIndex: number;\n  sourceCalendarIndex: number;\n}\n\nfunction resolveSetupWorkflowData({\n  allCalendars,\n  accountId,\n  selectedIds,\n  requestedCalendarIndex,\n}: {\n  allCalendars: CalendarSource[];\n  accountId: string;\n  selectedIds: Set<string>;\n  requestedCalendarIndex: number;\n}): SetupWorkflowData {\n  const accountCalendars = allCalendars.filter((calendar) => calendar.accountId === accountId);\n  const selectedCalendars = accountCalendars.filter((calendar) => selectedIds.has(calendar.id));\n  const destinationCalendars = selectedCalendars.filter(canPull);\n  const sourceCalendars = selectedCalendars.filter(canPush);\n\n  return {\n    accountCalendars,\n    selectedCalendars,\n    destinationCalendars,\n    sourceCalendars,\n    destinationCalendarIndex: resolveStepCalendarIndex(requestedCalendarIndex, destinationCalendars.length),\n    sourceCalendarIndex: resolveStepCalendarIndex(requestedCalendarIndex, sourceCalendars.length),\n  };\n}\n\nfunction resolveNextIndex(currentIndex: number, totalCount: number): number | undefined {\n  const nextIndex = currentIndex + 1;\n  if (nextIndex < totalCount) return nextIndex;\n  return undefined;\n}\n\ninterface SetupStepActions {\n  advanceFromRename: () => void;\n  advanceFromDestinations: (currentIndex: number) => void;\n  advanceFromSources: (currentIndex: number) => void;\n}\n\nfunction createSetupStepActions({\n  destinationCount,\n  sourceCount,\n  navigateToStep,\n  navigateToDashboard,\n}: {\n  destinationCount: number;\n  sourceCount: number;\n  navigateToStep: (step: SetupStep, index?: number) => void;\n  navigateToDashboard: () => void;\n}): SetupStepActions {\n  const advanceToSources = () => {\n    if (sourceCount > 0) {\n      navigateToStep(\"sources\", 0);\n      return;\n    }\n    navigateToDashboard();\n  };\n\n  return {\n    advanceFromRename: () => {\n      track(ANALYTICS_EVENTS.setup_step_completed, { step: \"rename\" });\n      if (destinationCount > 0) {\n        navigateToStep(\"destinations\", 0);\n        return;\n      }\n      advanceToSources();\n    },\n    advanceFromDestinations: (currentIndex: number) => {\n      track(ANALYTICS_EVENTS.setup_step_completed, { step: \"destinations\" });\n      const nextIndex = resolveNextIndex(currentIndex, destinationCount);\n      if (nextIndex !== undefined) {\n        navigateToStep(\"destinations\", nextIndex);\n        return;\n      }\n      advanceToSources();\n    },\n    advanceFromSources: (currentIndex: number) => {\n      track(ANALYTICS_EVENTS.setup_step_completed, { step: \"sources\" });\n      const nextIndex = resolveNextIndex(currentIndex, sourceCount);\n      if (nextIndex !== undefined) {\n        navigateToStep(\"sources\", nextIndex);\n        return;\n      }\n      track(ANALYTICS_EVENTS.setup_completed);\n      navigateToDashboard();\n    },\n  };\n}\n\nfunction SetupStepContent({\n  step,\n  accountId,\n  allCalendars,\n  workflow,\n  mutateCalendars,\n  actions,\n}: {\n  step: SetupStep;\n  accountId: string;\n  allCalendars: CalendarSource[];\n  workflow: SetupWorkflowData;\n  mutateCalendars: ReturnType<typeof useSWR<CalendarSource[]>>[\"mutate\"];\n  actions: SetupStepActions;\n}) {\n  if (step === \"select\") {\n    return (\n      <SelectSection\n        accountId={accountId}\n        calendars={workflow.accountCalendars}\n      />\n    );\n  }\n\n  if (step === \"rename\") {\n    return (\n      <RenameSection\n        calendars={workflow.selectedCalendars}\n        mutateCalendars={mutateCalendars}\n        onNext={actions.advanceFromRename}\n      />\n    );\n  }\n\n  if (step === \"destinations\") {\n    const calendar = workflow.destinationCalendars[workflow.destinationCalendarIndex];\n    const onNext = () => actions.advanceFromDestinations(workflow.destinationCalendarIndex);\n    if (!calendar) return <EmptyStepSection heading=\"No destination setup needed\" message=\"None of the selected calendars can send events right now.\" buttonLabel=\"Continue\" onNext={onNext} />;\n    return <DestinationsSection calendar={calendar} allCalendars={allCalendars} onNext={onNext} />;\n  }\n\n  const calendar = workflow.sourceCalendars[workflow.sourceCalendarIndex];\n  const onNext = () => actions.advanceFromSources(workflow.sourceCalendarIndex);\n  if (!calendar) return <EmptyStepSection heading=\"No source setup needed\" message=\"None of the selected calendars can pull events right now.\" buttonLabel=\"Finish\" onNext={onNext} />;\n  return <SourcesSection calendar={calendar} allCalendars={allCalendars} onNext={onNext} />;\n}\n\nfunction buildMappingData(responseKey: MappingResponseKey, ids: string[]): CalendarMappingData {\n  return { [responseKey]: ids };\n}\n\nfunction useCalendarMapping({\n  calendarId,\n  route,\n  responseKey,\n}: {\n  calendarId?: string;\n  route: MappingRoute;\n  responseKey: MappingResponseKey;\n}) {\n  const endpoint = calendarId ? `/api/sources/${calendarId}/${route}` : null;\n  const { data, mutate } = useSWR<CalendarMappingData>(endpoint);\n  const { adjustMappingCount, revalidateEntitlements } = useMutateEntitlements();\n\n  const selectedIds = new Set(data?.[responseKey] ?? []);\n\n  const handleToggle = async (targetCalendarId: string, checked: boolean) => {\n    if (!endpoint) return;\n    const currentIds = data?.[responseKey] ?? [];\n    const updatedIds = resolveUpdatedIds(currentIds, targetCalendarId, checked);\n    const mappingData = buildMappingData(responseKey, updatedIds);\n    const delta = checked ? 1 : -1;\n\n    adjustMappingCount(delta);\n\n    try {\n      await mutate(\n        async () => {\n          await apiFetch(endpoint, {\n            method: \"PUT\",\n            headers: { \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({ calendarIds: updatedIds }),\n          });\n          return mappingData;\n        },\n        {\n          optimisticData: mappingData,\n          rollbackOnError: true,\n          revalidate: false,\n        },\n      );\n    } catch {\n      adjustMappingCount(-delta);\n    } finally {\n      void revalidateEntitlements();\n    }\n  };\n\n  return { selectedIds, handleToggle };\n}\n\nfunction AccountSetupPage() {\n  const { accountId } = Route.useParams();\n  const search = Route.useSearch();\n  const navigate = useNavigate();\n\n  const step = search.step ?? \"select\";\n  const selectedIds = parseSelectedIds(search.id);\n  const requestedCalendarIndex = search.index ?? 0;\n\n  const { data, isLoading, error, mutate: mutateCalendars } = useSWR<CalendarSource[]>(\"/api/sources\");\n  const allCalendars = data ?? [];\n  const workflow = resolveSetupWorkflowData({\n    allCalendars,\n    accountId,\n    selectedIds,\n    requestedCalendarIndex,\n  });\n\n  const navigateToStep = (nextStep: SetupStep, nextIndex?: number) => {\n    navigate({\n      to: \"/dashboard/accounts/$accountId/setup\",\n      params: { accountId },\n      search: { step: nextStep, id: search.id, index: nextIndex },\n    });\n  };\n\n  const actions = createSetupStepActions({\n    destinationCount: workflow.destinationCalendars.length,\n    sourceCount: workflow.sourceCalendars.length,\n    navigateToStep,\n    navigateToDashboard: () => navigate({ to: \"/dashboard\" }),\n  });\n\n  if (error || isLoading) {\n    if (error) return <RouteShell backFallback=\"/dashboard\" status=\"error\" onRetry={() => mutateCalendars()} />;\n    return <RouteShell backFallback=\"/dashboard\" status=\"loading\" />;\n  }\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton fallback=\"/dashboard\" />\n      <SetupStepContent\n        step={step}\n        accountId={accountId}\n        allCalendars={allCalendars}\n        workflow={workflow}\n        mutateCalendars={mutateCalendars}\n        actions={actions}\n      />\n    </div>\n  );\n}\n\nfunction SelectSection({\n  accountId,\n  calendars,\n}: {\n  accountId: string;\n  calendars: CalendarSource[];\n}) {\n  const navigate = useNavigate();\n  const [localSelectedIds, setLocalSelectedIds] = useState<Set<string>>(new Set());\n\n  const handleToggle = (calendarId: string, checked: boolean) => {\n    setLocalSelectedIds((prev) => {\n      const next = new Set(prev);\n      if (checked) {\n        next.add(calendarId);\n      } else {\n        next.delete(calendarId);\n      }\n      return next;\n    });\n  };\n\n  const handleNext = () => {\n    track(ANALYTICS_EVENTS.setup_step_completed, { step: \"select\" });\n    navigate({\n      to: \"/dashboard/accounts/$accountId/setup\",\n      params: { accountId },\n      search: { step: \"rename\", id: [...localSelectedIds].join(\",\") },\n    });\n  };\n\n  return (\n    <>\n      <DashboardSection\n        title=\"Which calendars would you like to configure?\"\n        description=\"Select the calendars you want to rename and set up.\"\n      />\n      <NavigationMenu>\n        {calendars.map((calendar) => (\n          <NavigationMenuCheckboxItem\n            key={calendar.id}\n            checked={localSelectedIds.has(calendar.id)}\n            onCheckedChange={(checked) => handleToggle(calendar.id, checked)}\n          >\n            <NavigationMenuItemIcon>\n              <ProviderIcon\n                provider={getCalendarProvider(calendar)}\n                calendarType={calendar.calendarType}\n              />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>{calendar.name}</NavigationMenuItemLabel>\n          </NavigationMenuCheckboxItem>\n        ))}\n      </NavigationMenu>\n      <div className=\"flex flex-col gap-1.5\">\n        <Button\n          className=\"w-full justify-center\"\n          disabled={localSelectedIds.size === 0}\n          onClick={handleNext}\n        >\n          <ButtonText>Next</ButtonText>\n        </Button>\n        <LinkButton\n          to=\"/dashboard\"\n          variant=\"ghost\"\n          className=\"w-full justify-center\"\n          data-visitors-event={ANALYTICS_EVENTS.setup_skipped}\n        >\n          <ButtonText>Skip</ButtonText>\n        </LinkButton>\n      </div>\n    </>\n  );\n}\n\nfunction RenameSection({\n  calendars,\n  mutateCalendars,\n  onNext,\n}: {\n  calendars: CalendarSource[];\n  mutateCalendars: ReturnType<typeof useSWR<CalendarSource[]>>[\"mutate\"];\n  onNext: () => void;\n}) {\n  const handleRename = async (calendarId: string, name: string) => {\n    await mutateCalendars(\n      async (current) => {\n        await apiFetch(`/api/sources/${calendarId}`, {\n          method: \"PATCH\",\n          headers: { \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({ name }),\n        });\n        return current?.map((calendar) =>\n          calendar.id === calendarId ? { ...calendar, name } : calendar,\n        );\n      },\n      {\n        optimisticData: (current) =>\n          (current ?? []).map((calendar) =>\n            calendar.id === calendarId ? { ...calendar, name } : calendar,\n          ),\n        rollbackOnError: true,\n        revalidate: false,\n      },\n    );\n  };\n\n  return (\n    <>\n      <DashboardSection\n        title=\"Rename Your Calendars\"\n        description=\"Provider names are often generic. Click a calendar to give it a more meaningful name.\"\n      />\n      <NavigationMenu>\n        {calendars.map((calendar, index) => (\n          <NavigationMenuEditableItem\n            key={calendar.id}\n            value={calendar.name}\n            defaultEditing={index === 0}\n            onCommit={(name) => handleRename(calendar.id, name)}\n          />\n        ))}\n      </NavigationMenu>\n      <Button\n        className=\"w-full justify-center\"\n        onClick={onNext}\n      >\n        <ButtonText>Next</ButtonText>\n      </Button>\n    </>\n  );\n}\n\nfunction EmptyStepSection({ heading, message, buttonLabel, onNext }: {\n  heading: string;\n  message: string;\n  buttonLabel: string;\n  onNext: () => void;\n}) {\n  return (\n    <>\n      <DashboardSection title={heading} description={message} />\n      <Button className=\"w-full justify-center\" onClick={onNext}>\n        <ButtonText>{buttonLabel}</ButtonText>\n      </Button>\n    </>\n  );\n}\n\nfunction DestinationsSection({\n  calendar,\n  allCalendars,\n  onNext,\n}: {\n  calendar: CalendarSource;\n  allCalendars: CalendarSource[];\n  onNext: () => void;\n}) {\n  const { selectedIds, handleToggle } = useCalendarMapping({\n    calendarId: calendar.id,\n    route: \"destinations\",\n    responseKey: \"destinationIds\",\n  });\n  const { data: entitlements } = useEntitlements();\n  const atLimit = !canAddMore(entitlements?.mappings);\n\n  const pushCalendars = allCalendars.filter(\n    (candidate) => canPush(candidate) && candidate.id !== calendar.id,\n  );\n\n  return (\n    <>\n      <DashboardSection\n        title={<>Where should &apos;{calendar.name}&apos; send events?</>}\n        description=\"Select which calendars should receive events from this calendar.\"\n        headingClassName=\"overflow-visible text-wrap whitespace-normal\"\n      />\n      <NavigationMenu>\n        {pushCalendars.length === 0 && (\n          <NavigationMenuEmptyItem>No destination calendars available</NavigationMenuEmptyItem>\n        )}\n        {pushCalendars.map((destination) => {\n          const checked = selectedIds.has(destination.id);\n          const disabled = atLimit && !checked;\n          return (\n            <NavigationMenuCheckboxItem\n              key={destination.id}\n              checked={checked}\n              disabled={disabled}\n              onCheckedChange={(next) => !disabled && handleToggle(destination.id, next)}\n            >\n              <NavigationMenuItemIcon>\n                <ProviderIcon\n                  provider={getCalendarProvider(destination)}\n                  calendarType={destination.calendarType}\n                />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>{destination.name}</NavigationMenuItemLabel>\n            </NavigationMenuCheckboxItem>\n          );\n        })}\n      </NavigationMenu>\n      {atLimit && <UpgradeHint>Mapping limit reached.</UpgradeHint>}\n      <Button\n        className=\"w-full justify-center\"\n        onClick={onNext}\n      >\n        <ButtonText>Next</ButtonText>\n      </Button>\n    </>\n  );\n}\n\nfunction SourcesSection({\n  calendar,\n  allCalendars,\n  onNext,\n}: {\n  calendar: CalendarSource;\n  allCalendars: CalendarSource[];\n  onNext: () => void;\n}) {\n  const { selectedIds, handleToggle } = useCalendarMapping({\n    calendarId: calendar.id,\n    route: \"sources\",\n    responseKey: \"sourceIds\",\n  });\n  const { data: entitlements } = useEntitlements();\n  const atLimit = !canAddMore(entitlements?.mappings);\n\n  const pullCalendars = allCalendars.filter(\n    (candidate) => canPull(candidate) && candidate.id !== calendar.id,\n  );\n\n  return (\n    <>\n      <DashboardSection\n        title={<>Where should &apos;{calendar.name}&apos; pull events from?</>}\n        description=\"Select which calendars should send events to this calendar.\"\n        headingClassName=\"overflow-visible text-wrap whitespace-normal\"\n      />\n      <NavigationMenu>\n        {pullCalendars.length === 0 && (\n          <NavigationMenuEmptyItem>No source calendars available</NavigationMenuEmptyItem>\n        )}\n        {pullCalendars.map((source) => {\n          const checked = selectedIds.has(source.id);\n          const disabled = atLimit && !checked;\n          return (\n            <NavigationMenuCheckboxItem\n              key={source.id}\n              checked={checked}\n              disabled={disabled}\n              onCheckedChange={(next) => !disabled && handleToggle(source.id, next)}\n            >\n              <NavigationMenuItemIcon>\n                <ProviderIcon\n                  provider={getCalendarProvider(source)}\n                  calendarType={source.calendarType}\n                />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>{source.name}</NavigationMenuItemLabel>\n            </NavigationMenuCheckboxItem>\n          );\n        })}\n      </NavigationMenu>\n      {atLimit && <UpgradeHint>Mapping limit reached.</UpgradeHint>}\n      <Button\n        className=\"w-full justify-center\"\n        onClick={onNext}\n      >\n        <ButtonText>Next</ButtonText>\n      </Button>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/accounts/route.tsx",
    "content": "import { createFileRoute, Outlet } from \"@tanstack/react-router\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/accounts\")({\n  component: AccountsLayout,\n});\n\nfunction AccountsLayout() {\n  return <Outlet />;\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/connect/index.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport Calendar from \"lucide-react/dist/esm/icons/calendar\";\nimport LinkIcon from \"lucide-react/dist/esm/icons/link\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { PremiumFeatureGate } from \"@/components/ui/primitives/upgrade-hint\";\nimport { useEntitlements, canAddMore } from \"@/hooks/use-entitlements\";\nimport {\n  NavigationMenu,\n  NavigationMenuLinkItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuItemTrailing,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/connect/\")({\n  component: ConnectPage,\n});\n\nfunction ConnectPage() {\n  const { data: entitlements } = useEntitlements();\n  const atLimit = !canAddMore(entitlements?.accounts);\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton />\n      <PremiumFeatureGate locked={atLimit} hint=\"Account limit reached.\">\n        <NavigationMenu>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"ical\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/ical-link\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <LinkIcon size={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Subscribe to ICS Calendar Feed</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n        </NavigationMenu>\n        <NavigationMenu>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"google\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/google\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <img src=\"/integrations/icon-google.svg\" alt=\"\" width={15} height={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Connect Google Calendar</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"outlook\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/outlook\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <img src=\"/integrations/icon-outlook.svg\" alt=\"\" width={15} height={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Connect Outlook</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"apple\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/apple\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <img src=\"/integrations/icon-icloud.svg\" alt=\"\" width={15} height={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Connect iCloud</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"microsoft\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/microsoft\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <img src=\"/integrations/icon-microsoft-365.svg\" alt=\"\" width={15} height={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Connect Microsoft 365</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"fastmail\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/fastmail\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <img src=\"/integrations/icon-fastmail.svg\" alt=\"\" width={15} height={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Connect Fastmail</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n        </NavigationMenu>\n        <NavigationMenu>\n          <div data-visitors-event={ANALYTICS_EVENTS.calendar_connect_started} data-visitors-provider=\"caldav\">\n            <NavigationMenuLinkItem to=\"/dashboard/connect/caldav\" disabled={atLimit}>\n              <NavigationMenuItemIcon>\n                <Calendar size={15} />\n              </NavigationMenuItemIcon>\n              <NavigationMenuItemLabel>Connect CalDAV Server</NavigationMenuItemLabel>\n              <NavigationMenuItemTrailing />\n            </NavigationMenuLinkItem>\n          </div>\n        </NavigationMenu>\n      </PremiumFeatureGate>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/connect/route.tsx",
    "content": "import { createFileRoute, Outlet } from \"@tanstack/react-router\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/connect\")({\n  component: ConnectLayout,\n});\n\nfunction ConnectLayout() {\n  return <Outlet />;\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/events/index.tsx",
    "content": "import { useEffect, useRef, memo } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { ErrorState } from \"@/components/ui/primitives/error-state\";\nimport { DashboardHeading1, DashboardHeading2 } from \"@/components/ui/primitives/dashboard-heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { formatTime, formatTimeUntil, isEventPast, formatDayHeader } from \"@/lib/time\";\nimport { useEvents, type CalendarEvent } from \"@/hooks/use-events\";\nimport { cn } from \"@/utils/cn\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/events/\")({\n  component: EventsPage,\n});\n\ninterface DayGroup {\n  label: string;\n  events: CalendarEvent[];\n}\n\ninterface DaySectionProps {\n  label: string;\n  events: CalendarEvent[];\n}\n\ninterface EventRowProps {\n  event: CalendarEvent;\n}\n\ninterface LoadMoreSentinelProps {\n  isValidating: boolean;\n  hasMore: boolean;\n  onLoadMore: () => void;\n}\n\nconst groupEventsByDay = (events: CalendarEvent[]): DayGroup[] => {\n  const groups = new Map<string, CalendarEvent[]>();\n\n  for (const event of events) {\n    const key = event.startTime.toDateString();\n    if (!groups.has(key)) groups.set(key, []);\n    groups.get(key)!.push(event);\n  }\n\n  return [...groups.entries()].map(([key, dayEvents]) => ({\n    label: formatDayHeader(new Date(key)),\n    events: dayEvents,\n  }));\n};\n\nfunction EventsPage() {\n  return (\n    <div className=\"flex flex-col gap-3\">\n      <BackButton />\n      <EventsContent />\n    </div>\n  );\n}\n\nfunction EventsContent() {\n  const { events, error, isLoading, isValidating, hasMore, loadMore } = useEvents();\n  const dayGroups = groupEventsByDay(events);\n\n  if (isLoading) return <LoadingIndicator />;\n  if (error) return <ErrorState message=\"Failed to load events.\" />;\n\n  return (\n    <div className=\"flex flex-col gap-2\">\n      <div className=\"flex flex-col gap-4\">\n        <div className=\"flex flex-col\">\n          <DashboardHeading1>Events</DashboardHeading1>\n          <Text size=\"sm\">View all of the events across all of your calendars.</Text>\n        </div>\n        {dayGroups.map((group) => (\n          <DaySection key={group.label} label={group.label} events={group.events} />\n        ))}\n      </div>\n      {hasMore && (\n        <LoadMoreSentinel\n          isValidating={isValidating}\n          hasMore={hasMore}\n          onLoadMore={loadMore}\n        />\n      )}\n    </div>\n  );\n}\n\nfunction LoadMoreSentinel({ isValidating, hasMore, onLoadMore }: LoadMoreSentinelProps) {\n  const nodeRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const node = nodeRef.current;\n    if (!node || isValidating || !hasMore) return;\n\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        if (entry?.isIntersecting) onLoadMore();\n      },\n      { rootMargin: \"200px\" },\n    );\n\n    observer.observe(node);\n    return () => observer.disconnect();\n  }, [isValidating, hasMore, onLoadMore]);\n\n  return (\n    <div ref={nodeRef} className=\"flex justify-center py-2\">\n      {isValidating && (\n        <LoaderCircle size={16} className=\"animate-spin text-foreground-muted\" />\n      )}\n    </div>\n  );\n}\n\nfunction LoadingIndicator() {\n  return (\n    <div className=\"flex justify-center py-6\">\n      <LoaderCircle size={20} className=\"animate-spin text-foreground-muted\" />\n    </div>\n  );\n}\n\nconst areDaySectionPropsEqual = (prev: DaySectionProps, next: DaySectionProps): boolean => {\n  if (prev.label !== next.label) return false;\n  if (prev.events.length !== next.events.length) return false;\n  return prev.events.every((event, index) => event.id === next.events[index].id);\n};\n\nconst DaySection = memo(function DaySection({ label, events }: DaySectionProps) {\n  return (\n    <div className=\"flex flex-col px-0.5\">\n      <DashboardHeading2>{label}</DashboardHeading2>\n      <div className=\"flex flex-col\">\n        {events.map((event) => (\n          <EventRow key={event.id} event={event} />\n        ))}\n      </div>\n    </div>\n  );\n}, areDaySectionPropsEqual);\n\nfunction resolveEventRowClassName(past: boolean): string {\n  return cn(\"flex items-center justify-between gap-2 py-1.5\", past && \"line-through\");\n}\n\nconst EventRow = memo(function EventRow({ event }: EventRowProps) {\n  const past = isEventPast(event.endTime);\n  const startTime = formatTime(event.startTime);\n  const endTime = formatTime(event.endTime);\n  const timeUntil = formatTimeUntil(event.startTime);\n\n  return (\n    <div className={resolveEventRowClassName(past)}>\n      <div className=\"flex items-center gap-1 min-w-0\">\n        <Text size=\"sm\" tone=\"muted\" className=\"truncate\">\n          {event.calendarName}\n        </Text>\n        <Text size=\"sm\" tone=\"muted\" className=\"shrink-0\">\n          from\n        </Text>\n        <Text size=\"sm\" tone=\"default\" className=\"font-medium tabular-nums shrink-0\">\n          {startTime}\n        </Text>\n        <Text size=\"sm\" tone=\"muted\" className=\"shrink-0\">\n          to\n        </Text>\n        <Text size=\"sm\" tone=\"default\" className=\"font-medium tabular-nums shrink-0\">\n          {endTime}\n        </Text>\n      </div>\n      <Text size=\"sm\" tone=\"muted\" className=\"tabular-nums shrink-0 whitespace-nowrap\">\n        {timeUntil}\n      </Text>\n    </div>\n  );\n});\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/feedback.tsx",
    "content": "import { useRef, useState } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { DashboardSection } from \"@/components/ui/primitives/dashboard-heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { Button, ButtonText, LinkButton } from \"@/components/ui/primitives/button\";\nimport { apiFetch } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/feedback\")({\n  component: FeedbackPage,\n});\n\nfunction FeedbackPage() {\n  const messageRef = useRef<HTMLTextAreaElement>(null);\n\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [submitted, setSubmitted] = useState(false);\n\n  const handleSubmit = async () => {\n    const message = messageRef.current?.value.trim();\n\n    if (!message) return;\n\n    setError(null);\n    setIsSubmitting(true);\n\n    try {\n      await apiFetch(\"/api/feedback\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ message, type: \"feedback\" }),\n      });\n      track(ANALYTICS_EVENTS.feedback_submitted);\n      setSubmitted(true);\n    } catch (err) {\n      setError(resolveErrorMessage(err, \"Failed to submit feedback.\"));\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  if (submitted) {\n    return (\n      <div className=\"flex flex-col gap-3\">\n        <BackButton />\n        <DashboardSection\n          title=\"Thank You\"\n          description=\"Your feedback has been submitted. We appreciate you taking the time to help us improve.\"\n          level={1}\n        />\n        <LinkButton to=\"/dashboard\" variant=\"elevated\" className=\"w-full justify-center\">\n          <ButtonText>Back to Dashboard</ButtonText>\n        </LinkButton>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"flex flex-col gap-3\">\n      <BackButton />\n      <DashboardSection\n        title=\"Submit Feedback\"\n        description=\"Let us know how we can improve your experience.\"\n        level={1}\n      />\n      <div className=\"flex flex-col gap-2\">\n        <textarea\n          ref={messageRef}\n          placeholder=\"Tell us what's on your mind...\"\n          rows={5}\n          className=\"w-full rounded-xl border border-interactive-border bg-background px-4 py-2.5 text-foreground tracking-tight placeholder:text-foreground-muted resize-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n        />\n        {error && <Text size=\"sm\" tone=\"danger\">{error}</Text>}\n        <Button className=\"w-full justify-center\" onClick={handleSubmit} disabled={isSubmitting}>\n          <ButtonText>{isSubmitting ? \"Submitting...\" : \"Submit Feedback\"}</ButtonText>\n        </Button>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/ical.tsx",
    "content": "import { use, useMemo } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport useSWR from \"swr\";\nimport { atom, useAtomValue, useStore } from \"jotai\";\nimport Copy from \"lucide-react/dist/esm/icons/copy\";\nimport CheckIcon from \"lucide-react/dist/esm/icons/check\";\nimport { fetcher, apiFetch } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { serializedPatch } from \"@/lib/serialized-mutate\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { PremiumFeatureGate } from \"@/components/ui/primitives/upgrade-hint\";\nimport { DashboardSection } from \"@/components/ui/primitives/dashboard-heading\";\nimport { Button, ButtonIcon } from \"@/components/ui/primitives/button\";\nimport { ProviderIcon } from \"@/components/ui/primitives/provider-icon\";\nimport {\n  NavigationMenu,\n  NavigationMenuCheckboxItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuToggleItem,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport {\n  NavigationMenuEditableTemplateItem,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-editable\";\nimport { TemplateText } from \"@/components/ui/primitives/template-text\";\nimport { ItemDisabledContext, MenuVariantContext } from \"@/components/ui/composites/navigation-menu/navigation-menu.contexts\";\nimport {\n  DISABLED_LABEL_TONE,\n  LABEL_TONE,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu.styles\";\nimport {\n  icalSourceInclusionAtom,\n  selectSourceInclusion,\n} from \"@/state/ical-sources\";\nimport {\n  feedSettingsAtom,\n  feedSettingsLoadedAtom,\n  feedSettingAtoms,\n  customEventNameAtom,\n  includeEventNameAtom,\n} from \"@/state/ical-feed-settings\";\nimport type { FeedSettingToggleKey } from \"@/state/ical-feed-settings\";\nimport type { CalendarSource } from \"@/types/api\";\nimport { useEntitlements } from \"@/hooks/use-entitlements\";\n\ntype ICalTokenResponse = {\n  token: string;\n  icalUrl: string | null;\n};\n\ninterface FeedSettings {\n  includeEventName: boolean;\n  includeEventDescription: boolean;\n  includeEventLocation: boolean;\n  excludeAllDayEvents: boolean;\n  customEventName: string;\n}\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/ical\")({\n  component: ICalPage,\n});\n\nfunction patchFeedSettings(\n  store: ReturnType<typeof useStore>,\n  patch: Record<string, unknown>,\n) {\n  const swrKey = \"/api/ical/settings\";\n  serializedPatch(\n    swrKey,\n    patch,\n    (mergedPatch) => {\n      return apiFetch(swrKey, {\n        method: \"PATCH\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(mergedPatch),\n      });\n    },\n    () => {\n      fetcher<FeedSettings>(swrKey).then((serverState) => {\n        store.set(feedSettingsAtom, serverState);\n      });\n    },\n  );\n}\n\nfunction ICalPage() {\n  const { data: entitlements } = useEntitlements();\n  const locked = entitlements ? !entitlements.canCustomizeIcalFeed : false;\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton />\n      <ICalLinkSection />\n      <SourceSelectionSection />\n      <FeedSettingsSeed />\n      <DashboardSection\n        title=\"Feed Settings\"\n        description={<>Choose which event details are included in your iCal feed. Use <Text as=\"span\" size=\"sm\" className=\"text-template inline\">{\"{{calendar_name}}\"}</Text> or <Text as=\"span\" size=\"sm\" className=\"text-template inline\">{\"{{event_name}}\"}</Text> in text fields for dynamic values.</>}\n      />\n      <FeedSettingsToggles locked={locked} />\n    </div>\n  );\n}\n\nfunction ICalLinkSection() {\n  const { data } = useSWR<ICalTokenResponse>(\"/api/ical/token\", fetcher);\n\n  return (\n    <div className=\"flex flex-col gap-2\">\n      <DashboardSection\n        title=\"iCal Link\"\n        description=\"Subscribe to this link in any calendar app to see your aggregated events.\"\n      />\n      <div className=\"flex gap-1.5\">\n        <Input\n          readOnly\n          value={data?.icalUrl ?? \"\"}\n          placeholder=\"No iCal link available\"\n          className=\"text-sm\"\n        />\n        <CopyButton value={data?.icalUrl ?? null} />\n      </div>\n    </div>\n  );\n}\n\nconst copiedAtom = atom(false);\n\nfunction CopyButton({ value }: { value: string | null }) {\n  const store = useStore();\n\n  const handleCopy = async () => {\n    if (!value) return;\n    await navigator.clipboard.writeText(value);\n    track(ANALYTICS_EVENTS.ical_link_copied);\n    store.set(copiedAtom, true);\n    setTimeout(() => store.set(copiedAtom, false), 2000);\n  };\n\n  return (\n    <Button\n      variant=\"border\"\n      className=\"shrink-0 aspect-square\"\n      onClick={handleCopy}\n      disabled={!value}\n    >\n      <ButtonIcon>\n        <CopyIcon />\n      </ButtonIcon>\n    </Button>\n  );\n}\n\nfunction CopyIcon() {\n  const copied = useAtomValue(copiedAtom);\n  return copied ? <CheckIcon size={16} /> : <Copy size={16} />;\n}\n\nfunction FeedSettingsSeed() {\n  const { data: settings } = useSWR<FeedSettings>(\"/api/ical/settings\", fetcher);\n  const store = useStore();\n\n  if (settings && !store.get(feedSettingsLoadedAtom)) {\n    store.set(feedSettingsAtom, settings);\n    store.set(feedSettingsLoadedAtom, true);\n  }\n\n  return null;\n}\n\nfunction FeedSettingsToggles({ locked }: { locked: boolean }) {\n  const loaded = useAtomValue(feedSettingsLoadedAtom);\n  if (!loaded) return null;\n\n  return (\n    <PremiumFeatureGate\n      locked={locked}\n      hint=\"Feed settings are Pro-only.\"\n    >\n      <NavigationMenu>\n        <EventNameTemplateItem locked={locked} />\n        <EventNameToggle locked={locked} />\n        <FeedSettingToggle locked={locked} field=\"includeEventDescription\" label=\"Include Event Description\" />\n        <FeedSettingToggle locked={locked} field=\"includeEventLocation\" label=\"Include Event Location\" />\n        <FeedSettingToggle locked={locked} field=\"excludeAllDayEvents\" label=\"Exclude All Day Events\" />\n      </NavigationMenu>\n    </PremiumFeatureGate>\n  );\n}\n\nconst TEMPLATE_VARIABLES = { event_name: \"Event Name\", calendar_name: \"Calendar Name\" };\n\nfunction EventNameDisabledProvider({ locked, children }: { locked: boolean; children: React.ReactNode }) {\n  const includeEventName = useAtomValue(includeEventNameAtom);\n  return <ItemDisabledContext value={locked || includeEventName}>{children}</ItemDisabledContext>;\n}\n\nfunction EventNameTemplateItem({ locked }: { locked: boolean }) {\n  const store = useStore();\n  const eventName = useAtomValue(customEventNameAtom);\n\n  return (\n    <EventNameDisabledProvider locked={locked}>\n      <NavigationMenuEditableTemplateItem\n        label=\"Event Name\"\n        disabled={locked}\n        value={eventName || \"{{event_name}}\"}\n        renderInput={(live) => (\n          <TemplateText template={live} variables={TEMPLATE_VARIABLES} />\n        )}\n        onCommit={(customEventName) => {\n          store.set(feedSettingsAtom, (prev) => ({ ...prev, customEventName }));\n          patchFeedSettings(store, { customEventName });\n        }}\n      >\n        <EventNameTemplateValue />\n      </NavigationMenuEditableTemplateItem>\n    </EventNameDisabledProvider>\n  );\n}\n\nfunction EventNameTemplateValue() {\n  const customEventName = useAtomValue(customEventNameAtom);\n  const includeEventName = useAtomValue(includeEventNameAtom);\n  const disabled = use(ItemDisabledContext);\n  const variant = use(MenuVariantContext);\n  const template = customEventName || \"{{event_name}}\";\n\n  return (\n    <Text\n      size=\"sm\"\n      tone={((disabled || includeEventName) ? DISABLED_LABEL_TONE : LABEL_TONE)[variant ?? \"default\"]}\n      className=\"min-w-0 truncate flex-1 text-right\"\n    >\n      <TemplateText\n        template={template}\n        variables={TEMPLATE_VARIABLES}\n        disabled={disabled || includeEventName}\n      />\n    </Text>\n  );\n}\n\nfunction EventNameToggle({ locked }: { locked: boolean }) {\n  const store = useStore();\n  const checked = useAtomValue(includeEventNameAtom);\n\n  const handleClick = () => {\n    if (locked) return;\n\n    const currentlyIncluded = store.get(feedSettingsAtom).includeEventName;\n\n    if (currentlyIncluded) {\n      const patch = { includeEventName: false, customEventName: \"Busy\" };\n      track(ANALYTICS_EVENTS.ical_setting_toggled, { field: \"includeEventName\", enabled: false });\n      store.set(feedSettingsAtom, (prev) => ({ ...prev, ...patch }));\n      patchFeedSettings(store, patch);\n    } else {\n      const patch = { includeEventName: true, customEventName: \"{{event_name}}\" };\n      track(ANALYTICS_EVENTS.ical_setting_toggled, { field: \"includeEventName\", enabled: true });\n      store.set(feedSettingsAtom, (prev) => ({ ...prev, ...patch }));\n      patchFeedSettings(store, patch);\n    }\n  };\n\n  return (\n    <NavigationMenuToggleItem\n      checked={checked}\n      disabled={locked}\n      onCheckedChange={() => handleClick()}\n    >\n      <NavigationMenuItemLabel>Include Event Name</NavigationMenuItemLabel>\n    </NavigationMenuToggleItem>\n  );\n}\n\nfunction FeedSettingToggle({\n  field,\n  label,\n  locked,\n}: {\n  field: FeedSettingToggleKey;\n  label: string;\n  locked: boolean;\n}) {\n  const store = useStore();\n  const checked = useAtomValue(feedSettingAtoms[field]);\n\n  const handleClick = () => {\n    if (locked) return;\n\n    const current = store.get(feedSettingsAtom)[field];\n    const newValue = !current;\n    track(ANALYTICS_EVENTS.ical_setting_toggled, { field, enabled: newValue });\n    store.set(feedSettingsAtom, (prev) => ({ ...prev, [field]: newValue }));\n    patchFeedSettings(store, { [field]: newValue });\n  };\n\n  return (\n    <NavigationMenuToggleItem\n      checked={checked}\n      disabled={locked}\n      onCheckedChange={() => handleClick()}\n    >\n      <NavigationMenuItemLabel>{label}</NavigationMenuItemLabel>\n    </NavigationMenuToggleItem>\n  );\n}\n\nfunction SourceSelectionSection() {\n  const { data: sources } = useSWR<CalendarSource[]>(\"/api/sources\", fetcher);\n  const store = useStore();\n\n  if (sources && Object.keys(store.get(icalSourceInclusionAtom)).length === 0) {\n    const map: Record<string, boolean> = {};\n    for (const source of sources) {\n      map[source.id] = source.includeInIcalFeed;\n    }\n    store.set(icalSourceInclusionAtom, map);\n  }\n\n  const pullSources = useMemo(\n    () => sources?.filter((source) => source.capabilities.includes(\"pull\")),\n    [sources],\n  );\n\n  if (!pullSources || pullSources.length === 0) {\n    return (\n      <DashboardSection\n        title=\"Sources\"\n        description={sources ? \"No calendar sources to include. Import calendars first.\" : \"Loading sources...\"}\n      />\n    );\n  }\n\n  return (\n    <div className=\"flex flex-col gap-2\">\n      <DashboardSection\n        title=\"Sources\"\n        description=\"Select which calendars contribute events to your iCal feed.\"\n      />\n      <NavigationMenu>\n        {pullSources.map((source) => (\n          <SourceCheckboxItem\n            key={source.id}\n            sourceId={source.id}\n            name={source.name}\n            provider={source.provider}\n            calendarType={source.calendarType}\n          />\n        ))}\n      </NavigationMenu>\n    </div>\n  );\n}\n\nfunction SourceCheckboxItem({\n  sourceId,\n  name,\n  provider,\n  calendarType,\n}: {\n  sourceId: string;\n  name: string;\n  provider: string;\n  calendarType: string;\n}) {\n  const store = useStore();\n  const checkedAtom = useMemo(() => selectSourceInclusion(sourceId), [sourceId]);\n  const checked = useAtomValue(checkedAtom);\n\n  const handleCheckedChange = (nextChecked: boolean) => {\n    track(ANALYTICS_EVENTS.ical_source_toggled, { enabled: nextChecked });\n    store.set(icalSourceInclusionAtom, (prev) => ({ ...prev, [sourceId]: nextChecked }));\n    const sourceKey = `/api/sources/${sourceId}`;\n    serializedPatch(sourceKey, { includeInIcalFeed: nextChecked }, (mergedPatch) => {\n      return apiFetch(sourceKey, {\n        method: \"PATCH\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify(mergedPatch),\n      });\n    });\n  };\n\n  return (\n    <NavigationMenuCheckboxItem\n      checked={checked}\n      onCheckedChange={handleCheckedChange}\n    >\n      <NavigationMenuItemIcon>\n        <ProviderIcon provider={provider} calendarType={calendarType} />\n      </NavigationMenuItemIcon>\n      <NavigationMenuItemLabel>{name}</NavigationMenuItemLabel>\n    </NavigationMenuCheckboxItem>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/index.tsx",
    "content": "import { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport useSWR, { preload } from \"swr\";\nimport { AnimatedReveal } from \"@/components/ui/primitives/animated-reveal\";\nimport Calendar from \"lucide-react/dist/esm/icons/calendar\";\nimport CalendarPlus from \"lucide-react/dist/esm/icons/calendar-plus\";\nimport CalendarDays from \"lucide-react/dist/esm/icons/calendar-days\";\nimport Link2 from \"lucide-react/dist/esm/icons/link-2\";\nimport Settings from \"lucide-react/dist/esm/icons/settings\";\nimport LogOut from \"lucide-react/dist/esm/icons/log-out\";\nimport MessageSquare from \"lucide-react/dist/esm/icons/message-square\";\nimport Bug from \"lucide-react/dist/esm/icons/bug\";\nimport LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport User from \"lucide-react/dist/esm/icons/user\";\nimport { ErrorState } from \"@/components/ui/primitives/error-state\";\nimport { signOut } from \"@/lib/auth\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { fetcher } from \"@/lib/fetcher\";\nimport KeeperLogo from \"@/assets/keeper.svg?react\";\nimport { EventGraph } from \"@/features/dashboard/components/event-graph\";\nimport { ProviderIcon } from \"@/components/ui/primitives/provider-icon\";\nimport type { CalendarAccount, CalendarSource } from \"@/types/api\";\nimport {\n  NavigationMenu,\n  NavigationMenuButtonItem,\n  NavigationMenuLinkItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuItemTrailing,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { NavigationMenuPopover } from \"@/components/ui/composites/navigation-menu/navigation-menu-popover\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ProviderIconStack } from \"@/components/ui/primitives/provider-icon-stack\";\nimport { pluralize } from \"@/lib/pluralize\";\nimport { useAnimatedSWR } from \"@/hooks/use-animated-swr\";\nimport { SyncStatus } from \"@/features/dashboard/components/sync-status\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/\")({\n  component: DashboardPage,\n});\n\nfunction DashboardPage() {\n  const navigate = useNavigate();\n\n  const handleLogout = async () => {\n    track(ANALYTICS_EVENTS.logout);\n    await signOut();\n    navigate({ to: \"/\" });\n  };\n\n  return (\n    <div className=\"flex flex-col\">\n      <SyncStatus />\n      <EventGraph />\n      <div className=\"flex flex-col gap-1.5\">\n        <NavigationMenu>\n          <NavigationMenuLinkItem to=\"/dashboard/connect\">\n            <NavigationMenuItemIcon>\n              <CalendarPlus size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Import Calendars</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing />\n          </NavigationMenuLinkItem>\n        </NavigationMenu>\n        <CalendarsMenu />\n        <NavigationMenu>\n          <NavigationMenuLinkItem to=\"/dashboard/feedback\">\n            <NavigationMenuItemIcon>\n              <MessageSquare size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Submit Feedback</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing />\n          </NavigationMenuLinkItem>\n          <NavigationMenuLinkItem to=\"/dashboard/report\">\n            <NavigationMenuItemIcon>\n              <Bug size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Report a Problem</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing />\n          </NavigationMenuLinkItem>\n        </NavigationMenu>\n        <NavigationMenu>\n          <AccountsPopover />\n          <NavigationMenuLinkItem to=\"/dashboard/settings\">\n            <NavigationMenuItemIcon>\n              <Settings size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Settings</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing />\n          </NavigationMenuLinkItem>\n        </NavigationMenu>\n        <NavigationMenu>\n          <NavigationMenuButtonItem onClick={handleLogout}>\n            <NavigationMenuItemIcon>\n              <LogOut size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Logout</NavigationMenuItemLabel>\n          </NavigationMenuButtonItem>\n        </NavigationMenu>\n      </div>\n      <div className=\"pt-8 flex justify-center\">\n        <KeeperLogo className=\"size-8 text-border-elevated self-center\" />\n      </div>\n    </div>\n  );\n}\n\nfunction CalendarsMenu() {\n  const { data: calendarsData, shouldAnimate: animateCalendars, isLoading: calendarsLoading, error, mutate: mutateCalendars } = useAnimatedSWR<CalendarSource[]>(\"/api/sources\");\n  const calendars = calendarsData ?? [];\n\n  const { data: eventCountData, error: eventCountError } = useSWR<{ count: number }>(\"/api/events/count\");\n  const eventCount = eventCountError ? undefined : eventCountData?.count;\n\n  return (\n    <NavigationMenu>\n      <NavigationMenuPopover\n        disabled={calendars.length === 0 && !calendarsLoading}\n        trigger={\n          <>\n            <NavigationMenuItemIcon>\n              <Calendar size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>\n              {calendars.length > 0 ? \"Calendars\" : \"No Calendars\"}\n            </NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing>\n              <ProviderIconStack providers={calendars} />\n            </NavigationMenuItemTrailing>\n          </>\n        }\n      >\n        {error && <ErrorState message=\"Failed to load calendars.\" onRetry={() => mutateCalendars()} />}\n        {calendarsLoading && (\n          <div className=\"flex justify-center py-4\">\n            <LoaderCircle size={16} className=\"animate-spin text-foreground-muted\" />\n          </div>\n        )}\n        {calendars.map((calendar) => (\n          <NavigationMenuLinkItem\n            key={calendar.id}\n            to={`/dashboard/accounts/${calendar.accountId}/${calendar.id}`}\n            onMouseEnter={() => {\n              preload(`/api/accounts/${calendar.accountId}`, fetcher);\n              preload(`/api/sources/${calendar.id}`, fetcher);\n            }}\n          >\n            <NavigationMenuItemIcon>\n              <ProviderIcon provider={calendar.provider} calendarType={calendar.calendarType} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel className=\"shrink-0\">{calendar.name}</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing className=\"overflow-hidden\">\n              <Text size=\"sm\" tone=\"muted\" align=\"right\" className=\"flex-1 min-w-0 truncate\">\n                {calendar.accountLabel}\n              </Text>\n            </NavigationMenuItemTrailing>\n          </NavigationMenuLinkItem>\n        ))}\n      </NavigationMenuPopover>\n      <AnimatedReveal show={calendars.length > 0} skipInitial={!animateCalendars}>\n        <NavigationMenuLinkItem to=\"/dashboard/events\">\n          <NavigationMenuItemIcon>\n            <CalendarDays size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>View Events</NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing>\n            {eventCount != null && <Text size=\"sm\" tone=\"muted\">{pluralize(eventCount, \"event\")}</Text>}\n          </NavigationMenuItemTrailing>\n        </NavigationMenuLinkItem>\n        <NavigationMenuLinkItem to=\"/dashboard/ical\">\n          <NavigationMenuItemIcon>\n            <Link2 size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>iCal Link</NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing />\n        </NavigationMenuLinkItem>\n      </AnimatedReveal>\n    </NavigationMenu>\n  );\n}\n\nfunction AccountsPopover() {\n  const { data: accountsData, isLoading: accountsLoading, error: accountsError, mutate: mutateAccounts } = useAnimatedSWR<CalendarAccount[]>(\"/api/accounts\");\n  const accounts = accountsData ?? [];\n\n  return (\n    <NavigationMenuPopover\n      disabled={accounts.length === 0 && !accountsLoading}\n      trigger={\n        <>\n          <NavigationMenuItemIcon>\n            <User size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>\n            {accounts.length > 0 ? \"Calendar Sources\" : \"No Calendar Sources\"}\n          </NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing>\n            <ProviderIconStack providers={accounts} />\n          </NavigationMenuItemTrailing>\n        </>\n      }\n    >\n      {accountsError && <ErrorState message=\"Failed to load accounts.\" onRetry={() => mutateAccounts()} />}\n      {accountsLoading && (\n        <div className=\"flex justify-center py-4\">\n          <LoaderCircle size={16} className=\"animate-spin text-foreground-muted\" />\n        </div>\n      )}\n      {accounts.map((account) => (\n        <NavigationMenuLinkItem\n          key={account.id}\n          to={`/dashboard/accounts/${account.id}`}\n        >\n          <NavigationMenuItemIcon>\n            <ProviderIcon provider={account.provider} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>{account.accountLabel}</NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing />\n        </NavigationMenuLinkItem>\n      ))}\n    </NavigationMenuPopover>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/integrations/index.tsx",
    "content": "import { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\n\ninterface SearchParams {\n  error?: string;\n}\n\nfunction parseSearchError(value: unknown): string | undefined {\n  if (typeof value === \"string\") return value;\n  return undefined;\n}\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/integrations/\")({\n  component: OAuthCallbackErrorPage,\n  validateSearch: (search: Record<string, unknown>): SearchParams => ({\n    error: parseSearchError(search.error),\n  }),\n  beforeLoad: ({ search }) => {\n    if (!search.error) {\n      throw redirect({ to: \"/dashboard\" });\n    }\n  },\n});\n\nfunction OAuthCallbackErrorPage() {\n  const { error } = Route.useSearch();\n\n  return (\n    <div className=\"flex flex-col gap-3\">\n      <BackButton />\n      <div className=\"flex flex-col gap-1 py-2\">\n        <Heading2 as=\"span\" className=\"text-center\">Connection failed</Heading2>\n        <Text size=\"sm\" tone=\"muted\" align=\"center\">{error}</Text>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/report.tsx",
    "content": "import { useRef, useState } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { DashboardSection } from \"@/components/ui/primitives/dashboard-heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { Button, ButtonText, LinkButton } from \"@/components/ui/primitives/button\";\nimport { Checkbox } from \"@/components/ui/primitives/checkbox\";\nimport { apiFetch } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/report\")({\n  component: ReportPage,\n});\n\nfunction ReportPage() {\n  const messageRef = useRef<HTMLTextAreaElement>(null);\n\n  const [wantsFollowUp, setWantsFollowUp] = useState(false);\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [submitted, setSubmitted] = useState(false);\n\n  const handleSubmit = async () => {\n    const message = messageRef.current?.value.trim();\n\n    if (!message) return;\n\n    setError(null);\n    setIsSubmitting(true);\n\n    try {\n      await apiFetch(\"/api/feedback\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ message, type: \"report\", wantsFollowUp }),\n      });\n      track(ANALYTICS_EVENTS.report_submitted, { wants_follow_up: wantsFollowUp });\n      setSubmitted(true);\n    } catch (err) {\n      setError(resolveErrorMessage(err, \"Failed to submit report.\"));\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  if (submitted) {\n    return (\n      <div className=\"flex flex-col gap-3\">\n        <BackButton />\n        <DashboardSection\n          title=\"Thank You\"\n          description=\"Your report has been submitted. We'll look into this as soon as possible.\"\n          level={1}\n        />\n        <LinkButton to=\"/dashboard\" variant=\"elevated\" className=\"w-full justify-center\">\n          <ButtonText>Back to Dashboard</ButtonText>\n        </LinkButton>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"flex flex-col gap-3\">\n      <BackButton />\n      <DashboardSection\n        title=\"Report a Problem\"\n        description=\"Describe the issue you're experiencing and we'll work on a fix.\"\n        level={1}\n      />\n      <div className=\"flex flex-col gap-2\">\n        <textarea\n          ref={messageRef}\n          placeholder=\"Describe the problem you're experiencing...\"\n          rows={5}\n          className=\"w-full rounded-xl border border-interactive-border bg-background px-4 py-2.5 text-foreground tracking-tight placeholder:text-foreground-muted resize-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n        />\n        {error && <Text size=\"sm\" tone=\"danger\">{error}</Text>}\n        <Button className=\"w-full justify-center\" onClick={handleSubmit} disabled={isSubmitting}>\n          <ButtonText>{isSubmitting ? \"Submitting...\" : \"Submit Report\"}</ButtonText>\n        </Button>\n        <Checkbox checked={wantsFollowUp} onCheckedChange={setWantsFollowUp}>\n          Notify me when this is addressed\n        </Checkbox>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/settings/api-tokens.tsx",
    "content": "import { useRef, useState } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport Check from \"lucide-react/dist/esm/icons/check\";\nimport Copy from \"lucide-react/dist/esm/icons/copy\";\nimport Gauge from \"lucide-react/dist/esm/icons/gauge\";\nimport KeySquare from \"lucide-react/dist/esm/icons/key-square\";\nimport Plus from \"lucide-react/dist/esm/icons/plus\";\nimport { Button, ButtonIcon, ButtonText } from \"@/components/ui/primitives/button\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport {\n  useApiTokens,\n  createApiToken,\n  deleteApiToken,\n} from \"@/hooks/use-api-tokens\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport type { ApiToken } from \"@/hooks/use-api-tokens\";\nimport { useEntitlements } from \"@/hooks/use-entitlements\";\nimport {\n  Modal,\n  ModalContent,\n  ModalDescription,\n  ModalFooter,\n  ModalTitle,\n} from \"@/components/ui/primitives/modal\";\nimport {\n  NavigationMenu,\n  NavigationMenuButtonItem,\n  NavigationMenuItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuItemTrailing,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { ErrorState } from \"@/components/ui/primitives/error-state\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\n\nexport const Route = createFileRoute(\n  \"/(dashboard)/dashboard/settings/api-tokens\",\n)({\n  component: ApiTokensPage,\n});\n\nfunction CopyTokenIcon({ copied }: { copied: boolean }) {\n  if (copied) {\n    return <Check size={16} />;\n  }\n  return <Copy size={16} />;\n}\n\nfunction resolveApiLimitLabel(plan: string | null): string {\n  if (plan === \"pro\") {\n    return \"Unlimited\";\n  }\n  return \"25 calls/day\";\n}\n\nfunction ApiTokensPage() {\n  const { data: entitlements } = useEntitlements();\n  const { data: tokens = [], error, mutate } = useApiTokens();\n  const [deleteTarget, setDeleteTarget] = useState<ApiToken | null>(null);\n  const [mutationError, setMutationError] = useState<string | null>(null);\n  const [createOpen, setCreateOpen] = useState(false);\n  const [revealedToken, setRevealedToken] = useState<string | null>(null);\n  const [copied, setCopied] = useState(false);\n\n  const handleDelete = async () => {\n    if (!deleteTarget) return;\n    const targetId = deleteTarget.id;\n    setDeleteTarget(null);\n    setMutationError(null);\n    try {\n      await mutate(\n        async (current) => {\n          await deleteApiToken(targetId);\n          return current?.filter((entry) => entry.id !== targetId) ?? [];\n        },\n        {\n          optimisticData: tokens.filter((entry) => entry.id !== targetId),\n          rollbackOnError: true,\n          revalidate: false,\n        },\n      );\n      track(ANALYTICS_EVENTS.api_token_deleted);\n    } catch (err) {\n      setMutationError(resolveErrorMessage(err, \"Failed to delete token.\"));\n    }\n  };\n\n  const handleCopy = async () => {\n    if (!revealedToken) return;\n    await navigator.clipboard.writeText(revealedToken);\n    setCopied(true);\n    setTimeout(() => setCopied(false), 2000);\n  };\n\n  const handleCloseReveal = () => {\n    setRevealedToken(null);\n    setCopied(false);\n  };\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton fallback=\"/dashboard/settings\" />\n      <NavigationMenu>\n        <NavigationMenuItem>\n          <NavigationMenuItemIcon>\n            <Gauge size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>Daily Limit</NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing>\n            <Text size=\"sm\" tone=\"muted\">\n              {resolveApiLimitLabel(entitlements?.plan ?? null)}\n            </Text>\n          </NavigationMenuItemTrailing>\n        </NavigationMenuItem>\n      </NavigationMenu>\n      {error && (\n        <ErrorState message=\"Failed to load API tokens.\" onRetry={() => mutate()} />\n      )}\n      {mutationError && <Text size=\"sm\" tone=\"danger\">{mutationError}</Text>}\n      <NavigationMenu>\n        {tokens.map((token) => (\n          <NavigationMenuButtonItem\n            key={token.id}\n            onClick={() => setDeleteTarget(token)}\n          >\n            <NavigationMenuItemIcon>\n              <KeySquare size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>{token.name}</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing>\n              <Text size=\"sm\" tone=\"muted\">\n                {token.tokenPrefix}...\n              </Text>\n            </NavigationMenuItemTrailing>\n          </NavigationMenuButtonItem>\n        ))}\n        <CreateTokenButton\n          onCreated={(plainToken) => {\n            setRevealedToken(plainToken);\n            mutate();\n          }}\n          onError={setMutationError}\n          createOpen={createOpen}\n          setCreateOpen={setCreateOpen}\n        />\n      </NavigationMenu>\n      <Modal\n        open={!!deleteTarget}\n        onOpenChange={(open) => {\n          if (!open) setDeleteTarget(null);\n        }}\n      >\n        <ModalContent>\n          <ModalTitle>Delete token?</ModalTitle>\n          <ModalDescription>\n            This will permanently revoke \"{deleteTarget?.name}\". Any scripts or\n            integrations using this token will stop working.\n          </ModalDescription>\n          <ModalFooter>\n            <Button variant=\"destructive\" className=\"w-full justify-center\" onClick={handleDelete}>\n              <ButtonText>Delete</ButtonText>\n            </Button>\n            <Button variant=\"elevated\" className=\"w-full justify-center\" onClick={() => setDeleteTarget(null)}>\n              <ButtonText>Cancel</ButtonText>\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </Modal>\n      <Modal open={!!revealedToken} onOpenChange={(open) => {\n        if (!open) handleCloseReveal();\n      }}>\n        <ModalContent>\n          <ModalTitle>Token created</ModalTitle>\n          <ModalDescription>\n            Copy your token now. You won't be able to see it again.\n          </ModalDescription>\n          <div className=\"flex gap-1.5\">\n            <Input\n              readOnly\n              value={revealedToken ?? \"\"}\n              className=\"text-sm\"\n            />\n            <Button\n              variant=\"border\"\n              className=\"shrink-0 aspect-square\"\n              onClick={handleCopy}\n              disabled={!revealedToken}\n            >\n              <ButtonIcon>\n                <CopyTokenIcon copied={copied} />\n              </ButtonIcon>\n            </Button>\n          </div>\n          <ModalFooter>\n            <Button variant=\"elevated\" className=\"w-full justify-center\" onClick={handleCloseReveal}>\n              <ButtonText>Done</ButtonText>\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </Modal>\n    </div>\n  );\n}\n\nfunction CreateSubmitButton({ isCreating }: { isCreating: boolean }) {\n  if (isCreating) {\n    return (\n      <Button type=\"submit\" className=\"w-full justify-center\" disabled>\n        <ButtonText>Creating...</ButtonText>\n      </Button>\n    );\n  }\n\n  return (\n    <Button type=\"submit\" className=\"w-full justify-center\">\n      <ButtonText>Create</ButtonText>\n    </Button>\n  );\n}\n\nfunction CreateTokenButton({\n  onCreated,\n  onError,\n  createOpen,\n  setCreateOpen,\n}: {\n  onCreated: (plainToken: string) => void;\n  onError: (error: string | null) => void;\n  createOpen: boolean;\n  setCreateOpen: (open: boolean) => void;\n}) {\n  const nameRef = useRef<HTMLInputElement>(null);\n  const [isCreating, setIsCreating] = useState(false);\n\n  const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const name = nameRef.current?.value?.trim();\n    if (!name) return;\n    onError(null);\n    setIsCreating(true);\n    try {\n      const result = await createApiToken(name);\n      track(ANALYTICS_EVENTS.api_token_created);\n      setCreateOpen(false);\n      onCreated(result.token);\n    } catch (err) {\n      onError(resolveErrorMessage(err, \"Failed to create token.\"));\n      setCreateOpen(false);\n    } finally {\n      setIsCreating(false);\n    }\n  };\n\n  return (\n    <>\n      <NavigationMenuButtonItem onClick={() => setCreateOpen(true)}>\n        <NavigationMenuItemIcon>\n          <Plus size={15} />\n        </NavigationMenuItemIcon>\n        <NavigationMenuItemLabel>Create Token</NavigationMenuItemLabel>\n      </NavigationMenuButtonItem>\n      <Modal open={createOpen} onOpenChange={setCreateOpen}>\n        <ModalContent>\n          <form onSubmit={handleSubmit} className=\"contents\">\n            <ModalTitle>Create API token</ModalTitle>\n            <ModalDescription>\n              Give your token a name to help you remember what it's used for.\n            </ModalDescription>\n            <Input ref={nameRef} name=\"name\" placeholder=\"Token name\" autoFocus />\n            <ModalFooter>\n              <CreateSubmitButton isCreating={isCreating} />\n              <Button type=\"button\" variant=\"elevated\" className=\"w-full justify-center\" onClick={() => setCreateOpen(false)}>\n                <ButtonText>Cancel</ButtonText>\n              </Button>\n            </ModalFooter>\n          </form>\n        </ModalContent>\n      </Modal>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/settings/change-password.tsx",
    "content": "import { useState, useTransition, type SubmitEvent } from \"react\";\nimport { createFileRoute, redirect, useNavigate } from \"@tanstack/react-router\";\nimport LoaderCircle from \"lucide-react/dist/esm/icons/loader-circle\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { Divider } from \"@/components/ui/primitives/divider\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { changePassword } from \"@/lib/auth\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\n\nexport const Route = createFileRoute(\n  \"/(dashboard)/dashboard/settings/change-password\",\n)({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.supportsChangePassword) {\n      throw redirect({ to: \"/dashboard/settings\" });\n    }\n    return capabilities;\n  },\n  component: ChangePasswordPage,\n});\n\nfunction resolveInputTone(error: string | null): \"error\" | \"neutral\" {\n  if (error) return \"error\";\n  return \"neutral\";\n}\n\nfunction ChangePasswordPage() {\n  const navigate = useNavigate();\n  const [error, setError] = useState<string | null>(null);\n  const [isPending, startTransition] = useTransition();\n\n  const handleSubmit = (event: SubmitEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    setError(null);\n    const formData = new FormData(event.currentTarget);\n    const current = formData.get(\"current\");\n    const newPassword = formData.get(\"new\");\n    const confirm = formData.get(\"confirm\");\n\n    if (typeof current !== \"string\" || typeof newPassword !== \"string\" || typeof confirm !== \"string\") return;\n\n    if (newPassword !== confirm) {\n      setError(\"Passwords do not match.\");\n      return;\n    }\n\n    startTransition(async () => {\n      try {\n        await changePassword(current, newPassword);\n        track(ANALYTICS_EVENTS.password_changed);\n        navigate({ to: \"/dashboard/settings\" });\n      } catch (err) {\n        setError(resolveErrorMessage(err, \"Failed to change password.\"));\n      }\n    });\n  };\n\n  const inputTone = resolveInputTone(error);\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton fallback=\"/dashboard/settings\" />\n      <form onSubmit={handleSubmit} className=\"flex flex-col gap-3\">\n        <div className=\"flex flex-col gap-1.5\">\n          <Input name=\"current\" type=\"password\" placeholder=\"Current password\" tone={inputTone} />\n          <Input name=\"new\" type=\"password\" placeholder=\"New password\" tone={inputTone} />\n          <Input name=\"confirm\" type=\"password\" placeholder=\"Confirm new password\" tone={inputTone} />\n        </div>\n        {error && <Text size=\"sm\" tone=\"danger\">{error}</Text>}\n        <Divider />\n        <Button type=\"submit\" variant=\"highlight\" className=\"w-full justify-center\" disabled={isPending}>\n          {isPending && <LoaderCircle size={16} className=\"animate-spin\" />}\n          <ButtonText>{isPending ? \"Saving...\" : \"Save\"}</ButtonText>\n        </Button>\n      </form>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/settings/index.tsx",
    "content": "import { useCallback, useRef, useState } from \"react\";\nimport { createFileRoute, useNavigate } from \"@tanstack/react-router\";\nimport CreditCard from \"lucide-react/dist/esm/icons/credit-card\";\nimport KeyRound from \"lucide-react/dist/esm/icons/key-round\";\nimport KeySquare from \"lucide-react/dist/esm/icons/key-square\";\nimport Lock from \"lucide-react/dist/esm/icons/lock\";\nimport Mail from \"lucide-react/dist/esm/icons/mail\";\nimport Sparkles from \"lucide-react/dist/esm/icons/sparkles\";\nimport Cookie from \"lucide-react/dist/esm/icons/cookie\";\nimport Trash2 from \"lucide-react/dist/esm/icons/trash-2\";\nimport { pluralize } from \"@/lib/pluralize\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { useSession } from \"@/hooks/use-session\";\nimport { useApiTokens } from \"@/hooks/use-api-tokens\";\nimport { usePasskeys } from \"@/hooks/use-passkeys\";\nimport { useHasPassword } from \"@/hooks/use-has-password\";\nimport { Input } from \"@/components/ui/primitives/input\";\nimport { deleteAccount } from \"@/lib/auth\";\nimport {\n  Modal,\n  ModalContent,\n  ModalDescription,\n  ModalFooter,\n  ModalTitle,\n} from \"@/components/ui/primitives/modal\";\nimport {\n  NavigationMenu,\n  NavigationMenuButtonItem,\n  NavigationMenuItem,\n  NavigationMenuLinkItem,\n  NavigationMenuToggleItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuItemTrailing,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { resolveEffectiveConsent, setAnalyticsConsent, track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport { getCommercialMode } from \"@/config/commercial\";\nimport { useSubscription, fetchSubscriptionStateWithApi } from \"@/hooks/use-subscription\";\nimport { openCustomerPortal } from \"@/utils/checkout\";\n\nasync function loadSubscription(context: { runtimeConfig: { commercialMode: boolean }; fetchApi: <T>(path: string, init?: RequestInit) => Promise<T> }) {\n  if (!context.runtimeConfig.commercialMode) return undefined;\n  try {\n    return await fetchSubscriptionStateWithApi(context.fetchApi);\n  } catch {\n    return undefined;\n  }\n}\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/settings/\")({\n  loader: async ({ context }) => {\n    const [authCapabilities, subscription] = await Promise.all([\n      fetchAuthCapabilitiesWithApi(context.fetchApi),\n      loadSubscription(context),\n    ]);\n    return { authCapabilities, subscription };\n  },\n  component: SettingsPage,\n});\n\nfunction SettingsPage() {\n  const { authCapabilities, subscription: loaderSubscription } = Route.useLoaderData();\n  const { user } = useSession();\n  const navigate = useNavigate();\n  const passwordRef = useRef<HTMLInputElement>(null);\n  const { data: hasPassword = false } = useHasPassword();\n  const accountLabel = authCapabilities.credentialMode === \"username\" ? \"Username\" : \"Email\";\n  const accountValue =\n    authCapabilities.credentialMode === \"username\"\n      ? (user?.username ?? user?.name ?? \"\")\n      : (user?.email ?? \"\");\n  const { data: apiTokens = [] } = useApiTokens();\n  const { data: passkeys = [] } = usePasskeys(authCapabilities.supportsPasskeys);\n  const { data: subscription, isLoading: subscriptionLoading } = useSubscription({\n    fallbackData: loaderSubscription,\n  });\n  const isPro = subscription?.plan === \"pro\";\n  const [isManaging, setIsManaging] = useState(false);\n  const { runtimeConfig } = Route.useRouteContext();\n  const [analyticsConsent, setAnalyticsConsentState] = useState(() =>\n    resolveEffectiveConsent(runtimeConfig.gdprApplies),\n  );\n  const handleAnalyticsToggle = useCallback((checked: boolean) => {\n    track(ANALYTICS_EVENTS.analytics_consent_changed, { granted: checked });\n    setAnalyticsConsent(checked);\n    setAnalyticsConsentState(checked);\n  }, []);\n  const [deleteOpen, setDeleteOpen] = useState(false);\n  const [deleteError, setDeleteError] = useState<string | null>(null);\n  const [isDeleting, setIsDeleting] = useState(false);\n\n  const handleManagePlan = async () => {\n    if (!isPro) {\n      navigate({ to: \"/dashboard/upgrade\" });\n      return;\n    }\n    setIsManaging(true);\n    try {\n      await openCustomerPortal();\n    } catch {\n      setIsManaging(false);\n    }\n  };\n\n\n  const handleDeleteAccount = async () => {\n    const password = hasPassword ? passwordRef.current?.value : undefined;\n    if (hasPassword && !password) return;\n    setDeleteError(null);\n    setIsDeleting(true);\n    try {\n      await deleteAccount(password);\n      track(ANALYTICS_EVENTS.account_deleted);\n      setDeleteOpen(false);\n      navigate({ to: \"/login\" });\n    } catch (err) {\n      setDeleteError(resolveErrorMessage(err, \"Failed to delete account.\"));\n    } finally {\n      setIsDeleting(false);\n    }\n  };\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton />\n      <NavigationMenu>\n        <NavigationMenuItem>\n          <NavigationMenuItemIcon>\n            <Mail size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>{accountLabel}</NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing>\n            <Text size=\"sm\" tone=\"muted\" className=\"truncate\">{accountValue}</Text>\n          </NavigationMenuItemTrailing>\n        </NavigationMenuItem>\n      </NavigationMenu>\n      <NavigationMenu>\n        {hasPassword && (\n          <NavigationMenuLinkItem to=\"/dashboard/settings/change-password\">\n            <NavigationMenuItemIcon>\n              <Lock size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Change Password</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing />\n          </NavigationMenuLinkItem>\n        )}\n        {authCapabilities.supportsPasskeys && (\n          <NavigationMenuLinkItem to=\"/dashboard/settings/passkeys\">\n            <NavigationMenuItemIcon>\n              <KeyRound size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>Passkeys</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing>\n              <Text size=\"sm\" tone=\"muted\">\n                {pluralize(passkeys.length, \"passkey\", \"passkeys\")}\n              </Text>\n            </NavigationMenuItemTrailing>\n          </NavigationMenuLinkItem>\n        )}\n        <NavigationMenuLinkItem to=\"/dashboard/settings/api-tokens\">\n          <NavigationMenuItemIcon>\n            <KeySquare size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>API Tokens</NavigationMenuItemLabel>\n          <NavigationMenuItemTrailing>\n            <Text size=\"sm\" tone=\"muted\">\n              {pluralize(apiTokens.length, \"token\", \"tokens\")}\n            </Text>\n          </NavigationMenuItemTrailing>\n        </NavigationMenuLinkItem>\n      </NavigationMenu>\n      <NavigationMenu>\n        <NavigationMenuToggleItem checked={analyticsConsent} onCheckedChange={handleAnalyticsToggle}>\n          <NavigationMenuItemIcon>\n            <Cookie size={15} />\n          </NavigationMenuItemIcon>\n          <NavigationMenuItemLabel>Analytics Cookies</NavigationMenuItemLabel>\n        </NavigationMenuToggleItem>\n      </NavigationMenu>\n      {getCommercialMode() && (\n        <NavigationMenu variant={isPro ? \"default\" : \"highlight\"}>\n          <NavigationMenuButtonItem onClick={handleManagePlan} disabled={isManaging || subscriptionLoading}>\n            <NavigationMenuItemIcon>\n              {isPro ? <CreditCard size={15} /> : <Sparkles size={15} />}\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>{isPro ? \"Manage Plan\" : \"Upgrade to Pro\"}</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing />\n          </NavigationMenuButtonItem>\n        </NavigationMenu>\n      )}\n      <NavigationMenu>\n        <NavigationMenuButtonItem onClick={() => setDeleteOpen(true)}>\n          <NavigationMenuItemIcon>\n            <Trash2 size={15} className=\"text-destructive\" />\n          </NavigationMenuItemIcon>\n          <Text size=\"sm\" tone=\"danger\">Delete Account</Text>\n        </NavigationMenuButtonItem>\n      </NavigationMenu>\n      <Modal open={deleteOpen} onOpenChange={setDeleteOpen}>\n        <ModalContent>\n          <ModalTitle>Delete account?</ModalTitle>\n          <ModalDescription>\n            This action is permanent and cannot be undone. All of your data, calendars, and connected accounts will be permanently deleted.\n          </ModalDescription>\n          {hasPassword && (\n            <Input ref={passwordRef} type=\"password\" placeholder=\"Confirm your password\" />\n          )}\n          {deleteError && <Text size=\"sm\" tone=\"danger\">{deleteError}</Text>}\n          <ModalFooter>\n            <Button variant=\"destructive\" className=\"w-full justify-center\" onClick={handleDeleteAccount} disabled={isDeleting}>\n              <ButtonText>{isDeleting ? \"Deleting...\" : \"Delete my account\"}</ButtonText>\n            </Button>\n            <Button variant=\"elevated\" className=\"w-full justify-center\" onClick={() => setDeleteOpen(false)}>\n              <ButtonText>Cancel</ButtonText>\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </Modal>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/settings/passkeys.tsx",
    "content": "import { useState } from \"react\";\nimport { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport KeyRound from \"lucide-react/dist/esm/icons/key-round\";\nimport Plus from \"lucide-react/dist/esm/icons/plus\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { usePasskeys, addPasskey, deletePasskey } from \"@/hooks/use-passkeys\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\nimport type { Passkey } from \"@/hooks/use-passkeys\";\nimport { formatDateShort } from \"@/lib/time\";\nimport {\n  Modal,\n  ModalContent,\n  ModalDescription,\n  ModalFooter,\n  ModalTitle,\n} from \"@/components/ui/primitives/modal\";\nimport {\n  NavigationMenu,\n  NavigationMenuButtonItem,\n  NavigationMenuItemIcon,\n  NavigationMenuItemLabel,\n  NavigationMenuItemTrailing,\n} from \"@/components/ui/composites/navigation-menu/navigation-menu-items\";\nimport { ErrorState } from \"@/components/ui/primitives/error-state\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\n\nexport const Route = createFileRoute(\n  \"/(dashboard)/dashboard/settings/passkeys\",\n)({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.supportsPasskeys) {\n      throw redirect({ to: \"/dashboard/settings\" });\n    }\n    return capabilities;\n  },\n  component: PasskeysPage,\n});\n\nfunction PasskeysPage() {\n  const { data: passkeys = [], error, mutate } = usePasskeys();\n  const [deleteTarget, setDeleteTarget] = useState<Passkey | null>(null);\n  const [mutationError, setMutationError] = useState<string | null>(null);\n\n  const handleDelete = async () => {\n    if (!deleteTarget) return;\n    const targetId = deleteTarget.id;\n    setDeleteTarget(null);\n    setMutationError(null);\n    try {\n      await mutate(\n        async (current) => {\n          await deletePasskey(targetId);\n          return current?.filter((entry) => entry.id !== targetId) ?? [];\n        },\n        {\n          optimisticData: passkeys.filter((entry) => entry.id !== targetId),\n          rollbackOnError: true,\n          revalidate: false,\n        },\n      );\n      track(ANALYTICS_EVENTS.passkey_deleted);\n    } catch (err) {\n      setMutationError(resolveErrorMessage(err, \"Failed to delete passkey.\"));\n    }\n  };\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton fallback=\"/dashboard/settings\" />\n      {error && <ErrorState message=\"Failed to load passkeys.\" onRetry={() => mutate()} />}\n      {mutationError && <Text size=\"sm\" tone=\"danger\">{mutationError}</Text>}\n      <NavigationMenu>\n        {passkeys.map((passkey) => (\n          <NavigationMenuButtonItem key={passkey.id} onClick={() => setDeleteTarget(passkey)}>\n            <NavigationMenuItemIcon>\n              <KeyRound size={15} />\n            </NavigationMenuItemIcon>\n            <NavigationMenuItemLabel>{passkey.name ?? \"Passkey\"}</NavigationMenuItemLabel>\n            <NavigationMenuItemTrailing>\n              <Text size=\"sm\" tone=\"muted\">{formatDateShort(passkey.createdAt)}</Text>\n            </NavigationMenuItemTrailing>\n          </NavigationMenuButtonItem>\n        ))}\n        <AddPasskeyButton mutate={mutate} onError={setMutationError} />\n      </NavigationMenu>\n      <Modal open={!!deleteTarget} onOpenChange={(open) => { if (!open) setDeleteTarget(null); }}>\n        <ModalContent>\n          <ModalTitle>Delete passkey?</ModalTitle>\n          <ModalDescription>\n            This will remove \"{deleteTarget?.name ?? \"Passkey\"}\" from your account. You won't be able to use it to sign in anymore.\n          </ModalDescription>\n          <ModalFooter>\n            <Button variant=\"destructive\" className=\"w-full justify-center\" onClick={handleDelete}>\n              <ButtonText>Delete</ButtonText>\n            </Button>\n            <Button variant=\"elevated\" className=\"w-full justify-center\" onClick={() => setDeleteTarget(null)}>\n              <ButtonText>Cancel</ButtonText>\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </Modal>\n    </div>\n  );\n}\n\nfunction AddPasskeyButton({\n  mutate,\n  onError,\n}: {\n  mutate: ReturnType<typeof usePasskeys>[\"mutate\"];\n  onError: (error: string | null) => void;\n}) {\n  const [isMutating, setIsMutating] = useState(false);\n\n  const handleAdd = async () => {\n    onError(null);\n    setIsMutating(true);\n    try {\n      await addPasskey();\n      track(ANALYTICS_EVENTS.passkey_created);\n      await mutate();\n    } catch (err) {\n      onError(resolveErrorMessage(err, \"Failed to add passkey.\"));\n    } finally {\n      setIsMutating(false);\n    }\n  };\n\n  return (\n    <NavigationMenuButtonItem onClick={isMutating ? undefined : handleAdd} disabled={isMutating}>\n      <NavigationMenuItemIcon>\n        <Plus size={15} />\n      </NavigationMenuItemIcon>\n      <NavigationMenuItemLabel>{isMutating ? \"Working...\" : \"Add Passkey\"}</NavigationMenuItemLabel>\n    </NavigationMenuButtonItem>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/settings/route.tsx",
    "content": "import { createFileRoute, Outlet } from \"@tanstack/react-router\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/settings\")({\n  component: SettingsLayout,\n});\n\nfunction SettingsLayout() {\n  return <Outlet />;\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/dashboard/upgrade/index.tsx",
    "content": "import { useState, useTransition } from \"react\";\nimport { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport { BackButton } from \"@/components/ui/primitives/back-button\";\nimport { DashboardHeading1, DashboardHeading3 } from \"@/components/ui/primitives/dashboard-heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport {\n  UpgradeCard,\n  UpgradeCardSection,\n  UpgradeCardToggle,\n  UpgradeCardFeature,\n  UpgradeCardFeatureIcon,\n  UpgradeCardActions,\n} from \"@/features/dashboard/components/upgrade-card\";\nimport Check from \"lucide-react/dist/esm/icons/check\";\nimport { HttpError } from \"@/lib/fetcher\";\nimport { track, ANALYTICS_EVENTS, reportPurchaseConversion } from \"@/lib/analytics\";\nimport {\n  fetchSubscriptionStateWithApi,\n  useSubscription,\n} from \"@/hooks/use-subscription\";\nimport { openCheckout, openCustomerPortal } from \"@/utils/checkout\";\nimport { getPlans } from \"@/config/plans\";\nimport type { PlanConfig } from \"@/config/plans\";\nimport { resolveUpgradeRedirect } from \"@/lib/route-access-guards\";\nimport type { PublicRuntimeConfig } from \"@/lib/runtime-config\";\n\nexport const Route = createFileRoute(\"/(dashboard)/dashboard/upgrade/\")({\n  beforeLoad: ({ context }) => {\n    if (!context.runtimeConfig.commercialMode) {\n      throw redirect({ to: \"/dashboard\" });\n    }\n  },\n  loader: async ({ context }) => {\n    const sessionRedirect = resolveUpgradeRedirect(\n      context.auth.hasSession(),\n      null,\n    );\n    if (sessionRedirect) {\n      throw redirect({ to: sessionRedirect });\n    }\n\n    try {\n      const subscription = await fetchSubscriptionStateWithApi(context.fetchApi);\n      const redirectTarget = resolveUpgradeRedirect(\n        true,\n        subscription.plan,\n      );\n      if (redirectTarget) {\n        throw redirect({ to: redirectTarget });\n      }\n\n      return { subscription };\n    } catch (error) {\n      if (error instanceof HttpError && error.status === 401) {\n        const redirectTarget = resolveUpgradeRedirect(false, null);\n        throw redirect({ to: redirectTarget ?? \"/login\" });\n      }\n      throw error;\n    }\n  },\n  component: UpgradePage,\n});\n\nfunction resolveProPlan(runtimeConfig: PublicRuntimeConfig): PlanConfig {\n  const plan = getPlans(runtimeConfig).find((candidatePlan) => candidatePlan.id === \"pro\");\n  if (!plan) {\n    throw new Error(\"Missing pro plan configuration.\");\n  }\n  return plan;\n}\n\nfunction UpgradePage() {\n  const { runtimeConfig } = Route.useRouteContext();\n  const proPlan = resolveProPlan(runtimeConfig);\n  const { subscription: loaderSubscription } = Route.useLoaderData();\n  const { data: subscription, isLoading, mutate } = useSubscription({\n    fallbackData: loaderSubscription,\n  });\n  const [yearly, setYearly] = useState(false);\n\n  const handleBillingToggle = (checked: boolean) => {\n    const interval = checked ? \"annual\" : \"monthly\";\n    track(ANALYTICS_EVENTS.upgrade_billing_toggled, { interval });\n    setYearly(checked);\n  };\n  const [isPending, startTransition] = useTransition();\n\n  const currentPlan = subscription?.plan ?? \"free\";\n  const currentInterval = subscription?.interval;\n  const isCurrent = currentPlan === \"pro\";\n  const isCurrentInterval =\n    (currentInterval === \"year\" && yearly) ||\n    (currentInterval === \"month\" && !yearly);\n\n  const price = yearly ? (proPlan.yearlyPrice / 12).toFixed(2) : proPlan.monthlyPrice.toFixed(2);\n  const period = yearly ? \"per month, billed annually\" : \"per month\";\n  const productId = yearly ? proPlan.yearlyProductId : proPlan.monthlyProductId;\n\n  const handleUpgrade = () => {\n    if (!productId) return;\n    track(ANALYTICS_EVENTS.upgrade_started);\n    startTransition(async () => {\n      await openCheckout(productId, {\n        onSuccess: () => {\n          reportPurchaseConversion(runtimeConfig);\n          mutate();\n        },\n      });\n    });\n  };\n\n  const handleManage = () => {\n    track(ANALYTICS_EVENTS.plan_managed);\n    startTransition(async () => {\n      await openCustomerPortal();\n    });\n  };\n\n  const busy = isLoading || isPending;\n  const mode = !isCurrent ? \"upgrade\" : isCurrentInterval ? \"manage\" : \"switch-interval\";\n\n  return (\n    <div className=\"flex flex-col gap-1.5\">\n      <BackButton />\n\n      <UpgradeCard className=\"mt-4\">\n        <UpgradeCardSection gap=\"sm\">\n          <DashboardHeading3 as=\"h1\" className=\"text-white\">Upgrade to Pro</DashboardHeading3>\n          <div className=\"flex items-baseline gap-1\">\n            <DashboardHeading1 as=\"span\" className=\"text-white tabular-nums\">${price}</DashboardHeading1>\n            <Text size=\"sm\" align=\"left\" className=\"text-neutral-400\">\n              {period}\n            </Text>\n          </div>\n          <UpgradeCardToggle checked={yearly} onCheckedChange={handleBillingToggle}>\n            <Text size=\"sm\" tone=\"highlight\">Annual billing</Text>\n          </UpgradeCardToggle>\n          <Text size=\"sm\" align=\"left\" className=\"text-neutral-400 pt-1\">\n            For power users who need fast syncs, advanced feed controls, and unlimited syncing. Thank you for supporting this project.\n          </Text>\n        </UpgradeCardSection>\n\n        <UpgradeCardSection>\n          {proPlan.features.map((feature) => (\n            <UpgradeCardFeature key={feature}>\n              <UpgradeCardFeatureIcon>\n                <Check size={14} />\n              </UpgradeCardFeatureIcon>\n              <Text size=\"sm\" className=\"text-neutral-300\">{feature}</Text>\n            </UpgradeCardFeature>\n          ))}\n        </UpgradeCardSection>\n\n        <UpgradeCardActions>\n          <UpgradeAction mode={mode} isLoading={busy} onUpgrade={handleUpgrade} onManage={handleManage} />\n        </UpgradeCardActions>\n      </UpgradeCard>\n    </div>\n  );\n}\n\ntype UpgradeActionProps = {\n  isLoading: boolean;\n  onUpgrade: () => void;\n  onManage: () => void;\n  mode: \"upgrade\" | \"manage\" | \"switch-interval\";\n};\n\nfunction UpgradeAction({ mode, isLoading, onUpgrade, onManage }: UpgradeActionProps) {\n  const base = \"w-full justify-center border-transparent bg-white text-neutral-900 hover:bg-neutral-100\";\n\n  const label =\n    mode === \"manage\" ? \"Manage Subscription\" :\n    mode === \"switch-interval\" ? \"Switch Billing Period\" :\n    isLoading ? \"Loading...\" : \"Upgrade to Pro\";\n\n  const handler = mode === \"upgrade\" ? onUpgrade : onManage;\n\n  return (\n    <Button variant=\"border\" className={base} onClick={handler} disabled={isLoading}>\n      <ButtonText>{label}</ButtonText>\n    </Button>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(dashboard)/route.tsx",
    "content": "import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\";\nimport { useAtomValue } from \"jotai\";\nimport { AnimatePresence, LazyMotion } from \"motion/react\";\nimport { loadMotionFeatures } from \"@/lib/motion-features\";\nimport * as m from \"motion/react-m\";\nimport { popoverOverlayAtom } from \"@/state/popover-overlay\";\nimport { SyncProvider } from \"@/providers/sync-provider\";\nimport { resolveDashboardRedirect } from \"@/lib/route-access-guards\";\n\nexport const Route = createFileRoute(\"/(dashboard)\")({\n  beforeLoad: ({ context }) => {\n    const redirectTarget = resolveDashboardRedirect(context.auth.hasSession());\n    if (redirectTarget) {\n      throw redirect({ to: redirectTarget });\n    }\n  },\n  component: DashboardLayout,\n  head: () => ({\n    meta: [{ content: \"noindex, nofollow\", name: \"robots\" }],\n    links: [\n      {\n        rel: \"preload\",\n        href: \"/assets/fonts/GeistMono-variable.woff2\",\n        as: \"font\",\n        type: \"font/woff2\",\n        crossOrigin: \"anonymous\",\n      },\n    ],\n  }),\n});\n\nfunction DashboardLayout() {\n  const overlayActive = useAtomValue(popoverOverlayAtom);\n\n  return (\n    <div className=\"relative flex flex-col items-center min-h-dvh px-4 pb-12 pt-4 xs:pt-[min(6rem,25vh)]\">\n      <div className=\"relative flex flex-col gap-3 w-full max-w-sm\">\n        <LazyMotion features={loadMotionFeatures}>\n          <AnimatePresence>\n            {overlayActive && (\n              <m.div\n                className=\"fixed inset-0 z-10 backdrop-blur-[2px] bg-black/5\"\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.2 }}\n              />\n            )}\n          </AnimatePresence>\n        </LazyMotion>\n        <SyncProvider />\n        <Outlet />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/blog/$slug.tsx",
    "content": "import { createFileRoute, notFound } from \"@tanstack/react-router\";\nimport { Streamdown } from \"streamdown\";\nimport { Heading1 } from \"@/components/ui/primitives/heading\";\nimport { markdownComponents } from \"@/components/ui/primitives/markdown-component-map\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { BlogPostCta } from \"@/features/blog/components/blog-post-cta\";\nimport { findBlogPostBySlug, formatIsoDate } from \"@/lib/blog-posts\";\nimport { canonicalUrl, jsonLdScript, seoMeta, blogPostingSchema, breadcrumbSchema } from \"@/lib/seo\";\n\nexport const Route = createFileRoute(\"/(marketing)/blog/$slug\")({\n  component: BlogPostPage,\n  head: ({ params }) => {\n    const blogPost = findBlogPostBySlug(params.slug);\n    if (!blogPost) {\n      return { meta: [{ title: \"Blog Post · Keeper.sh\" }] };\n    }\n\n    const postUrl = `/blog/${params.slug}`;\n    return {\n      links: [{ rel: \"canonical\", href: canonicalUrl(postUrl) }],\n      meta: [\n        ...seoMeta({\n          title: blogPost.metadata.title,\n          description: blogPost.metadata.description,\n          path: postUrl,\n          type: \"article\",\n        }),\n        { content: blogPost.metadata.tags.join(\", \"), name: \"keywords\" },\n        { content: blogPost.metadata.createdAt, property: \"article:published_time\" },\n        { content: blogPost.metadata.updatedAt, property: \"article:modified_time\" },\n        ...blogPost.metadata.tags.map((tag) => ({\n          content: tag,\n          property: \"article:tag\",\n        })),\n      ],\n      scripts: [\n        jsonLdScript(blogPostingSchema({\n          title: blogPost.metadata.title,\n          description: blogPost.metadata.description,\n          slug: params.slug,\n          createdAt: blogPost.metadata.createdAt,\n          updatedAt: blogPost.metadata.updatedAt,\n          tags: blogPost.metadata.tags,\n        })),\n        jsonLdScript(breadcrumbSchema([\n          { name: \"Home\", path: \"/\" },\n          { name: \"Blog\", path: \"/blog\" },\n          { name: blogPost.metadata.title, path: postUrl },\n        ])),\n      ],\n    };\n  },\n});\n\nfunction BlogPostPage() {\n  const { slug } = Route.useParams();\n  const blogPost = findBlogPostBySlug(slug);\n  if (!blogPost) {\n    throw notFound();\n  }\n\n  const createdDate = formatIsoDate(blogPost.metadata.createdAt);\n  const updatedDate = formatIsoDate(blogPost.metadata.updatedAt);\n  const showUpdated = blogPost.metadata.updatedAt !== blogPost.metadata.createdAt;\n\n  return (\n    <div className=\"flex flex-col gap-6 py-16\">\n      <header className=\"flex flex-col gap-2\">\n        <Heading1>{blogPost.metadata.title}</Heading1>\n        <div className=\"flex flex-col\">\n          <Text size=\"sm\" tone=\"muted\" align=\"left\">\n            By{\" \"}\n            <a href=\"https://rida.dev\" target=\"_blank\" rel=\"noreferrer\" className=\"text-foreground underline underline-offset-2\">\n              Rida F'kih\n            </a>\n            {\" · \"}{createdDate}\n            {showUpdated && <> · Updated {updatedDate}</>}\n          </Text>\n        </div>\n      </header>\n\n      <article className=\"flex flex-col gap-2\">\n        <Streamdown components={markdownComponents}>\n          {blogPost.content}\n        </Streamdown>\n      </article>\n\n      <BlogPostCta />\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/blog/index.tsx",
    "content": "import { createFileRoute, Link } from \"@tanstack/react-router\";\nimport { Heading1, Heading3 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { blogPosts, formatIsoDate } from \"@/lib/blog-posts\";\nimport { canonicalUrl, jsonLdScript, seoMeta, breadcrumbSchema, collectionPageSchema } from \"@/lib/seo\";\n\nconst BLOG_ILLUSTRATION_STYLE = {\n  backgroundImage:\n    \"repeating-linear-gradient(-45deg, transparent 0 14px, var(--color-illustration-stripe) 14px 15px)\",\n} as const;\n\nexport const Route = createFileRoute(\"/(marketing)/blog/\")({\n  component: BlogDirectoryPage,\n  head: () => ({\n    links: [{ rel: \"canonical\", href: canonicalUrl(\"/blog\") }],\n    meta: seoMeta({\n      title: \"Blog\",\n      description: \"Product updates, engineering deep-dives, and calendar syncing tips from the Keeper.sh team.\",\n      path: \"/blog\",\n    }),\n    scripts: [\n      jsonLdScript(breadcrumbSchema([\n        { name: \"Home\", path: \"/\" },\n        { name: \"Blog\", path: \"/blog\" },\n      ])),\n      jsonLdScript(collectionPageSchema(blogPosts)),\n    ],\n  }),\n});\n\nfunction BlogDirectoryPage() {\n  return (\n    <div className=\"flex flex-col gap-8 py-16\">\n      <header className=\"flex flex-col gap-1.5\">\n        <Heading1>Blog</Heading1>\n        <Text size=\"base\" tone=\"muted\" className=\"leading-6\">\n          Product updates, engineering deep-dives, and calendar syncing tips from the Keeper.sh team.\n        </Text>\n      </header>\n\n      <div className=\"flex flex-col gap-3\">\n        {blogPosts.map((blogPost) => (\n          <Link\n            key={blogPost.slug}\n            className=\"group block overflow-hidden rounded-2xl border border-interactive-border bg-background shadow-xs transition-colors hover:bg-foreground/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n            params={{ slug: blogPost.slug }}\n            to=\"/blog/$slug\"\n          >\n            <article className=\"grid grid-cols-1 sm:grid-cols-3 sm:items-stretch\">\n              <div\n                className=\"bg-background h-28 sm:col-span-1 sm:h-full\"\n                style={BLOG_ILLUSTRATION_STYLE}\n                role=\"presentation\"\n              />\n              <div className=\"flex flex-col gap-1 p-4 md:p-5 sm:col-span-2\">\n                <Heading3 as=\"h2\" className=\"group-hover:text-foreground-hover\">\n                  {blogPost.metadata.title}\n                </Heading3>\n                <Text size=\"xs\" tone=\"muted\" className=\"opacity-75\">\n                  Created {formatIsoDate(blogPost.metadata.createdAt)}\n                </Text>\n                <Text size=\"sm\" tone=\"muted\" className=\"line-clamp-3\">\n                  {blogPost.metadata.blurb}\n                </Text>\n              </div>\n            </article>\n          </Link>\n        ))}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/blog/route.tsx",
    "content": "import { createFileRoute, Outlet } from \"@tanstack/react-router\";\n\nexport const Route = createFileRoute(\"/(marketing)/blog\")({\n  component: BlogRouteLayout,\n});\n\nfunction BlogRouteLayout() {\n  return <Outlet />;\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/index.tsx",
    "content": "import { useSetAtom } from 'jotai'\nimport { createFileRoute } from '@tanstack/react-router'\nimport { canonicalUrl, jsonLdScript, seoMeta, softwareApplicationSchema } from '../../lib/seo'\nimport { Heading1, Heading2, Heading3 } from '../../components/ui/primitives/heading'\nimport { Text } from '../../components/ui/primitives/text'\nimport {\n  MarketingHowItWorksSection,\n  MarketingHowItWorksCard,\n  MarketingHowItWorksRow,\n  MarketingHowItWorksStepBody,\n  MarketingHowItWorksStepIllustration,\n} from '../../features/marketing/components/marketing-how-it-works'\nimport { MarketingFaqSection, MarketingFaqList, MarketingFaqItem, MarketingFaqQuestion } from '../../features/marketing/components/marketing-faq'\nimport { MarketingCtaSection, MarketingCtaCard } from '../../features/marketing/components/marketing-cta'\nimport { Collapsible } from '../../components/ui/primitives/collapsible'\nimport { ButtonIcon, ButtonText, ExternalLinkButton, LinkButton } from '../../components/ui/primitives/button'\nimport { MarketingIllustrationCalendar, MarketingIllustrationCalendarCard, type Skew, type SkewTuple } from '../../features/marketing/components/marketing-illustration-calendar'\nimport {\n  MarketingFeatureBentoBody,\n  MarketingFeatureBentoCard,\n  MarketingFeatureBentoGrid,\n  MarketingFeatureBentoIllustration,\n  MarketingFeatureBentoSection,\n} from '../../features/marketing/components/marketing-feature-bento'\nimport { MarketingIllustrationContributors } from '../../illustrations/marketing-illustration-contributors'\nimport { MarketingIllustrationProviders } from '../../illustrations/marketing-illustration-providers'\nimport { MarketingIllustrationSync } from '../../illustrations/marketing-illustration-sync'\nimport { MarketingIllustrationSetup } from '../../illustrations/marketing-illustration-setup'\nimport { HowItWorksConnect } from '../../illustrations/how-it-works-connect'\nimport { HowItWorksConfigure } from '../../illustrations/how-it-works-configure'\nimport { HowItWorksSync } from '../../illustrations/how-it-works-sync'\nimport {\n  MarketingPricingComparisonGrid,\n  MarketingPricingComparisonSpacer,\n  MarketingPricingFeatureDisplay,\n  MarketingPricingFeatureLabel,\n  type MarketingPricingFeatureValueKind,\n  MarketingPricingFeatureMatrix,\n  MarketingPricingFeatureRow,\n  MarketingPricingFeatureValue,\n  MarketingPricingIntro,\n  MarketingPricingPlanCard,\n  MarketingPricingSection,\n} from '../../features/marketing/components/marketing-pricing-section'\nimport { calendarEmphasizedAtom } from '../../state/calendar-emphasized'\nimport { ANALYTICS_EVENTS } from '../../lib/analytics'\nimport ArrowRightIcon from \"lucide-react/dist/esm/icons/arrow-right\";\nimport ArrowUpRightIcon from \"lucide-react/dist/esm/icons/arrow-up-right\";\n\nconst createSkew = (rotate: number, x: number, y: number): Skew => ({ rotate, x, y });\n\nconst SKEW_BACK_LEFT: SkewTuple = [\n  createSkew(-12, -24, 12),\n  createSkew(-8, -16, 8),\n  createSkew(-3, -8, 4),\n]\n\nconst SKEW_BACK_RIGHT: SkewTuple = [\n  createSkew(9, 20, -8),\n  createSkew(5, 12, -4),\n  createSkew(1.5, 6, -2),\n]\n\nconst SKEW_FRONT: SkewTuple = [\n  createSkew(-4, 4, -6),\n  createSkew(-2, 2, -2),\n  createSkew(0, 0, 0),\n]\n\ntype MarketingFeature = {\n  id: number\n  title: string\n  description: string\n  gridClassName: string\n  illustration?: React.ReactNode\n}\n\nconst MARKETING_FEATURES: MarketingFeature[] = [\n  {\n    id: 1,\n    title: 'Privacy-First & Open Source',\n    description:\n      'Open-source, released under an AGPL-3.0 license. Secure and community driven. Here are some of the latest contributors.',\n    gridClassName: 'lg:col-start-1 lg:col-span-4 lg:row-start-1',\n    illustration: <MarketingIllustrationContributors />,\n  },\n  {\n    id: 2,\n    title: 'Universal Calendar Sync',\n    description:\n      'Google Calendar, Outlook, Apple Calendar, and more. Automatically sync events between all your calendars no matter the provider.',\n    gridClassName: 'lg:col-start-5 lg:col-span-6 lg:row-start-1',\n    illustration: <MarketingIllustrationProviders />,\n  },\n  {\n    id: 3,\n    title: 'Simple Synchronization Engine',\n    description:\n      'Your events are aggregated and synced across all linked calendars. Discrepancies are reconciled. Built to prevent orphan events.',\n    gridClassName: 'lg:col-start-1 lg:col-span-6 lg:row-start-2',\n    illustration: <MarketingIllustrationSync />,\n  },\n  {\n    id: 4,\n    title: 'Quick Setup',\n    description:\n      'Link OAuth, ICS or CalDAV accounts in seconds. No complicated configuration or technical knowledge required. Connect and go.',\n    gridClassName: 'lg:col-start-7 lg:col-span-4 lg:row-start-2',\n    illustration: <MarketingIllustrationSetup />,\n  },\n]\n\ntype PricingFeature = {\n  label: string\n  free: MarketingPricingFeatureValueKind\n  pro: MarketingPricingFeatureValueKind\n}\n\ntype PricingPlan = {\n  id: string\n  name: string\n  price: string\n  period: string\n  description: string\n  ctaLabel: string\n  tone?: \"default\" | \"inverse\"\n}\n\nconst PRICING_PLANS: PricingPlan[] = [\n  {\n    id: 'free',\n    name: 'Free',\n    price: '$0',\n    period: 'per month',\n    description:\n      'For personal use and getting started with calendar sync.',\n    ctaLabel: 'Get Started',\n  },\n  {\n    id: 'pro',\n    name: 'Pro',\n    price: '$5',\n    period: 'per month',\n    description:\n      'For power users who need fast syncs, advanced feed controls, and unlimited syncing.',\n    ctaLabel: 'Get Started',\n    tone: \"inverse\" as const,\n  },\n]\n\nconst PRICING_FEATURES: PricingFeature[] = [\n  { label: 'Sync Interval', free: 'Every 30 minutes', pro: 'Every 1 minute' },\n  { label: 'Linked Accounts', free: 'Up to 2', pro: 'infinity' },\n  { label: 'Sync Mappings', free: 'Up to 3', pro: 'infinity' },\n  { label: 'Aggregated iCal Feed', free: 'check', pro: 'check' },\n  { label: 'iCal Feed Customization', free: 'minus', pro: 'check' },\n  { label: 'Event Filters & Exclusions', free: 'minus', pro: 'check' },\n  { label: 'API & MCP Access', free: '25 calls/day', pro: 'infinity' },\n  { label: 'Priority Support', free: 'minus', pro: 'check' },\n]\n\ntype HowItWorksStep = {\n  title: string\n  description: string\n}\n\nconst HOW_IT_WORKS_STEPS: HowItWorksStep[] = [\n  {\n    title: 'Connect your calendars',\n    description:\n      'Link your Google, Outlook, iCloud, or CalDAV accounts using OAuth or ICS feeds. It takes seconds.',\n  },\n  {\n    title: 'Configure sync rules',\n    description:\n      'Choose which calendars to sync and how events should appear. Keeper handles the rest automatically.',\n  },\n  {\n    title: 'Stay in sync',\n    description:\n      'Events are continuously aggregated and pushed across all your linked calendars. Conflicts are reconciled.',\n  },\n]\n\ntype FaqItem = {\n  question: string\n  answer: string\n  content?: React.ReactNode\n}\n\nconst FAQ_ITEMS: FaqItem[] = [\n  {\n    question: 'Can I use ICS or iCal links as a source?',\n    answer:\n      'Yes. Any publicly accessible ICS or iCal link can be used as a calendar source in Keeper. This means you can pull events from services that only offer read-only calendar feeds.',\n  },\n  {\n    question: 'Which calendar providers does Keeper.sh support?',\n    answer:\n      'Keeper.sh works with Google Calendar, Microsoft Outlook, Apple iCloud, FastMail, and any provider that supports CalDAV or ICS feeds. If your calendar supports one of these protocols, it will work with Keeper.',\n  },\n  {\n    question: 'Can I self-host Keeper.sh?',\n    answer:\n      'Yes. Keeper.sh is open-source under the AGPL-3.0 license. Check the README on GitHub for setup instructions, or use one of the many Docker images we offer for quick deployment.',\n    content: <>Yes. Keeper.sh is open-source under the AGPL-3.0 license. Check the <a href=\"https://github.com/ridafkih/keeper.sh#readme\" target=\"_blank\" rel=\"noreferrer\" className=\"text-foreground underline underline-offset-2\">README on GitHub</a> for setup instructions, or use one of the many Docker images we offer for quick deployment.</>,\n  },\n  {\n    question: 'How often do calendars sync?',\n    answer:\n      'On the free plan, calendars sync every 30 minutes. On the Pro plan, calendars sync every minute.',\n  },\n  {\n    question: 'Are my event details visible to others?',\n    answer:\n      'Only if you want them to be. You can choose whether events display details, or just show a generic event summary. You can customize the title, and choose to hide the details you want to keep private. These are configurable per-calendar.',\n  },\n  {\n    question: 'Can I control how synced events appear?',\n    answer:\n      'Yes. You configure how events are displayed on each destination calendar. Titles, descriptions, and other details can be customized or stripped entirely.',\n  },\n  {\n    question: 'Can I cancel my subscription anytime?',\n    answer:\n      'Yes. You can cancel at any time from your account settings. Your access continues until the end of the current billing period.',\n  },\n]\n\nexport const Route = createFileRoute('/(marketing)/')({\n  component: MarketingPage,\n  head: () => ({\n    links: [{ rel: \"canonical\", href: canonicalUrl(\"/\") }],\n    meta: seoMeta({\n      title: \"Open-Source Calendar Syncing for Google, Outlook & iCloud\",\n      description:\n        \"Keep your personal, work, and school calendars in sync automatically. Open-source (AGPL-3.0) calendar syncing for Google Calendar, Outlook, iCloud, FastMail, and CalDAV.\",\n      path: \"/\",\n      brandPosition: \"before\",\n    }),\n    scripts: [jsonLdScript(softwareApplicationSchema())],\n  }),\n})\n\nfunction MarketingPage() {\n  const setEmphasized = useSetAtom(calendarEmphasizedAtom)\n\n  return (\n    <div className=\"flex flex-col gap-2 pt-8\">\n      <Heading1 className=\"text-center\">All of your calendars in-sync.</Heading1>\n      <Text align=\"center\" className=\"max-w-[48ch] mx-auto\">\n        Synchronize events between your personal, work, business and school calendars automatically. Works with Google Calendar, Outlook, iCloud, CalDAV, and ICS/iCal feeds. Open-source under AGPL-3.0.\n      </Text>\n      <div className=\"contents *:z-20\">\n        <div className=\"flex items-center gap-2 mx-auto pt-1\">\n          <LinkButton\n            to=\"/register\"\n            size=\"compact\"\n            onMouseEnter={() => setEmphasized(true)}\n            onMouseLeave={() => setEmphasized(false)}\n            data-visitors-event={ANALYTICS_EVENTS.marketing_cta_clicked}\n            data-visitors-cta=\"hero\"\n          >\n            <ButtonText>Sync Calendars</ButtonText>\n            <ButtonIcon>\n              <ArrowRightIcon size={16} />\n            </ButtonIcon>\n          </LinkButton>\n          <ExternalLinkButton\n            href=\"https://github.com/ridafkih/keeper.sh\"\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            size=\"compact\"\n            variant=\"border\"\n          >\n            <ButtonText>View GitHub</ButtonText>\n            <ButtonIcon>\n              <ArrowUpRightIcon size={16} />\n            </ButtonIcon>\n          </ExternalLinkButton>\n        </div>\n      </div>\n      <div className=\"contents *:z-10\">\n        <div className=\"flex flex-col\">\n          <MarketingIllustrationCalendar>\n            <MarketingIllustrationCalendarCard skew={SKEW_BACK_LEFT} />\n            <MarketingIllustrationCalendarCard skew={SKEW_BACK_RIGHT} />\n            <MarketingIllustrationCalendarCard skew={SKEW_FRONT} />\n          </MarketingIllustrationCalendar>\n          <MarketingFeatureBentoSection id=\"features\">\n            <MarketingFeatureBentoGrid>\n              {MARKETING_FEATURES.map((feature) => (\n                <MarketingFeatureBentoCard key={feature.id} className={feature.gridClassName}>\n                  <MarketingFeatureBentoIllustration plain={!!feature.illustration}>\n                    {feature.illustration}\n                  </MarketingFeatureBentoIllustration>\n                  <MarketingFeatureBentoBody>\n                    <Heading3 as=\"h2\">{feature.title}</Heading3>\n                    <Text size=\"sm\" className=\"text-left\">\n                      {feature.description}\n                    </Text>\n                  </MarketingFeatureBentoBody>\n                </MarketingFeatureBentoCard>\n              ))}\n            </MarketingFeatureBentoGrid>\n          </MarketingFeatureBentoSection>\n\n          <MarketingPricingSection id=\"pricing\">\n            <MarketingPricingIntro>\n              <Heading2 className=\"text-center\">Hosted Pricing</Heading2>\n              <Text size='sm' align=\"center\">\n                Keeper.sh uses a low-cost freemium model to give you a solid range of choice. Check the GitHub repository for self-hosting options.\n              </Text>\n            </MarketingPricingIntro>\n\n            <MarketingPricingComparisonGrid>\n              <MarketingPricingComparisonSpacer />\n\n              {PRICING_PLANS.map((plan) => (\n                <MarketingPricingPlanCard\n                  key={plan.id}\n                  tone={plan.tone}\n                  name={plan.name}\n                  price={plan.price}\n                  period={plan.period}\n                  description={plan.description}\n                  ctaLabel={plan.ctaLabel}\n                />\n              ))}\n\n              <MarketingPricingFeatureMatrix>\n                {PRICING_FEATURES.map((feature) => (\n                  <MarketingPricingFeatureRow key={feature.label}>\n                    <MarketingPricingFeatureLabel>\n                      <Text size=\"sm\" className=\"text-left text-nowrap\">{feature.label}</Text>\n                    </MarketingPricingFeatureLabel>\n                    <MarketingPricingFeatureValue>\n                      <MarketingPricingFeatureDisplay value={feature.free} tone=\"muted\" />\n                    </MarketingPricingFeatureValue>\n                    <MarketingPricingFeatureValue>\n                      <MarketingPricingFeatureDisplay value={feature.pro} tone=\"muted\" />\n                    </MarketingPricingFeatureValue>\n                  </MarketingPricingFeatureRow>\n                ))}\n              </MarketingPricingFeatureMatrix>\n            </MarketingPricingComparisonGrid>\n          </MarketingPricingSection>\n\n          <MarketingHowItWorksSection>\n            <Heading2 className=\"text-center\">How It Works</Heading2>\n            <Text size=\"sm\" align=\"center\" className=\"mt-2 max-w-[48ch] mx-auto\">\n              Three steps to keep every calendar on the same page. Connect, configure, and forget about it.\n            </Text>\n            <MarketingHowItWorksCard>\n              <MarketingHowItWorksRow>\n                <MarketingHowItWorksStepBody step={1}>\n                  <Heading3 as=\"h3\">{HOW_IT_WORKS_STEPS[0].title}</Heading3>\n                  <Text size=\"sm\" tone=\"muted\">{HOW_IT_WORKS_STEPS[0].description}</Text>\n                </MarketingHowItWorksStepBody>\n                <MarketingHowItWorksStepIllustration align=\"right\">\n                  <HowItWorksConnect />\n                </MarketingHowItWorksStepIllustration>\n              </MarketingHowItWorksRow>\n\n              <MarketingHowItWorksRow reverse>\n                <MarketingHowItWorksStepBody step={2}>\n                  <Heading3 as=\"h3\">{HOW_IT_WORKS_STEPS[1].title}</Heading3>\n                  <Text size=\"sm\" tone=\"muted\">{HOW_IT_WORKS_STEPS[1].description}</Text>\n                </MarketingHowItWorksStepBody>\n                <MarketingHowItWorksStepIllustration align=\"left\">\n                  <HowItWorksConfigure />\n                </MarketingHowItWorksStepIllustration>\n              </MarketingHowItWorksRow>\n\n              <MarketingHowItWorksRow>\n                <MarketingHowItWorksStepBody step={3}>\n                  <Heading3 as=\"h3\">{HOW_IT_WORKS_STEPS[2].title}</Heading3>\n                  <Text size=\"sm\" tone=\"muted\">{HOW_IT_WORKS_STEPS[2].description}</Text>\n                </MarketingHowItWorksStepBody>\n                <MarketingHowItWorksStepIllustration align=\"right\">\n                  <HowItWorksSync />\n                </MarketingHowItWorksStepIllustration>\n              </MarketingHowItWorksRow>\n            </MarketingHowItWorksCard>\n          </MarketingHowItWorksSection>\n\n          <MarketingFaqSection>\n            <Heading2 className=\"text-center\">Frequently Asked Questions</Heading2>\n            <Text size=\"sm\" align=\"center\" className=\"mt-2 max-w-[48ch] mx-auto\">\n              Everything you need to know about Keeper.sh. Can't find what you're looking for? Reach out at{' '}\n              <a href=\"mailto:support@keeper.sh\" className=\"text-foreground underline underline-offset-2\">support@keeper.sh</a>.\n            </Text>\n            <MarketingFaqList>\n              {FAQ_ITEMS.map((item) => (\n                <MarketingFaqItem key={item.question}>\n                  <Collapsible\n                    trigger={<MarketingFaqQuestion>{item.question}</MarketingFaqQuestion>}\n                  >\n                    <Text size=\"sm\" tone=\"muted\">{item.content ?? item.answer}</Text>\n                  </Collapsible>\n                </MarketingFaqItem>\n              ))}\n            </MarketingFaqList>\n          </MarketingFaqSection>\n\n          <MarketingCtaSection>\n            <MarketingCtaCard>\n              <Heading2 className=\"text-center text-white\">Ready to sync your calendars?</Heading2>\n              <Text size=\"sm\" align=\"center\" tone=\"highlight\" className=\"max-w-[46ch]\">\n                Start syncing your calendars in seconds. Free to use, no credit card required.\n              </Text>\n              <div className=\"flex items-center gap-2 mt-2\">\n                <LinkButton to=\"/register\" size=\"compact\" variant=\"inverse\" data-visitors-event={ANALYTICS_EVENTS.marketing_cta_clicked} data-visitors-cta=\"bottom\">\n                  <ButtonText>Get Started</ButtonText>\n                  <ButtonIcon>\n                    <ArrowRightIcon size={16} />\n                  </ButtonIcon>\n                </LinkButton>\n                <ExternalLinkButton\n                  href=\"https://github.com/ridafkih/keeper.sh\"\n                  target=\"_blank\"\n                  rel=\"noreferrer\"\n                  size=\"compact\"\n                  variant=\"inverse-ghost\"\n                >\n                  <ButtonText>View on GitHub</ButtonText>\n                  <ButtonIcon>\n                    <ArrowUpRightIcon size={16} />\n                  </ButtonIcon>\n                </ExternalLinkButton>\n              </div>\n            </MarketingCtaCard>\n          </MarketingCtaSection>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/privacy.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { Heading1, Heading2, Heading3 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { canonicalUrl, jsonLdScript, seoMeta, webPageSchema, breadcrumbSchema } from \"@/lib/seo\";\nimport { privacyPageMetadata, formatMonthYear } from \"@/lib/page-metadata\";\n\nexport const Route = createFileRoute(\"/(marketing)/privacy\")({\n  component: PrivacyPage,\n  head: () => ({\n    links: [{ rel: \"canonical\", href: canonicalUrl(\"/privacy\") }],\n    meta: seoMeta({\n      title: \"Privacy Policy\",\n      description:\n        \"How Keeper.sh collects, uses, and protects your calendar data. Privacy-first design with event anonymization and minimal data retention.\",\n      path: \"/privacy\",\n    }),\n    scripts: [\n      jsonLdScript(webPageSchema(\"Privacy Policy\", \"Privacy policy for Keeper.sh, the open-source calendar syncing service.\", \"/privacy\")),\n      jsonLdScript(breadcrumbSchema([{ name: \"Home\", path: \"/\" }, { name: \"Privacy Policy\", path: \"/privacy\" }])),\n    ],\n  }),\n});\n\nfunction PrivacyPage() {\n  return (\n    <div className=\"flex flex-col gap-6 py-16\">\n      <div className=\"flex flex-col gap-1\">\n        <Heading1>Privacy Policy</Heading1>\n        <Text size=\"sm\" tone=\"muted\">Last updated: {formatMonthYear(privacyPageMetadata.updatedAt)}</Text>\n      </div>\n      <div className=\"flex flex-col gap-8\">\n        <Section title=\"Overview\">\n          <Text size=\"sm\">\n            Keeper.sh (&ldquo;we&rdquo;, &ldquo;our&rdquo;, or &ldquo;us&rdquo;) is committed to protecting your privacy. This Privacy Policy\n            explains how we collect, use, disclose, and safeguard your information when you use our\n            calendar synchronization service.\n          </Text>\n          <Text size=\"sm\">\n            By using Keeper.sh, you consent to the data practices described in this policy. If you do not\n            agree with the terms of this policy, please do not access or use our service.\n          </Text>\n        </Section>\n\n        <Section title=\"Information We Collect\">\n          <Heading3 as=\"h3\">Account Information</Heading3>\n          <Text size=\"sm\">\n            When you create an account, we collect your email address and authentication credentials.\n            If you sign up using a third-party provider (such as Google), we receive basic profile\n            information as permitted by your privacy settings with that provider.\n          </Text>\n          <Heading3 as=\"h3\">Calendar Data</Heading3>\n          <Text size=\"sm\">\n            To provide our service, we access calendar data from sources you connect. This includes\n            event titles, times, durations, and associated metadata. We only access calendars you\n            explicitly authorize.\n          </Text>\n          <Heading3 as=\"h3\">Usage Data</Heading3>\n          <Text size=\"sm\">\n            We automatically collect certain information when you access our service, including your\n            IP address, browser type, operating system, access times, and pages viewed. This data\n            helps us improve our service and diagnose technical issues.\n          </Text>\n        </Section>\n\n        <Section title=\"How We Use Your Information\">\n          <Text size=\"sm\">We use the information we collect to:</Text>\n          <ul className=\"list-disc list-inside flex flex-col gap-1 ml-2 text-sm tracking-tight text-foreground-muted\">\n            <li>Provide, maintain, and improve our calendar syncing service</li>\n            <li>Aggregate and anonymize calendar events for shared feeds, showing only busy/free status</li>\n            <li>Push synchronized events to your designated destination calendars</li>\n            <li>Send service-related communications and respond to inquiries</li>\n            <li>Monitor and analyze usage patterns to improve user experience</li>\n            <li>Detect, prevent, and address technical issues or abuse</li>\n          </ul>\n        </Section>\n\n        <Section title=\"Data Anonymization\">\n          <Text size=\"sm\">\n            A core feature of Keeper.sh is event anonymization. When you generate a shared iCal feed or\n            push to external calendars, event details (titles, descriptions, attendees, locations) are\n            stripped. Only busy/free time blocks are shared, protecting the privacy of your schedule\n            details.\n          </Text>\n        </Section>\n\n        <Section title=\"Data Storage and Security\">\n          <Text size=\"sm\">\n            Your data is stored on secure servers with encryption at rest and in transit. We implement\n            industry-standard security measures including access controls, monitoring, and regular\n            security assessments.\n          </Text>\n          <Text size=\"sm\">\n            Calendar data is cached temporarily to enable synchronization and is refreshed according\n            to your plan&apos;s sync interval. We do not retain historical calendar data beyond what is\n            necessary for the service to function.\n          </Text>\n        </Section>\n\n        <Section title=\"Data Retention\">\n          <Text size=\"sm\">\n            We retain your account information and calendar data for as long as your account is\n            active. When you delete your account, we delete all associated data within 30 days, except\n            where retention is required by law or for legitimate business purposes (such as fraud\n            prevention).\n          </Text>\n        </Section>\n\n        <Section title=\"Third-Party Services\">\n          <Text size=\"sm\">\n            We integrate with third-party calendar providers (such as Google Calendar) to access and\n            sync your calendar data. These integrations are governed by the respective providers&apos;\n            terms and privacy policies. We only request the minimum permissions necessary to provide\n            our service.\n          </Text>\n          <Text size=\"sm\">\n            We use third-party services for payment processing (Polar). Payment information is handled\n            directly by these processors and is not stored on our servers.\n          </Text>\n          <Text size=\"sm\">\n            We do not sell, trade, or otherwise transfer your personal information to third parties\n            for marketing purposes.\n          </Text>\n        </Section>\n\n        <Section title=\"Your Rights and Choices\">\n          <Text size=\"sm\">You have the right to:</Text>\n          <ul className=\"list-disc list-inside flex flex-col gap-1 ml-2 text-sm tracking-tight text-foreground-muted\">\n            <li>Access the personal data we hold about you</li>\n            <li>Request correction of inaccurate data</li>\n            <li>Request deletion of your data and account</li>\n            <li>Disconnect calendar sources at any time</li>\n            <li>Export your data in a portable format</li>\n            <li>Withdraw consent for data processing</li>\n          </ul>\n          <Text size=\"sm\">\n            To exercise these rights, contact us at{\" \"}\n            <a href=\"mailto:privacy@keeper.sh\" className=\"text-foreground underline underline-offset-2\">\n              privacy@keeper.sh\n            </a>\n            .\n          </Text>\n        </Section>\n\n        <Section title=\"International Data Transfers\">\n          <Text size=\"sm\">\n            Keeper.sh is operated from the Province of Alberta, Canada. Your information may be\n            transferred to and processed in countries other than your own. We ensure appropriate\n            safeguards are in place to protect your data in compliance with applicable Canadian\n            privacy laws, including the Personal Information Protection and Electronic Documents\n            Act (PIPEDA).\n          </Text>\n        </Section>\n\n        <Section title=\"Children's Privacy\">\n          <Text size=\"sm\">\n            Keeper.sh is not intended for use by individuals under the age of 13. We do not knowingly\n            collect personal information from children. If we become aware that we have collected data\n            from a child, we will take steps to delete it promptly.\n          </Text>\n        </Section>\n\n        <Section title=\"Changes to This Policy\">\n          <Text size=\"sm\">\n            We may update this Privacy Policy from time to time. We will notify you of significant\n            changes by posting the new policy on this page and updating the &ldquo;Last updated&rdquo; date. Your\n            continued use of the service after changes constitutes acceptance of the updated policy.\n          </Text>\n        </Section>\n\n        <Section title=\"Contact Us\">\n          <Text size=\"sm\">\n            If you have questions or concerns about this Privacy Policy or our data practices, please\n            contact us at{\" \"}\n            <a href=\"mailto:privacy@keeper.sh\" className=\"text-foreground underline underline-offset-2\">\n              privacy@keeper.sh\n            </a>\n            .\n          </Text>\n        </Section>\n      </div>\n    </div>\n  );\n}\n\nfunction Section({ title, children }: PropsWithChildren<{ title: string }>) {\n  return (\n    <section className=\"flex flex-col gap-3\">\n      <Heading2 as=\"h2\">{title}</Heading2>\n      {children}\n    </section>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/route.tsx",
    "content": "import { createFileRoute, Outlet, redirect } from '@tanstack/react-router'\nimport { jsonLdScript, organizationSchema } from '../../lib/seo'\nimport { Layout, LayoutItem } from '../../components/ui/shells/layout'\nimport { MarketingHeader, MarketingHeaderActions, MarketingHeaderBranding } from '../../features/marketing/components/marketing-header'\nimport { MarketingFooter, MarketingFooterTagline, MarketingFooterNav, MarketingFooterNavGroup, MarketingFooterNavGroupLabel, MarketingFooterNavItem } from '../../features/marketing/components/marketing-footer'\nimport KeeperLogo from \"@/assets/keeper.svg?react\";\nimport { ButtonText, LinkButton } from '../../components/ui/primitives/button';\nimport { GithubStarButton } from '../../components/ui/primitives/github-star-button';\nimport { SessionSlot } from '../../components/ui/shells/session-slot';\nimport HeartIcon from \"lucide-react/dist/esm/icons/heart\";\nimport { ExternalTextLink } from \"@/components/ui/primitives/text-link\";\nimport { CookieConsent } from \"@/components/cookie-consent\";\n\ninterface GithubStarsLoaderData {\n  count: number | null;\n  fetchedAt: string | null;\n}\n\nexport const Route = createFileRoute('/(marketing)')({\n  beforeLoad: ({ context }) => {\n    if (!context.runtimeConfig.commercialMode) {\n      const hasSession = context.auth.hasSession();\n      throw redirect({ to: hasSession ? \"/dashboard\" : \"/login\" });\n    }\n  },\n  loader: async ({ context }) => {\n    try {\n      return await context.fetchWeb<GithubStarsLoaderData>(\"/internal/github-stars\");\n    } catch {\n      return {\n        count: null,\n        fetchedAt: null,\n      } satisfies GithubStarsLoaderData;\n    }\n  },\n  head: () => ({\n    scripts: [jsonLdScript(organizationSchema)],\n  }),\n  component: MarketingLayout,\n})\n\nfunction MarketingLayout() {\n  const githubStars = Route.useLoaderData();\n  const { runtimeConfig } = Route.useRouteContext();\n\n  return (\n    <>\n      <MarketingHeader>\n        <MarketingHeaderBranding label=\"Keeper.sh home\">\n          <KeeperLogo className=\"w-full max-w-6\" aria-hidden=\"true\" />\n        </MarketingHeaderBranding>\n        <SessionSlot\n          authenticated={\n            <MarketingHeaderActions>\n              <GithubStarButton initialStarCount={githubStars.count} />\n              <LinkButton size=\"compact\" variant=\"highlight\" to=\"/dashboard\">\n                <ButtonText>Dashboard</ButtonText>\n              </LinkButton>\n            </MarketingHeaderActions>\n          }\n          unauthenticated={\n            <MarketingHeaderActions>\n              <GithubStarButton initialStarCount={githubStars.count} />\n              <LinkButton size=\"compact\" variant=\"border\" to=\"/login\">\n                <ButtonText>Login</ButtonText>\n              </LinkButton>\n              <LinkButton size=\"compact\" variant=\"highlight\" to=\"/register\">\n                <ButtonText>Register</ButtonText>\n              </LinkButton>\n            </MarketingHeaderActions>\n          }\n        />\n      </MarketingHeader>\n      <Layout>\n      <LayoutItem>\n        <main>\n          <Outlet />\n        </main>\n      </LayoutItem>\n      <LayoutItem>\n        <MarketingFooter>\n          <MarketingFooterTagline>\n            Made with <HeartIcon size={12} className=\"inline text-red-500 fill-red-500 relative -top-px\" aria-hidden=\"true\" /> by{\" \"}\n            <ExternalTextLink\n              align=\"left\"\n              href=\"https://rida.dev\"\n              rel=\"noopener noreferrer\"\n              size=\"sm\"\n              target=\"_blank\"\n              tone=\"muted\"\n            >\n              Rida F'kih\n            </ExternalTextLink>\n          </MarketingFooterTagline>\n          <MarketingFooterNav>\n            <MarketingFooterNavGroup>\n              <MarketingFooterNavGroupLabel>Product</MarketingFooterNavGroupLabel>\n              <MarketingFooterNavItem to=\"/register\">Get Started</MarketingFooterNavItem>\n              <MarketingFooterNavItem to=\"/#features\">Features</MarketingFooterNavItem>\n              <MarketingFooterNavItem to=\"/#pricing\">Pricing</MarketingFooterNavItem>\n            </MarketingFooterNavGroup>\n            <MarketingFooterNavGroup>\n              <MarketingFooterNavGroupLabel>Resources</MarketingFooterNavGroupLabel>\n              <MarketingFooterNavItem to=\"/blog\">Blog</MarketingFooterNavItem>\n              <MarketingFooterNavItem href=\"https://github.com/ridafkih/keeper.sh\">GitHub</MarketingFooterNavItem>\n            </MarketingFooterNavGroup>\n            <MarketingFooterNavGroup>\n              <MarketingFooterNavGroupLabel>Legal</MarketingFooterNavGroupLabel>\n              <MarketingFooterNavItem to=\"/privacy\">Privacy Policy</MarketingFooterNavItem>\n              <MarketingFooterNavItem to=\"/terms\">Terms of Service</MarketingFooterNavItem>\n            </MarketingFooterNavGroup>\n          </MarketingFooterNav>\n        </MarketingFooter>\n      </LayoutItem>\n    </Layout>\n    {runtimeConfig.gdprApplies && <CookieConsent />}\n    </>\n  )\n}\n"
  },
  {
    "path": "applications/web/src/routes/(marketing)/terms.tsx",
    "content": "import type { PropsWithChildren } from \"react\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { Heading1, Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { canonicalUrl, jsonLdScript, seoMeta, webPageSchema, breadcrumbSchema } from \"@/lib/seo\";\nimport { termsPageMetadata, formatMonthYear } from \"@/lib/page-metadata\";\n\nexport const Route = createFileRoute(\"/(marketing)/terms\")({\n  component: TermsPage,\n  head: () => ({\n    links: [{ rel: \"canonical\", href: canonicalUrl(\"/terms\") }],\n    meta: seoMeta({\n      title: \"Terms & Conditions\",\n      description:\n        \"Terms of service for Keeper.sh. Covers account registration, subscription billing, acceptable use, and data ownership for our calendar syncing service.\",\n      path: \"/terms\",\n    }),\n    scripts: [\n      jsonLdScript(webPageSchema(\"Terms & Conditions\", \"Terms and conditions for using Keeper.sh, the open-source calendar syncing service.\", \"/terms\")),\n      jsonLdScript(breadcrumbSchema([{ name: \"Home\", path: \"/\" }, { name: \"Terms & Conditions\", path: \"/terms\" }])),\n    ],\n  }),\n});\n\nfunction TermsPage() {\n  return (\n    <div className=\"flex flex-col gap-6 py-16\">\n      <div className=\"flex flex-col gap-1\">\n        <Heading1>Terms &amp; Conditions</Heading1>\n        <Text size=\"sm\" tone=\"muted\">Last updated: {formatMonthYear(termsPageMetadata.updatedAt)}</Text>\n      </div>\n      <div className=\"flex flex-col gap-8\">\n        <Section title=\"Agreement to Terms\">\n          <Text size=\"sm\">\n            These Terms and Conditions (&ldquo;Terms&rdquo;) constitute a legally binding agreement between you\n            and Keeper.sh (&ldquo;we&rdquo;, &ldquo;our&rdquo;, or &ldquo;us&rdquo;) governing your access to and use of the Keeper.sh calendar\n            synchronization service.\n          </Text>\n          <Text size=\"sm\">\n            By accessing or using Keeper.sh, you agree to be bound by these Terms. If you disagree with\n            any part of these Terms, you may not access or use the service.\n          </Text>\n        </Section>\n\n        <Section title=\"Description of Service\">\n          <Text size=\"sm\">\n            Keeper.sh provides calendar aggregation and synchronization services that allow you to\n            combine events from multiple calendar sources into a unified, anonymized feed. The service\n            includes generating iCal feeds and pushing events to external calendar providers.\n          </Text>\n          <Text size=\"sm\">\n            We reserve the right to modify, suspend, or discontinue any aspect of the service at any\n            time, with or without notice. We shall not be liable to you or any third party for any\n            modification, suspension, or discontinuation of the service.\n          </Text>\n        </Section>\n\n        <Section title=\"Account Registration\">\n          <Text size=\"sm\">\n            To use Keeper.sh, you must create an account. You agree to provide accurate, current, and\n            complete information during registration and to update such information as necessary.\n          </Text>\n          <Text size=\"sm\">\n            You are responsible for safeguarding your account credentials and for all activities that\n            occur under your account. You agree to notify us immediately of any unauthorized use of\n            your account.\n          </Text>\n          <Text size=\"sm\">\n            We reserve the right to suspend or terminate accounts that violate these Terms or that we\n            reasonably believe pose a security risk.\n          </Text>\n        </Section>\n\n        <Section title=\"Subscription and Billing\">\n          <Text size=\"sm\">\n            Keeper.sh offers both free and paid subscription plans. Paid subscriptions are billed in\n            advance on a monthly or yearly basis. All fees are non-refundable except as required by\n            law or as explicitly stated in these Terms.\n          </Text>\n          <Text size=\"sm\">\n            We may change subscription fees upon reasonable notice. Continued use of the service after\n            a price change constitutes acceptance of the new fees. You may cancel your subscription at\n            any time; access will continue until the end of your current billing period.\n          </Text>\n        </Section>\n\n        <Section title=\"Acceptable Use\">\n          <Text size=\"sm\">You agree not to:</Text>\n          <ul className=\"list-disc list-inside flex flex-col gap-1 ml-2 text-sm tracking-tight text-foreground-muted\">\n            <li>Use the service for any unlawful purpose or in violation of any applicable laws</li>\n            <li>Attempt to gain unauthorized access to any part of the service or its related systems</li>\n            <li>Interfere with or disrupt the integrity or performance of the service</li>\n            <li>Use automated means to access the service beyond normal API usage</li>\n            <li>Resell, sublicense, or redistribute the service without our written consent</li>\n            <li>Use the service to transmit malicious code or engage in abusive behavior</li>\n          </ul>\n        </Section>\n\n        <Section title=\"Intellectual Property\">\n          <Text size=\"sm\">\n            The service and its original content, features, and functionality are owned by Keeper.sh and\n            are protected by international copyright, trademark, and other intellectual property laws.\n          </Text>\n          <Text size=\"sm\">\n            Keeper.sh is open-source software licensed under the AGPL-3.0 license. The source code is\n            available at{\" \"}\n            <a href=\"https://github.com/ridafkih/keeper.sh\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-foreground underline underline-offset-2\">\n              github.com/ridafkih/keeper.sh\n            </a>\n            . Your use of the source code is governed by the terms of that license.\n          </Text>\n        </Section>\n\n        <Section title=\"Your Content\">\n          <Text size=\"sm\">\n            You retain ownership of any calendar data and content you provide to the service. By using\n            Keeper.sh, you grant us a limited license to access, process, and display your content solely\n            as necessary to provide the service.\n          </Text>\n          <Text size=\"sm\">\n            You represent that you have the right to share any calendar data you connect to Keeper.sh and\n            that doing so does not violate any third-party rights or agreements.\n          </Text>\n        </Section>\n\n        <Section title=\"Third-Party Services\">\n          <Text size=\"sm\">\n            Keeper.sh integrates with third-party calendar providers and services. Your use of these\n            integrations is subject to the terms and policies of those third parties. We are not\n            responsible for the practices of third-party services.\n          </Text>\n        </Section>\n\n        <Section title=\"Disclaimer of Warranties\">\n          <Text size=\"sm\">\n            THE SERVICE IS PROVIDED &ldquo;AS IS&rdquo; AND &ldquo;AS AVAILABLE&rdquo; WITHOUT WARRANTIES OF ANY KIND, EITHER\n            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY,\n            FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.\n          </Text>\n          <Text size=\"sm\">\n            We do not warrant that the service will be uninterrupted, secure, or error-free, that\n            defects will be corrected, or that the service is free of viruses or other harmful\n            components.\n          </Text>\n        </Section>\n\n        <Section title=\"Limitation of Liability\">\n          <Text size=\"sm\">\n            TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL KEEPER.SH, ITS OFFICERS, DIRECTORS,\n            EMPLOYEES, OR AGENTS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR\n            PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS, DATA, USE, OR GOODWILL,\n            ARISING OUT OF OR IN CONNECTION WITH YOUR USE OF THE SERVICE.\n          </Text>\n          <Text size=\"sm\">\n            OUR TOTAL LIABILITY FOR ANY CLAIMS ARISING FROM YOUR USE OF THE SERVICE SHALL NOT EXCEED\n            THE AMOUNT YOU PAID US, IF ANY, DURING THE TWELVE (12) MONTHS PRECEDING THE CLAIM.\n          </Text>\n        </Section>\n\n        <Section title=\"Indemnification\">\n          <Text size=\"sm\">\n            You agree to indemnify and hold harmless Keeper.sh and its officers, directors, employees,\n            and agents from any claims, damages, losses, or expenses (including reasonable attorneys&apos;\n            fees) arising from your use of the service, violation of these Terms, or infringement of\n            any third-party rights.\n          </Text>\n        </Section>\n\n        <Section title=\"Termination\">\n          <Text size=\"sm\">\n            We may terminate or suspend your access to the service immediately, without prior notice,\n            for any reason, including breach of these Terms. Upon termination, your right to use the\n            service ceases immediately.\n          </Text>\n          <Text size=\"sm\">\n            You may terminate your account at any time by deleting it through the service settings.\n            Provisions of these Terms that by their nature should survive termination shall survive,\n            including ownership, warranty disclaimers, and limitations of liability.\n          </Text>\n        </Section>\n\n        <Section title=\"Governing Law\">\n          <Text size=\"sm\">\n            These Terms shall be governed by and construed in accordance with the laws of the\n            Province of Alberta, Canada, and the federal laws of Canada applicable therein, without\n            regard to conflict of law principles. Any disputes arising under these Terms shall be\n            subject to the exclusive jurisdiction of the courts of the Province of Alberta.\n          </Text>\n        </Section>\n\n        <Section title=\"Changes to Terms\">\n          <Text size=\"sm\">\n            We reserve the right to modify these Terms at any time. We will notify you of material\n            changes by posting the updated Terms on this page and updating the &ldquo;Last updated&rdquo; date.\n            Your continued use of the service after changes constitutes acceptance of the modified\n            Terms.\n          </Text>\n        </Section>\n\n        <Section title=\"Severability\">\n          <Text size=\"sm\">\n            If any provision of these Terms is found to be unenforceable or invalid, that provision\n            shall be limited or eliminated to the minimum extent necessary, and the remaining\n            provisions shall remain in full force and effect.\n          </Text>\n        </Section>\n\n        <Section title=\"Contact Us\">\n          <Text size=\"sm\">\n            If you have questions about these Terms, please contact us at{\" \"}\n            <a href=\"mailto:legal@keeper.sh\" className=\"text-foreground underline underline-offset-2\">\n              legal@keeper.sh\n            </a>\n            .\n          </Text>\n        </Section>\n      </div>\n    </div>\n  );\n}\n\nfunction Section({ title, children }: PropsWithChildren<{ title: string }>) {\n  return (\n    <section className=\"flex flex-col gap-3\">\n      <Heading2 as=\"h2\">{title}</Heading2>\n      {children}\n    </section>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/auth/google.tsx",
    "content": "import { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport { AuthOAuthPreamble } from \"@/features/auth/components/oauth-preamble\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport {\n  getMcpAuthorizationSearch,\n  toStringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\n\nexport const Route = createFileRoute(\"/(oauth)/auth/google\")({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.socialProviders.google) {\n      throw redirect({ to: \"/login\" });\n    }\n    return capabilities;\n  },\n  component: GoogleAuthPage,\n  validateSearch: toStringSearchParams,\n});\n\nfunction GoogleAuthPage() {\n  const search = Route.useSearch();\n\n  return (\n    <AuthOAuthPreamble\n      provider=\"google\"\n      authorizationSearch={getMcpAuthorizationSearch(search) ?? undefined}\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/auth/outlook.tsx",
    "content": "import { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport { AuthOAuthPreamble } from \"@/features/auth/components/oauth-preamble\";\nimport { fetchAuthCapabilitiesWithApi } from \"@/lib/auth-capabilities\";\nimport {\n  getMcpAuthorizationSearch,\n  toStringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\n\nexport const Route = createFileRoute(\"/(oauth)/auth/outlook\")({\n  loader: async ({ context }) => {\n    const capabilities = await fetchAuthCapabilitiesWithApi(context.fetchApi);\n    if (!capabilities.socialProviders.microsoft) {\n      throw redirect({ to: \"/login\" });\n    }\n    return capabilities;\n  },\n  component: OutlookAuthPage,\n  validateSearch: toStringSearchParams,\n});\n\nfunction OutlookAuthPage() {\n  const search = Route.useSearch();\n\n  return (\n    <AuthOAuthPreamble\n      provider=\"outlook\"\n      authorizationSearch={getMcpAuthorizationSearch(search) ?? undefined}\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/auth/route.tsx",
    "content": "import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\";\nimport { resolveAuthRedirect } from \"@/lib/route-access-guards\";\n\nexport const Route = createFileRoute(\"/(oauth)/auth\")({\n  beforeLoad: ({ context }) => {\n    const redirectTarget = resolveAuthRedirect(context.auth.hasSession());\n    if (redirectTarget) {\n      throw redirect({ to: redirectTarget });\n    }\n  },\n  component: OAuthAuthLayout,\n});\n\nfunction OAuthAuthLayout() {\n  return <Outlet />;\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/apple.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { CalDAVConnectPage } from \"@/features/auth/components/caldav-connect-page\";\n\nexport const Route = createFileRoute(\"/(oauth)/dashboard/connect/apple\")({\n  component: ConnectApplePage,\n});\n\nfunction ConnectApplePage() {\n  return (\n    <CalDAVConnectPage\n      provider=\"icloud\"\n      icon={<img src=\"/integrations/icon-icloud.svg\" alt=\"iCloud\" width={40} height={40} className=\"size-full rounded-lg p-3\" />}\n      heading=\"Connect Apple Calendar\"\n      description=\"iCloud uses an app-specific password to authenticate Keeper.sh to interact with your calendar.\"\n      steps={[\n        <>\n          Navigate to{\" \"}\n          <a href=\"https://appleid.apple.com\" target=\"_blank\" rel=\"noreferrer\" className=\"text-foreground underline underline-offset-2\">\n            iCloud Apple ID\n          </a>\n        </>,\n        \"Sign in with your Apple ID\",\n        <>Select &ldquo;App-Specific Passwords&rdquo;</>,\n        <>Click the &ldquo;+&rdquo; next to &ldquo;Passwords&rdquo;</>,\n        \"Label and generate the password, then copy it\",\n        \"Paste the app-specific password below\",\n      ]}\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/caldav.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport Calendar from \"lucide-react/dist/esm/icons/calendar\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { CalDAVConnectPage } from \"@/features/auth/components/caldav-connect-page\";\n\nexport const Route = createFileRoute(\"/(oauth)/dashboard/connect/caldav\")({\n  component: ConnectCalDAVPage,\n});\n\nfunction ConnectCalDAVPage() {\n  return (\n    <CalDAVConnectPage\n      provider=\"caldav\"\n      icon={<Calendar size={28} className=\"text-foreground-muted\" />}\n      heading=\"Connect CalDAV Server\"\n      description=\"Connect to any CalDAV-compatible server.\"\n      steps={[\n        \"Enter your CalDAV server URL\",\n        \"Provide a username\",\n        \"Enter a password, or app-specific password\",\n        <>Click &ldquo;Connect&rdquo;</>,\n      ]}\n      footer={\n        <Text size=\"sm\" tone=\"muted\" align=\"left\">\n          Your CalDAV server URL can typically be found in your calendar provider&apos;s settings or documentation.\n        </Text>\n      }\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/fastmail.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { CalDAVConnectPage } from \"@/features/auth/components/caldav-connect-page\";\n\nexport const Route = createFileRoute(\n  \"/(oauth)/dashboard/connect/fastmail\",\n)({\n  component: ConnectFastmailPage,\n});\n\nfunction ConnectFastmailPage() {\n  return (\n    <CalDAVConnectPage\n      provider=\"fastmail\"\n      icon={<img src=\"/integrations/icon-fastmail.svg\" alt=\"Fastmail\" width={40} height={40} className=\"size-full rounded-lg p-3\" />}\n      heading=\"Connect Fastmail\"\n      description=\"Fastmail uses an app-specific password to authenticate Keeper.sh to interact with your calendar.\"\n      steps={[\n        <>\n          Navigate to{\" \"}\n          <a href=\"https://www.fastmail.com/settings/security/devicekeys\" target=\"_blank\" rel=\"noreferrer\" className=\"text-foreground underline underline-offset-2\">\n            Fastmail Settings\n          </a>\n        </>,\n        <>Click &ldquo;Manage app password and access&rdquo;</>,\n        <>Click &ldquo;New app password&rdquo;</>,\n        <>Under &ldquo;Access&rdquo;, select &ldquo;Calendars (CalDAV)&rdquo;</>,\n        <>Click &ldquo;Generate password&rdquo;</>,\n        \"Copy the password, and paste it below\",\n      ]}\n    />\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/google.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { LinkOAuthPreamble } from \"@/features/auth/components/oauth-preamble\";\n\nexport const Route = createFileRoute(\"/(oauth)/dashboard/connect/google\")({\n  component: () => <LinkOAuthPreamble provider=\"google\" />,\n});\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/ical-link.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport Link from \"lucide-react/dist/esm/icons/link\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ProviderIconPair } from \"@/features/auth/components/oauth-preamble\";\nimport { ICSFeedForm } from \"@/features/auth/components/ics-connect-form\";\n\nexport const Route = createFileRoute(\n  \"/(oauth)/dashboard/connect/ical-link\",\n)({\n  component: ConnectICalLinkPage,\n});\n\nfunction ConnectICalLinkPage() {\n  return (\n    <>\n      <ProviderIconPair>\n        <Link size={28} className=\"text-foreground-muted\" />\n      </ProviderIconPair>\n      <Heading2 as=\"h1\">Subscribe to ICS Feed</Heading2>\n      <Text size=\"sm\" tone=\"muted\" align=\"left\">\n        Subscribe to a read-only calendar feed from any ICS-compatible source, supported by most calendar providers.\n      </Text>\n      <ICSFeedForm />\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/ics-file.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport Calendar from \"lucide-react/dist/esm/icons/calendar\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { ProviderIconPair } from \"@/features/auth/components/oauth-preamble\";\nimport { ButtonText, LinkButton } from \"@/components/ui/primitives/button\";\n\nexport const Route = createFileRoute(\n  \"/(oauth)/dashboard/connect/ics-file\",\n)({\n  component: ConnectICSFilePage,\n});\n\nfunction ConnectICSFilePage() {\n  return (\n    <>\n      <ProviderIconPair>\n        <Calendar size={28} className=\"text-foreground-muted\" />\n      </ProviderIconPair>\n      <Heading2 as=\"h1\">Upload ICS File</Heading2>\n      <Text size=\"sm\" tone=\"muted\" align=\"left\">\n        ICS snapshot uploads are not available in Canary yet. Use an ICS feed link to keep your events synced.\n      </Text>\n      <LinkButton to=\"/dashboard/connect/ical-link\" className=\"w-full justify-center\">\n        <ButtonText>Use ICS Feed Instead</ButtonText>\n      </LinkButton>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/microsoft.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { LinkOAuthPreamble } from \"@/features/auth/components/oauth-preamble\";\n\nexport const Route = createFileRoute(\n  \"/(oauth)/dashboard/connect/microsoft\",\n)({\n  component: () => <LinkOAuthPreamble provider=\"microsoft-365\" />,\n});\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/outlook.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\";\nimport { LinkOAuthPreamble } from \"@/features/auth/components/oauth-preamble\";\n\nexport const Route = createFileRoute(\"/(oauth)/dashboard/connect/outlook\")({\n  component: () => <LinkOAuthPreamble provider=\"outlook\" />,\n});\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/connect/route.tsx",
    "content": "import { createFileRoute, Outlet } from \"@tanstack/react-router\";\n\nexport const Route = createFileRoute(\"/(oauth)/dashboard/connect\")({\n  component: OAuthConnectLayout,\n});\n\nfunction OAuthConnectLayout() {\n  return (\n    <div className=\"flex flex-col gap-3 w-full max-w-xs self-center\">\n      <Outlet />\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/dashboard/route.tsx",
    "content": "import { createFileRoute, Outlet, redirect } from \"@tanstack/react-router\";\nimport { resolveDashboardRedirect } from \"@/lib/route-access-guards\";\n\nexport const Route = createFileRoute(\"/(oauth)/dashboard\")({\n  beforeLoad: ({ context }) => {\n    const redirectTarget = resolveDashboardRedirect(context.auth.hasSession());\n    if (redirectTarget) {\n      throw redirect({ to: redirectTarget });\n    }\n  },\n  component: OAuthDashboardLayout,\n});\n\nfunction OAuthDashboardLayout() {\n  return <Outlet />;\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/oauth/consent.tsx",
    "content": "import { useState } from \"react\";\nimport { createFileRoute, redirect } from \"@tanstack/react-router\";\nimport Terminal from \"lucide-react/dist/esm/icons/terminal\";\nimport { Button, ButtonText } from \"@/components/ui/primitives/button\";\nimport { Divider } from \"@/components/ui/primitives/divider\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport {\n  PermissionsList,\n  ProviderIconPair,\n} from \"@/features/auth/components/oauth-preamble\";\nimport {\n  getMcpAuthorizationSearch,\n  toStringSearchParams,\n} from \"@/lib/mcp-auth-flow\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport { track, ANALYTICS_EVENTS } from \"@/lib/analytics\";\n\ntype SearchParams = Record<string, string>;\n\nconst SCOPE_LABELS: Record<string, string> = {\n  \"keeper.read\": \"Read your Keeper data\",\n  \"keeper.sources.read\": \"View your calendar sources\",\n  \"keeper.destinations.read\": \"View your sync destinations\",\n  \"keeper.mappings.read\": \"View your source-destination mappings\",\n  \"keeper.events.read\": \"View your calendar events\",\n  \"keeper.sync-status.read\": \"View sync status\",\n  \"offline_access\": \"Stay connected when you're away\",\n};\n\nconst resolveScopeLabel = (scope: string): string => {\n  const label = SCOPE_LABELS[scope];\n  if (label) {\n    return label;\n  }\n  return scope;\n};\n\n// This route lives under (oauth)/mcp rather than (oauth)/auth/mcp because\n// the (oauth)/auth layout redirects logged-in users away, but the consent\n// page requires an active session.\nexport const Route = createFileRoute(\"/(oauth)/oauth/consent\")({\n  beforeLoad: ({ search }) => {\n    if (!getMcpAuthorizationSearch(search)) {\n      throw redirect({ to: \"/login\", search });\n    }\n  },\n  component: McpConsentPage,\n  validateSearch: (search: Record<string, unknown>): SearchParams => toStringSearchParams(search),\n});\n\nfunction extractConsentErrorMessage(payload: unknown): string {\n  if (typeof payload !== \"object\" || payload === null) {\n    return \"Failed to complete consent\";\n  }\n  if (!(\"message\" in payload)) {\n    return \"Failed to complete consent\";\n  }\n  if (typeof payload.message !== \"string\") {\n    return \"Failed to complete consent\";\n  }\n  return payload.message;\n}\n\nfunction extractConsentRedirectUrl(payload: unknown): string {\n  if (typeof payload !== \"object\" || payload === null) {\n    throw new TypeError(\"Expected consent response to contain a redirect URL\");\n  }\n  if (!(\"url\" in payload) || typeof payload.url !== \"string\") {\n    throw new TypeError(\"Expected consent response to contain a redirect URL\");\n  }\n  return payload.url;\n}\n\nfunction McpConsentPage() {\n  const search = Route.useSearch();\n  const [error, setError] = useState<string | null>(null);\n  const [status, setStatus] = useState<\"idle\" | \"loading\">(\"idle\");\n  const authorizationSearch = getMcpAuthorizationSearch(search);\n\n  if (!authorizationSearch) {\n    return null;\n  }\n\n  const { client_id: clientId, scope } = authorizationSearch;\n  const scopes = scope\n    .split(\" \")\n    .filter((value) => value.length > 0)\n    .map(resolveScopeLabel);\n\n  const handleDecision = async (accept: boolean) => {\n    setStatus(\"loading\");\n    setError(null);\n\n    try {\n      const oauthQuery = window.location.search.slice(1);\n\n      const response = await fetch(\"/api/auth/oauth2/consent\", {\n        body: JSON.stringify({\n          accept,\n          oauth_query: oauthQuery,\n        }),\n        credentials: \"include\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        method: \"POST\",\n      });\n\n      if (!response.ok) {\n        const payload = await response.json().catch(() => ({}));\n        throw new Error(extractConsentErrorMessage(payload));\n      }\n\n      const payload = await response.json();\n      if (accept) {\n        track(ANALYTICS_EVENTS.oauth_consent_granted);\n      } else {\n        track(ANALYTICS_EVENTS.oauth_consent_denied);\n      }\n      window.location.assign(extractConsentRedirectUrl(payload));\n    } catch (requestError) {\n      setError(resolveErrorMessage(requestError, \"Failed to complete consent\"));\n      setStatus(\"idle\");\n    }\n  };\n\n  return (\n    <>\n      <ProviderIconPair>\n        <Terminal className=\"size-full text-foreground-muted\" />\n      </ProviderIconPair>\n      <Heading2 as=\"h1\">Authorize MCP access</Heading2>\n      <Text size=\"sm\" tone=\"muted\" align=\"left\">\n        {clientId} is requesting permission to access your Keeper data.\n      </Text>\n      {scopes.length > 0 && <PermissionsList items={scopes} />}\n      {error && (\n        <Text size=\"sm\" tone=\"danger\" align=\"center\">{error}</Text>\n      )}\n      <Divider />\n      <div className=\"flex items-stretch gap-2\">\n        <Button\n          type=\"button\"\n          variant=\"border\"\n          className=\"grow justify-center\"\n          disabled={status === \"loading\"}\n          onClick={() => {\n            void handleDecision(false);\n          }}\n        >\n          <ButtonText>Deny</ButtonText>\n        </Button>\n        <Button\n          type=\"button\"\n          className=\"grow justify-center\"\n          disabled={status === \"loading\"}\n          onClick={() => {\n            void handleDecision(true);\n          }}\n        >\n          <ButtonText>Allow</ButtonText>\n        </Button>\n      </div>\n    </>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/(oauth)/route.tsx",
    "content": "import { createFileRoute, Outlet } from \"@tanstack/react-router\";\n\nexport const Route = createFileRoute(\"/(oauth)\")({\n  component: OAuthLayout,\n  head: () => ({\n    meta: [{ content: \"noindex, nofollow\", name: \"robots\" }],\n  }),\n});\n\nfunction OAuthLayout() {\n  return (\n    <div className=\"flex flex-col items-center justify-center min-h-dvh px-2\">\n      <div className=\"flex flex-col gap-4 w-full max-w-xs\">\n        <Outlet />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/routes/__root.tsx",
    "content": "import { HeadContent, Outlet, Scripts, createRootRouteWithContext, useLocation } from \"@tanstack/react-router\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { useEffect } from \"react\";\nimport { SWRConfig } from \"swr\";\nimport { Heading2 } from \"@/components/ui/primitives/heading\";\nimport { Text } from \"@/components/ui/primitives/text\";\nimport { LinkButton, ButtonText } from \"@/components/ui/primitives/button\";\nimport { fetcher, HttpError } from \"@/lib/fetcher\";\nimport { resolveErrorMessage } from \"@/utils/errors\";\nimport type { AppRouterContext, ViteScript } from \"@/lib/router-context\";\nimport { serializePublicRuntimeConfig } from \"@/lib/runtime-config\";\nimport { AnalyticsScripts } from \"@/components/analytics-scripts\";\n\nconst NON_RETRYABLE_STATUSES = new Set([401, 403, 404]);\n\nconst SWR_CONFIG = {\n  fetcher,\n  revalidateOnFocus: true,\n  revalidateOnReconnect: true,\n  dedupingInterval: 2000,\n  onError: (error: unknown, key: string) => {\n    console.error(`[SWR] ${key}:`, error);\n  },\n  onErrorRetry: (\n    error: unknown,\n    _key: string,\n    _config: unknown,\n    revalidate: (opts: { retryCount: number }) => void,\n    { retryCount }: { retryCount: number },\n  ) => {\n    if (error instanceof HttpError && NON_RETRYABLE_STATUSES.has(error.status)) return;\n    if (retryCount >= 3) return;\n    setTimeout(() => revalidate({ retryCount }), 5000 * (retryCount + 1));\n  },\n};\n\nexport const Route = createRootRouteWithContext<AppRouterContext>()({\n  component: RootComponent,\n  notFoundComponent: NotFound,\n  errorComponent: ErrorFallback,\n  head: () => ({\n    meta: [\n      { charSet: \"utf-8\" },\n      { name: \"viewport\", content: \"width=device-width, initial-scale=1\" },\n      { title: \"Keeper.sh\" },\n    ],\n  }),\n});\n\nfunction ViteScriptTag({ script }: { script: ViteScript }) {\n  if (script.src) {\n    return <script type=\"module\" src={script.src} />;\n  }\n\n  if (script.content) {\n    return <script type=\"module\" dangerouslySetInnerHTML={{ __html: script.content }} />;\n  }\n\n  return null;\n}\n\nfunction RootComponent() {\n  const { runtimeConfig, viteAssets } = Route.useRouteContext();\n\n  return (\n    <html lang=\"en\">\n      <head>\n        <HeadContent />\n        <script\n          dangerouslySetInnerHTML={{\n            __html: `window.__KEEPER_RUNTIME_CONFIG__ = ${serializePublicRuntimeConfig(runtimeConfig)};`,\n          }}\n        />\n        {viteAssets?.inlineStyles?.map((css, index) => (\n          <style key={index} dangerouslySetInnerHTML={{ __html: css }} />\n        ))}\n        {viteAssets?.stylesheets.map((href) => (\n          <link key={href} rel=\"stylesheet\" href={href} precedence=\"default\" />\n        ))}\n        {viteAssets?.modulePreloads?.map((href) => (\n          <link key={href} rel=\"modulepreload\" href={href} />\n        ))}\n        {viteAssets?.headScripts.map((script, index) => (\n          <ViteScriptTag key={script.src ?? index} script={script} />\n        ))}\n        <link rel=\"icon\" type=\"image/svg+xml\" href=\"/keeper.svg\" media=\"(prefers-color-scheme: light)\" />\n        <link rel=\"icon\" type=\"image/svg+xml\" href=\"/keeper-dark.svg\" media=\"(prefers-color-scheme: dark)\" />\n        <link rel=\"apple-touch-icon\" href=\"/180x180-light-on-dark.png\" />\n        <link rel=\"manifest\" href=\"/site.webmanifest\" />\n        <link rel=\"preload\" href=\"/assets/fonts/Geist-variable.woff2\" as=\"font\" type=\"font/woff2\" crossOrigin=\"anonymous\" />\n        <link rel=\"preload\" href=\"/assets/fonts/Lora-variable.woff2\" as=\"font\" type=\"font/woff2\" crossOrigin=\"anonymous\" />\n      </head>\n      <body>\n        <div id=\"root\">\n          <SWRConfig value={SWR_CONFIG}>\n            <ScrollToTopOnNavigation />\n            <Outlet />\n          </SWRConfig>\n        </div>\n        <Scripts />\n        {viteAssets?.bodyScripts.map((script, index) => (\n          <ViteScriptTag key={script.src ?? index} script={script} />\n        ))}\n        <AnalyticsScripts runtimeConfig={runtimeConfig} />\n      </body>\n    </html>\n  );\n}\n\nfunction ScrollToTopOnNavigation() {\n  const location = useLocation();\n\n  useEffect(() => {\n    if (location.hash.length > 0) {\n      return;\n    }\n\n    window.scrollTo({ left: 0, top: 0, behavior: \"auto\" });\n  }, [location.hash, location.pathname]);\n\n  return null;\n}\n\nfunction NotFound() {\n  return (\n    <div className=\"flex flex-col items-center justify-center min-h-dvh px-2 gap-3\">\n      <meta name=\"robots\" content=\"noindex\" />\n      <Heading2>Page not found</Heading2>\n      <Text size=\"sm\" tone=\"muted\">\n        The page you're looking for doesn't exist.\n      </Text>\n      <LinkButton to=\"/\" variant=\"border\" size=\"compact\">\n        <ButtonText>Go home</ButtonText>\n      </LinkButton>\n    </div>\n  );\n}\n\nfunction ErrorFallback({ error }: ErrorComponentProps) {\n  return (\n    <div className=\"flex flex-col items-center justify-center min-h-dvh px-2 gap-3\">\n      <meta name=\"robots\" content=\"noindex\" />\n      <Heading2>Something went wrong</Heading2>\n      <Text size=\"sm\" tone=\"muted\">\n        {resolveErrorMessage(error, \"An unexpected error occurred.\")}\n      </Text>\n      <LinkButton to=\"/\" variant=\"border\" size=\"compact\">\n        <ButtonText>Go home</ButtonText>\n      </LinkButton>\n    </div>\n  );\n}\n"
  },
  {
    "path": "applications/web/src/server/cache/stale-cache.ts",
    "content": "interface CacheEntry<TValue> {\n  fetchedAtMs: number;\n  value: TValue;\n}\n\ninterface CreateStaleCacheOptions<TValue> {\n  name: string;\n  now?: () => number;\n  ttlMs: number;\n  load: () => Promise<TValue>;\n  revalidationPolicy?: CacheRevalidationPolicy;\n}\n\ninterface CacheSnapshot<TValue> {\n  fetchedAtMs: number;\n  value: TValue;\n}\n\ntype CacheRevalidationPolicy = \"always\" | \"when-stale\";\n\ninterface CacheState<TValue> {\n  entry: CacheEntry<TValue> | null;\n  refreshTask: Promise<void> | null;\n}\n\nfunction createInitialState<TValue>(): CacheState<TValue> {\n  return {\n    entry: null,\n    refreshTask: null,\n  };\n}\n\nfunction isStale<TValue>(state: CacheState<TValue>, nowMs: number, ttlMs: number): boolean {\n  if (state.entry === null) {\n    return true;\n  }\n\n  return nowMs - state.entry.fetchedAtMs >= ttlMs;\n}\n\nfunction createRefreshTask<TValue>(\n  state: CacheState<TValue>,\n  refresh: () => Promise<void>,\n  swallowErrors: boolean,\n): Promise<void> {\n  const refreshTask = swallowErrors ? refresh().catch(() => undefined) : refresh();\n  state.refreshTask = refreshTask.finally(() => {\n    state.refreshTask = null;\n  });\n  return state.refreshTask;\n}\n\nfunction shouldRevalidateInBackground<TValue>(\n  policy: CacheRevalidationPolicy,\n  state: CacheState<TValue>,\n  nowMs: number,\n  ttlMs: number,\n): boolean {\n  if (state.entry === null) {\n    return false;\n  }\n\n  if (policy === \"always\") {\n    return true;\n  }\n\n  return isStale(state, nowMs, ttlMs);\n}\n\nexport function createStaleCache<TValue>(options: CreateStaleCacheOptions<TValue>) {\n  const now = options.now ?? Date.now;\n  const revalidationPolicy = options.revalidationPolicy ?? \"when-stale\";\n  const state = createInitialState<TValue>();\n\n  const refresh = async (): Promise<void> => {\n    const loadedValue = await options.load();\n    state.entry = {\n      fetchedAtMs: now(),\n      value: loadedValue,\n    };\n  };\n\n  const refreshForeground = (): Promise<void> => {\n    if (state.refreshTask !== null) {\n      return state.refreshTask;\n    }\n\n    return createRefreshTask(state, refresh, false);\n  };\n\n  const refreshBackground = (): void => {\n    if (state.refreshTask !== null) {\n      return;\n    }\n\n    void createRefreshTask(state, refresh, true);\n  };\n\n  const getSnapshot = async (): Promise<CacheSnapshot<TValue>> => {\n    if (state.entry === null) {\n      await refreshForeground();\n    } else if (\n      shouldRevalidateInBackground(\n        revalidationPolicy,\n        state,\n        now(),\n        options.ttlMs,\n      )\n    ) {\n      refreshBackground();\n    }\n\n    if (state.entry === null) {\n      throw new Error(`${options.name} cache was not initialized.`);\n    }\n\n    return {\n      fetchedAtMs: state.entry.fetchedAtMs,\n      value: state.entry.value,\n    };\n  };\n\n  return {\n    getSnapshot,\n  };\n}\n"
  },
  {
    "path": "applications/web/src/server/compression.ts",
    "content": "import { gzipSync } from \"bun\";\n\nconst COMPRESSIBLE_TYPES = new Set([\n  \"text/html\",\n  \"text/css\",\n  \"text/plain\",\n  \"text/xml\",\n  \"text/javascript\",\n  \"application/javascript\",\n  \"application/json\",\n  \"application/xml\",\n  \"image/svg+xml\",\n]);\n\nfunction isCompressible(contentType: string | null): boolean {\n  if (!contentType) {\n    return false;\n  }\n\n  const mimeType = contentType.split(\";\")[0].trim();\n  return COMPRESSIBLE_TYPES.has(mimeType);\n}\n\nfunction acceptsGzip(request: Request): boolean {\n  const acceptEncoding = request.headers.get(\"accept-encoding\");\n  return acceptEncoding !== null && acceptEncoding.includes(\"gzip\");\n}\n\nexport async function withCompression(\n  request: Request,\n  response: Response,\n): Promise<Response> {\n  if (!acceptsGzip(request)) {\n    return response;\n  }\n\n  if (!isCompressible(response.headers.get(\"content-type\"))) {\n    return response;\n  }\n\n  const body = await response.arrayBuffer();\n  if (body.byteLength < 1024) {\n    return new Response(body, {\n      headers: response.headers,\n      status: response.status,\n    });\n  }\n\n  const compressed = gzipSync(new Uint8Array(body));\n  const headers = new Headers(response.headers);\n  headers.set(\"content-encoding\", \"gzip\");\n  headers.set(\"content-length\", compressed.byteLength.toString());\n\n  return new Response(compressed, {\n    headers,\n    status: response.status,\n  });\n}\n"
  },
  {
    "path": "applications/web/src/server/config.ts",
    "content": "import { type } from \"entrykit\";\nimport type { ServerConfig } from \"./types\";\n\nexport const envSchema = type({\n  VITE_API_URL: \"string.url\",\n  VITE_MCP_URL: \"string.url?\",\n  ENV: \"'development'|'production'|'test' = 'production'\",\n  PORT: \"string\",\n});\n\nfunction parsePort(variableName: string, value: string): number {\n  const port = Number(value);\n  const isValidPort = Number.isInteger(port) && port > 0 && port <= 65535;\n  if (!isValidPort) {\n    throw new Error(`${variableName} must be an integer between 1 and 65535`);\n  }\n  return port;\n}\n\nfunction deriveVitePort(serverPort: number): number {\n  const derivedPort = serverPort + 1;\n  if (derivedPort > 65535) {\n    throw new Error(\"PORT must be less than 65535 to derive a Vite development port.\");\n  }\n\n  return derivedPort;\n}\n\nexport function createServerConfig(environment: typeof envSchema.infer): ServerConfig {\n  const serverPort = parsePort(\"PORT\", environment.PORT);\n  const vitePort = deriveVitePort(serverPort);\n  const runtimeEnvironment = environment.ENV;\n\n  return {\n    apiProxyOrigin: environment.VITE_API_URL,\n    mcpProxyOrigin: environment.VITE_MCP_URL ?? null,\n    environment: runtimeEnvironment,\n    isProduction: runtimeEnvironment === \"production\",\n    serverPort,\n    vitePort,\n  };\n}\n"
  },
  {
    "path": "applications/web/src/server/github-stars.ts",
    "content": "import { createStaleCache } from \"./cache/stale-cache\";\n\nexport interface GithubStarsSnapshot {\n  count: number;\n  fetchedAt: string;\n}\n\nfunction hasStargazersCount(value: unknown): value is { stargazers_count: number } {\n  if (typeof value !== \"object\" || value === null) return false;\n  return (\n    \"stargazers_count\" in value &&\n    typeof value.stargazers_count === \"number\" &&\n    Number.isInteger(value.stargazers_count) &&\n    value.stargazers_count >= 0\n  );\n}\n\nconst githubRepositoryApiUrl = \"https://api.github.com/repos/ridafkih/keeper.sh\";\nconst githubApiVersion = \"2022-11-28\";\nconst githubUserAgent = \"@keeper.sh/web\";\n\nasync function fetchGithubStarsCount(): Promise<number> {\n  const response = await fetch(githubRepositoryApiUrl, {\n    headers: {\n      accept: \"application/vnd.github+json\",\n      \"user-agent\": githubUserAgent,\n      \"x-github-api-version\": githubApiVersion,\n    },\n  });\n\n  if (!response.ok) {\n    throw new Error(`GitHub stars request failed: ${response.status} ${response.statusText}`);\n  }\n\n  const json: unknown = await response.json();\n  if (!hasStargazersCount(json)) {\n    throw new Error(\"Invalid GitHub stars response\");\n  }\n\n  return json.stargazers_count;\n}\n\nconst githubStarsCache = createStaleCache<number>({\n  load: fetchGithubStarsCount,\n  name: \"github-stars\",\n  ttlMs: 1000 * 60 * 30,\n});\n\nexport async function getGithubStarsSnapshot(): Promise<GithubStarsSnapshot> {\n  const snapshot = await githubStarsCache.getSnapshot();\n  return {\n    count: snapshot.value,\n    fetchedAt: new Date(snapshot.fetchedAtMs).toISOString(),\n  };\n}\n"
  },
  {
    "path": "applications/web/src/server/http-handler.ts",
    "content": "import { withCompression } from \"./compression\";\nimport { isApiRequest, isMcpRequest, proxyRequest } from \"./proxy/http\";\nimport { handleInternalRoute } from \"./internal-routes\";\nimport { GDPR_COUNTRIES } from \"@/config/gdpr\";\nimport { hasSessionCookie } from \"@/lib/session-cookie\";\nimport type { Runtime, ServerConfig } from \"./types\";\n\nconst CACHEABLE_PATHS = new Set([\"/\", \"/blog\", \"/privacy\", \"/terms\"]);\nconst HTML_CACHE_TTL_MS = 60_000;\n\ninterface CachedHtml {\n  body: string;\n  cachedAt: number;\n}\n\nconst htmlCache = new Map<string, CachedHtml>();\n\nfunction getCachedHtml(pathname: string): string | null {\n  const entry = htmlCache.get(pathname);\n  if (!entry) return null;\n  if (Date.now() - entry.cachedAt > HTML_CACHE_TTL_MS) {\n    htmlCache.delete(pathname);\n    return null;\n  }\n  return entry.body;\n}\n\nfunction setCachedHtml(pathname: string, body: string): void {\n  htmlCache.set(pathname, { body, cachedAt: Date.now() });\n}\n\nconst baseSecurityHeaders: Record<string, string> = {\n  \"strict-transport-security\": \"max-age=31536000; includeSubDomains; preload\",\n  \"x-content-type-options\": \"nosniff\",\n  \"x-frame-options\": \"DENY\",\n  \"referrer-policy\": \"strict-origin-when-cross-origin\",\n  \"permissions-policy\": \"camera=(), microphone=(), geolocation=(), interest-cohort=()\",\n};\n\nconst cspHeader =\n  \"default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://cdn.visitors.now; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://pagead2.googlesyndication.com; font-src 'self'; connect-src 'self' https://www.google-analytics.com https://cdn.visitors.now https://e.visitors.now https://pagead2.googlesyndication.com; frame-src https://polar.sh; frame-ancestors 'none'; base-uri 'self'; form-action 'self'\";\n\nfunction withSecurityHeaders(response: Response, config: ServerConfig): Response {\n  const headers = new Headers(response.headers);\n\n  for (const [key, value] of Object.entries(baseSecurityHeaders)) {\n    headers.set(key, value);\n  }\n\n  if (config.isProduction) {\n    headers.set(\"content-security-policy\", cspHeader);\n  }\n\n  return new Response(response.body, {\n    headers,\n    status: response.status,\n  });\n}\n\nfunction resolveGdprCacheSegment(countryCode: string): string {\n  if (GDPR_COUNTRIES.has(countryCode)) return \"gdpr\";\n  return \"default\";\n}\n\nexport async function handleApplicationRequest(\n  request: Request,\n  runtime: Runtime,\n  config: ServerConfig,\n): Promise<Response> {\n  const requestUrl = new URL(request.url);\n  const internalRouteResponse = await handleInternalRoute(request, config);\n  if (internalRouteResponse) {\n    return internalRouteResponse;\n  }\n\n  if (isMcpRequest(requestUrl) && config.mcpProxyOrigin) {\n    return proxyRequest(request, config.mcpProxyOrigin);\n  }\n\n  if (isApiRequest(requestUrl)) {\n    return proxyRequest(request, config.apiProxyOrigin);\n  }\n\n  const assetResponse = await runtime.handleAssetRequest(request);\n  if (assetResponse.status !== 404) {\n    return withCompression(request, assetResponse);\n  }\n\n  const pathname = requestUrl.pathname;\n  const countryCode = request.headers.get(\"cf-ipcountry\") ?? \"\";\n  const gdprSegment = resolveGdprCacheSegment(countryCode);\n  const cookieHeader = request.headers.get(\"cookie\") ?? undefined;\n  const authSegment = hasSessionCookie(cookieHeader) ? \"authed\" : \"anon\";\n  const cacheKey = `${pathname}:${gdprSegment}:${authSegment}`;\n\n  if (config.isProduction && CACHEABLE_PATHS.has(pathname)) {\n    const cached = getCachedHtml(cacheKey);\n    if (cached) {\n      const cachedResponse = new Response(cached, {\n        headers: { \"content-type\": \"text/html; charset=utf-8\" },\n      });\n      const securedResponse = withSecurityHeaders(cachedResponse, config);\n      return withCompression(request, securedResponse);\n    }\n  }\n\n  const viteAssets = await runtime.resolveViteAssets(pathname);\n  const routerResponse = await runtime.renderApp(request, viteAssets);\n\n  const isRedirect = routerResponse.status >= 300 && routerResponse.status < 400;\n  if (isRedirect) {\n    return routerResponse;\n  }\n\n  if (config.isProduction && CACHEABLE_PATHS.has(pathname)) {\n    const body = await routerResponse.text();\n    setCachedHtml(cacheKey, body);\n    const freshResponse = new Response(body, {\n      headers: routerResponse.headers,\n      status: routerResponse.status,\n    });\n    const securedResponse = withSecurityHeaders(freshResponse, config);\n    return withCompression(request, securedResponse);\n  }\n\n  const securedResponse = withSecurityHeaders(routerResponse, config);\n  return withCompression(request, securedResponse);\n}\n"
  },
  {
    "path": "applications/web/src/server/index.ts",
    "content": "import { entry } from \"entrykit\";\nimport { createServerConfig, envSchema } from \"./config\";\nimport { handleApplicationRequest } from \"./http-handler\";\nimport { websocketProxyHandlers, upgradeSocketProxy } from \"./proxy/websocket\";\nimport { createRuntime } from \"./runtime\";\nimport type { SocketProxyData } from \"./types\";\nimport { checkMigrationStatus } from \"./migration-check\";\nimport { context, destroy, widelog } from \"./logging\";\n\ncheckMigrationStatus();\n\nconst resolveOutcome = (statusCode: number): \"success\" | \"error\" => {\n  if (statusCode >= 400) {\n    return \"error\";\n  }\n  return \"success\";\n};\n\nawait entry({\n  env: envSchema,\n  name: \"web\",\n  main: async ({ env }) => {\n    const config = createServerConfig(env);\n    const runtime = await createRuntime(config);\n\n    const server = Bun.serve<SocketProxyData>({\n      fetch: (request, httpServer) => {\n        const upgraded = upgradeSocketProxy(request, httpServer, config);\n        if (upgraded) {\n          return;\n        }\n\n        return context(async () => {\n          const url = new URL(request.url);\n          const requestId = request.headers.get(\"x-request-id\") ?? crypto.randomUUID();\n\n          widelog.set(\"operation.name\", `${request.method} ${url.pathname}`);\n          widelog.set(\"operation.type\", \"http\");\n          widelog.set(\"request.id\", requestId);\n          widelog.set(\"http.method\", request.method);\n          widelog.set(\"http.path\", url.pathname);\n\n          const userAgent = request.headers.get(\"user-agent\");\n          if (userAgent) {\n            widelog.set(\"http.user_agent\", userAgent);\n          }\n\n          try {\n            return await widelog.time.measure(\"duration_ms\", async () => {\n              const response = await handleApplicationRequest(request, runtime, config);\n              widelog.set(\"status_code\", response.status);\n              widelog.set(\"outcome\", resolveOutcome(response.status));\n              return response;\n            });\n          } catch (error) {\n            widelog.set(\"status_code\", 500);\n            widelog.set(\"outcome\", \"error\");\n            widelog.errorFields(error, { slug: \"unclassified\" });\n            throw error;\n          } finally {\n            widelog.flush();\n          }\n        });\n      },\n      port: config.serverPort,\n      websocket: websocketProxyHandlers,\n    });\n\n    return async () => {\n      server.stop(true);\n      if (runtime.shutdown) {\n        await runtime.shutdown();\n      }\n      await destroy();\n    };\n  },\n});\n"
  },
  {
    "path": "applications/web/src/server/internal-routes.ts",
    "content": "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getGithubStarsSnapshot } from \"./github-stars\";\nimport { proxyRequest } from \"./proxy/http\";\nimport type { ServerConfig } from \"./types\";\n\nconst staticTextFiles: Record<string, string> = {\n  \"/llms.txt\": \"text/plain; charset=UTF-8\",\n  \"/llms-full.txt\": \"text/plain; charset=UTF-8\",\n};\n\n// OAuth clients discover the authorization server via /.well-known/* at\n// the resource origin. The auth server lives under /api/auth, so these\n// mappings proxy the well-known paths to the correct internal routes.\nconst internalProxyPaths = {\n  \"/.well-known/oauth-authorization-server\": \"/api/auth/.well-known/oauth-authorization-server\",\n  \"/.well-known/openid-configuration\": \"/api/auth/.well-known/openid-configuration\",\n  \"/.well-known/oauth-authorization-server/api/auth\":\n    \"/api/auth/.well-known/oauth-authorization-server\",\n  \"/.well-known/openid-configuration/api/auth\":\n    \"/api/auth/.well-known/openid-configuration\",\n} as const;\n\nconst isInternalProxyPath = (\n  pathname: string,\n): pathname is keyof typeof internalProxyPaths =>\n  pathname in internalProxyPaths;\n\nconst resolveInternalProxyPath = (pathname: string): string | null => {\n  if (isInternalProxyPath(pathname)) return internalProxyPaths[pathname];\n  return null;\n};\n\nconst RESOURCE_SCOPES = [\n  \"keeper.read\",\n  \"keeper.sources.read\",\n  \"keeper.destinations.read\",\n  \"keeper.mappings.read\",\n  \"keeper.events.read\",\n  \"keeper.sync-status.read\",\n];\n\nconst buildProtectedResourceMetadata = (requestOrigin: string) => ({\n  resource: `${requestOrigin}/mcp`,\n  authorization_servers: [`${requestOrigin}/api/auth`],\n  scopes_supported: RESOURCE_SCOPES,\n});\n\nasync function serveStaticTextFile(pathname: string): Promise<Response | null> {\n  const contentType = staticTextFiles[pathname];\n  if (!contentType) return null;\n\n  const filePath = path.resolve(process.cwd(), `public${pathname}`);\n  try {\n    const content = await fs.readFile(filePath, \"utf-8\");\n    return new Response(content, {\n      headers: {\n        \"content-type\": contentType,\n        \"cache-control\": \"public, max-age=3600\",\n      },\n    });\n  } catch {\n    return new Response(\"Not Found\", { status: 404 });\n  }\n}\n\nconst resolvePublicOrigin = (request: Request): string => {\n  const url = new URL(request.url);\n  const proto = request.headers.get(\"x-forwarded-proto\");\n  const host = request.headers.get(\"x-forwarded-host\");\n\n  if (proto) {\n    url.protocol = proto;\n  }\n\n  if (host) {\n    url.host = host;\n  }\n\n  return url.origin;\n};\n\nexport async function handleInternalRoute(\n  request: Request,\n  config: ServerConfig,\n): Promise<Response | null> {\n  if (request.method !== \"GET\") {\n    return null;\n  }\n\n  const requestUrl = new URL(request.url);\n\n  if (requestUrl.pathname === \"/.well-known/oauth-protected-resource\") {\n    return Response.json(buildProtectedResourceMetadata(resolvePublicOrigin(request)));\n  }\n\n  const internalProxyPath = resolveInternalProxyPath(requestUrl.pathname);\n\n  if (internalProxyPath) {\n    const proxyUrl = new URL(request.url);\n    proxyUrl.pathname = internalProxyPath;\n\n    return proxyRequest(new Request(proxyUrl, request), config.apiProxyOrigin);\n  }\n\n  if (requestUrl.pathname === \"/internal/github-stars\") {\n    try {\n      const snapshot = await getGithubStarsSnapshot();\n      return Response.json(snapshot, {\n        headers: {\n          \"cache-control\": \"no-store\",\n        },\n      });\n    } catch {\n      return Response.json(\n        { message: \"Unable to read GitHub stars.\" },\n        { status: 502 },\n      );\n    }\n  }\n\n  const staticResponse = await serveStaticTextFile(requestUrl.pathname);\n  if (staticResponse) return staticResponse;\n\n  return null;\n}\n\nexport { resolveInternalProxyPath };\n"
  },
  {
    "path": "applications/web/src/server/logging.ts",
    "content": "import { widelogger, widelog } from \"widelogger\";\n\nconst environment = process.env.ENV ?? \"production\";\n\nconst { context, destroy } = widelogger({\n  service: \"keeper-web\",\n  defaultEventName: \"wide_event\",\n  commitHash: process.env.COMMIT_SHA,\n  environment,\n  version: process.env.npm_package_version,\n});\n\nexport { context, destroy, widelog };\n"
  },
  {
    "path": "applications/web/src/server/migration-check.ts",
    "content": "const MIGRATION_GUIDE_URL = \"https://github.com/ridafkih/keeper.sh/issues/140\";\n\nconst DEPRECATED_ENV_VARS: Record<string, string> = {\n  API_URL: \"VITE_API_URL\",\n  NEXT_PUBLIC_COMMERCIAL_MODE: \"COMMERCIAL_MODE\",\n  NEXT_PUBLIC_POLAR_PRO_MONTHLY_PRODUCT_ID: \"POLAR_PRO_MONTHLY_PRODUCT_ID\",\n  NEXT_PUBLIC_POLAR_PRO_YEARLY_PRODUCT_ID: \"POLAR_PRO_YEARLY_PRODUCT_ID\",\n  VITE_POLAR_PRO_MONTHLY_PRODUCT_ID: \"POLAR_PRO_MONTHLY_PRODUCT_ID\",\n  VITE_POLAR_PRO_YEARLY_PRODUCT_ID: \"POLAR_PRO_YEARLY_PRODUCT_ID\",\n  NEXT_PUBLIC_VISITORS_NOW_TOKEN: \"VITE_VISITORS_NOW_TOKEN\",\n  NEXT_PUBLIC_GOOGLE_ADS_ID: \"VITE_GOOGLE_ADS_ID\",\n  NEXT_PUBLIC_GOOGLE_ADS_CONVERSION_LABEL: \"VITE_GOOGLE_ADS_CONVERSION_LABEL\",\n};\n\nexport function checkMigrationStatus(): void {\n  const found: string[] = [];\n\n  for (const oldVar of Object.keys(DEPRECATED_ENV_VARS)) {\n    if (process.env[oldVar]) {\n      found.push(oldVar);\n    }\n  }\n\n  if (found.length === 0) {\n    return;\n  }\n\n  const lines = [\n    \"\",\n    \"╔══════════════════════════════════════════════════════════════╗\",\n    \"║  KEEPER MIGRATION NOTICE                                   ║\",\n    \"║  Your environment contains variables from the old Next.js  ║\",\n    \"║  setup that are no longer used.                            ║\",\n    \"╚══════════════════════════════════════════════════════════════╝\",\n    \"\",\n    \"  Deprecated variables detected:\",\n    ...found.map((oldVar) => {\n      const replacement = DEPRECATED_ENV_VARS[oldVar]!;\n      return `    ${oldVar} → ${replacement}`;\n    }),\n    \"\",\n    `  Migration guide: ${MIGRATION_GUIDE_URL}`,\n    \"\",\n  ];\n\n  console.warn(lines.join(\"\\n\"));\n}\n"
  },
  {
    "path": "applications/web/src/server/paths.ts",
    "content": "import path from \"node:path\";\nimport process from \"node:process\";\n\nconst appRoot = process.cwd();\n\nexport const clientDistDirectory = path.resolve(appRoot, \"dist/client\");\nexport const serverDistEntry = path.resolve(appRoot, \"dist/server/server.js\");\nexport const sourceTemplatePath = path.resolve(appRoot, \"index.html\");\n"
  },
  {
    "path": "applications/web/src/server/proxy/http.ts",
    "content": "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { clientDistDirectory } from \"@/server/paths\";\n\nexport function isMcpRequest(url: URL): boolean {\n  return url.pathname === \"/mcp\";\n}\n\nexport function isApiRequest(url: URL): boolean {\n  return url.pathname === \"/api\" || url.pathname.startsWith(\"/api/\");\n}\n\nexport function toProxiedUrl(requestUrl: URL, origin: string): URL {\n  const upstreamUrl = new URL(origin);\n  return new URL(requestUrl.pathname + requestUrl.search, upstreamUrl);\n}\n\nexport async function proxyRequest(request: Request, origin: string): Promise<Response> {\n  const requestUrl = new URL(request.url);\n  const targetUrl = toProxiedUrl(requestUrl, origin);\n  const requestHeaders = new Headers(request.headers);\n  requestHeaders.delete(\"host\");\n\n  const requestInit: RequestInit = {\n    headers: requestHeaders,\n    method: request.method,\n    redirect: \"manual\",\n  };\n\n  if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n    requestInit.body = request.body;\n  }\n\n  return fetch(targetUrl, requestInit);\n}\n\nfunction resolveStaticFilePath(pathname: string): string | null {\n  if (pathname === \"/\") {\n    return null;\n  }\n\n  const normalizedPath = pathname.replace(/^\\/+/, \"\");\n  if (normalizedPath.length === 0) {\n    return null;\n  }\n\n  const candidatePath = path.resolve(clientDistDirectory, normalizedPath);\n  if (!candidatePath.startsWith(clientDistDirectory)) {\n    return null;\n  }\n\n  return candidatePath;\n}\n\nfunction getCacheControlHeader(pathname: string): string {\n  if (pathname.startsWith(\"/assets/\")) {\n    return \"public, max-age=31536000, immutable\";\n  }\n\n  if (pathname.startsWith(\"/integrations/\") || pathname.startsWith(\"/contributors/\")) {\n    return \"public, max-age=604800, stale-while-revalidate=86400\";\n  }\n\n  return \"public, max-age=3600, stale-while-revalidate=86400\";\n}\n\nexport async function readStaticFile(pathname: string): Promise<Response> {\n  const candidatePath = resolveStaticFilePath(pathname);\n  if (!candidatePath) {\n    return new Response(\"Not Found\", { status: 404 });\n  }\n\n  try {\n    const fileStat = await fs.stat(candidatePath);\n    if (!fileStat.isFile()) {\n      return new Response(\"Not Found\", { status: 404 });\n    }\n\n    return new Response(Bun.file(candidatePath), {\n      headers: {\n        \"cache-control\": getCacheControlHeader(pathname),\n      },\n    });\n  } catch {\n    return new Response(\"Not Found\", { status: 404 });\n  }\n}\n"
  },
  {
    "path": "applications/web/src/server/proxy/websocket.ts",
    "content": "import type { SocketConnection, SocketProxyData, SocketServer } from \"@/server/types\";\nimport type { ServerConfig } from \"@/server/types\";\nimport { toProxiedUrl } from \"./http\";\n\nfunction isSocketProxyPath(url: URL): boolean {\n  return url.pathname === \"/api/socket\";\n}\n\nfunction isWebSocketUpgradeRequest(request: Request): boolean {\n  const upgradeHeader = request.headers.get(\"upgrade\");\n  return upgradeHeader?.toLowerCase() === \"websocket\";\n}\n\nfunction toWebSocketUrl(requestUrl: URL, origin: string): string {\n  const upstreamUrl = toProxiedUrl(requestUrl, origin);\n\n  if (upstreamUrl.protocol === \"http:\") {\n    upstreamUrl.protocol = \"ws:\";\n    return upstreamUrl.toString();\n  }\n\n  if (upstreamUrl.protocol === \"https:\") {\n    upstreamUrl.protocol = \"wss:\";\n    return upstreamUrl.toString();\n  }\n\n  throw new Error(\"API proxy origin must use http or https.\");\n}\n\nfunction relayUpstreamMessageToClient(clientSocket: SocketConnection, message: unknown): void {\n  if (typeof message === \"string\") {\n    clientSocket.send(message);\n    return;\n  }\n\n  if (message instanceof ArrayBuffer) {\n    clientSocket.send(new Uint8Array(message));\n    return;\n  }\n\n  if (ArrayBuffer.isView(message)) {\n    const typedArray = new Uint8Array(\n      message.buffer,\n      message.byteOffset,\n      message.byteLength,\n    );\n    const chunkCopy = new Uint8Array(typedArray.byteLength);\n    chunkCopy.set(typedArray);\n    clientSocket.send(chunkCopy);\n  }\n}\n\nfunction relayClientMessageToUpstream(upstreamSocket: WebSocket, message: unknown): void {\n  if (typeof message === \"string\") {\n    upstreamSocket.send(message);\n    return;\n  }\n\n  if (message instanceof ArrayBuffer) {\n    upstreamSocket.send(message);\n    return;\n  }\n\n  if (ArrayBuffer.isView(message)) {\n    upstreamSocket.send(message);\n  }\n}\n\nexport function upgradeSocketProxy(\n  request: Request,\n  server: SocketServer,\n  config: ServerConfig,\n): boolean {\n  const requestUrl = new URL(request.url);\n  if (!isSocketProxyPath(requestUrl)) {\n    return false;\n  }\n\n  if (!isWebSocketUpgradeRequest(request)) {\n    return false;\n  }\n\n  const targetUrl = toWebSocketUrl(requestUrl, config.apiProxyOrigin);\n  return server.upgrade(request, {\n    data: {\n      targetUrl,\n      upstreamSocket: null,\n    } satisfies SocketProxyData,\n  });\n}\n\nexport const websocketProxyHandlers = {\n  close(clientSocket: SocketConnection, code: number, reason: string): void {\n    const upstreamSocket = clientSocket.data.upstreamSocket;\n    if (!upstreamSocket) {\n      return;\n    }\n\n    if (upstreamSocket.readyState === WebSocket.CLOSING) {\n      return;\n    }\n\n    if (upstreamSocket.readyState === WebSocket.CLOSED) {\n      return;\n    }\n\n    upstreamSocket.close(code, reason);\n    clientSocket.data.upstreamSocket = null;\n  },\n  message(clientSocket: SocketConnection, message: unknown): void {\n    const upstreamSocket = clientSocket.data.upstreamSocket;\n    if (!upstreamSocket) {\n      return;\n    }\n\n    if (upstreamSocket.readyState !== WebSocket.OPEN) {\n      return;\n    }\n\n    relayClientMessageToUpstream(upstreamSocket, message);\n  },\n  open(clientSocket: SocketConnection): void {\n    const upstreamSocket = new WebSocket(clientSocket.data.targetUrl);\n    upstreamSocket.binaryType = \"arraybuffer\";\n    clientSocket.data.upstreamSocket = upstreamSocket;\n\n    upstreamSocket.addEventListener(\"close\", (event) => {\n      if (clientSocket.readyState === 1) {\n        clientSocket.close(event.code, event.reason);\n      }\n    });\n\n    upstreamSocket.addEventListener(\"error\", () => {\n      if (clientSocket.readyState === 1) {\n        clientSocket.close(1011, \"Upstream websocket error\");\n      }\n    });\n\n    upstreamSocket.addEventListener(\"message\", (event) => {\n      relayUpstreamMessageToClient(clientSocket, event.data);\n    });\n  },\n};\n"
  },
  {
    "path": "applications/web/src/server/runtime.ts",
    "content": "import fs from \"node:fs/promises\";\nimport { pathToFileURL } from \"node:url\";\nimport type { ViteDevServer } from \"vite\";\nimport { clientDistDirectory, serverDistEntry, sourceTemplatePath } from \"./paths\";\nimport { proxyRequest, readStaticFile } from \"./proxy/http\";\nimport { extractViteAssets } from \"./vite-assets\";\nimport type { ViteAssets } from \"@/lib/router-context\";\nimport type { Runtime, ServerConfig } from \"./types\";\n\ninterface EntryServerModule {\n  render: (request: Request, viteAssets: ViteAssets) => Promise<Response>;\n}\n\nfunction isEntryServerModule(value: unknown): value is EntryServerModule {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n\n  const renderProperty = Reflect.get(value, \"render\");\n  return typeof renderProperty === \"function\";\n}\n\nasync function loadProductionRenderer(): Promise<EntryServerModule> {\n  const moduleValue = await import(pathToFileURL(serverDistEntry).href);\n  if (!isEntryServerModule(moduleValue)) {\n    throw new Error(\"SSR entry module must export render(request, viteAssets).\");\n  }\n\n  return moduleValue;\n}\n\nasync function createProductionRuntime(): Promise<Runtime> {\n  const template = await fs.readFile(`${clientDistDirectory}/index.html`, \"utf-8\");\n  const viteAssets = await extractViteAssets(template, true);\n  const renderer = await loadProductionRenderer();\n\n  return {\n    handleAssetRequest: async (request) => {\n      const requestUrl = new URL(request.url);\n      return readStaticFile(requestUrl.pathname);\n    },\n    resolveViteAssets: async () => viteAssets,\n    renderApp: (request, assets) => renderer.render(request, assets),\n  };\n}\n\nasync function createViteDevServerInstance(vitePort: number): Promise<ViteDevServer> {\n  const { createServer } = await import(\"vite\");\n  const viteServer = await createServer({\n    appType: \"custom\",\n    server: {\n      hmr: {\n        protocol: \"ws\",\n        clientPort: vitePort,\n        host: \"localhost\",\n        port: vitePort,\n      },\n      port: vitePort,\n      strictPort: true,\n    },\n  });\n\n  await viteServer.listen();\n  return viteServer;\n}\n\nasync function loadDevelopmentRenderer(viteServer: ViteDevServer): Promise<EntryServerModule> {\n  const moduleValue = await viteServer.ssrLoadModule(\"/src/server.tsx\");\n  if (!isEntryServerModule(moduleValue)) {\n    throw new Error(\"Development SSR entry must export render(request, viteAssets).\");\n  }\n\n  return moduleValue;\n}\n\nasync function createDevelopmentRuntime(vitePort: number): Promise<Runtime> {\n  const viteServer = await createViteDevServerInstance(vitePort);\n  const viteOrigin = `http://localhost:${vitePort}`;\n\n  return {\n    handleAssetRequest: (request) => proxyRequest(request, viteOrigin),\n    resolveViteAssets: async (requestPath) => {\n      const template = await fs.readFile(sourceTemplatePath, \"utf-8\");\n      const transformed = await viteServer.transformIndexHtml(requestPath, template);\n      return extractViteAssets(transformed, false);\n    },\n    renderApp: async (request, viteAssets) => {\n      const renderer = await loadDevelopmentRenderer(viteServer);\n      return renderer.render(request, viteAssets);\n    },\n    shutdown: () => viteServer.close(),\n  };\n}\n\nexport function createRuntime(config: ServerConfig): Promise<Runtime> {\n  if (config.isProduction) {\n    return createProductionRuntime();\n  }\n\n  return createDevelopmentRuntime(config.vitePort);\n}\n"
  },
  {
    "path": "applications/web/src/server/types.ts",
    "content": "import type { Server as BunServer, ServerWebSocket as BunServerWebSocket } from \"bun\";\nimport type { ViteAssets } from \"@/lib/router-context\";\n\nexport interface Runtime {\n  handleAssetRequest: (request: Request) => Promise<Response>;\n  resolveViteAssets: (requestPath: string) => Promise<ViteAssets>;\n  renderApp: (request: Request, viteAssets: ViteAssets) => Promise<Response>;\n  shutdown?: () => Promise<void>;\n}\n\nexport interface ServerConfig {\n  apiProxyOrigin: string;\n  mcpProxyOrigin: string | null;\n  environment: \"development\" | \"production\" | \"test\";\n  isProduction: boolean;\n  serverPort: number;\n  vitePort: number;\n}\n\nexport interface SocketProxyData {\n  targetUrl: string;\n  upstreamSocket: WebSocket | null;\n}\n\nexport type SocketServer = BunServer<SocketProxyData>;\nexport type SocketConnection = BunServerWebSocket<SocketProxyData>;\n"
  },
  {
    "path": "applications/web/src/server/vite-assets.ts",
    "content": "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parseHTML } from \"linkedom\";\nimport type { ViteAssets, ViteScript } from \"@/lib/router-context\";\nimport { clientDistDirectory } from \"./paths\";\n\ninterface ManifestChunk {\n  file: string;\n  imports?: string[];\n  isDynamicEntry?: boolean;\n}\n\ntype ViteManifest = Record<string, ManifestChunk>;\n\nfunction extractScripts(parent: Element): ViteScript[] {\n  return Array.from(parent.querySelectorAll(\"script\")).map((script) => {\n    const result: ViteScript = {};\n    const src = script.getAttribute(\"src\");\n    const content = script.textContent?.trim();\n\n    if (src) result.src = src;\n    if (content) result.content = content;\n\n    return result;\n  });\n}\n\nasync function readStylesheetContents(hrefs: string[]): Promise<string[]> {\n  const results: string[] = [];\n\n  for (const href of hrefs) {\n    const filePath = path.join(clientDistDirectory, href);\n    try {\n      const content = await fs.readFile(filePath, \"utf-8\");\n      results.push(content);\n    } catch {\n      // If we can't read it, skip inlining — it'll stay as a <link>\n    }\n  }\n\n  return results;\n}\n\nfunction collectTransitiveImports(manifest: ViteManifest, entryKey: string): string[] {\n  const visited = new Set<string>();\n  const files: string[] = [];\n\n  function walk(key: string) {\n    if (visited.has(key)) return;\n    visited.add(key);\n\n    const chunk = manifest[key];\n    if (chunk == null) return;\n\n    files.push(`/${chunk.file}`);\n\n    for (const imp of chunk.imports ?? []) {\n      walk(imp);\n    }\n  }\n\n  walk(entryKey);\n  return files;\n}\n\nasync function readManifestPreloads(): Promise<string[]> {\n  const manifestPath = path.join(clientDistDirectory, \".vite\", \"manifest.json\");\n  try {\n    const content = await fs.readFile(manifestPath, \"utf-8\");\n    const manifest = JSON.parse(content);\n\n    const entryChunk = manifest[\"index.html\"];\n    if (entryChunk == null) return [];\n\n    const allFiles = collectTransitiveImports(manifest, \"index.html\");\n    return allFiles.filter((file) => file !== `/${entryChunk.file}`);\n  } catch {\n    return [];\n  }\n}\n\nexport async function extractViteAssets(template: string, inline = false): Promise<ViteAssets> {\n  const { document } = parseHTML(template);\n\n  const head = document.querySelector(\"head\");\n  const body = document.querySelector(\"body\");\n  const root = document.getElementById(\"root\");\n\n  if (!head || !body || !root) {\n    throw new Error(\"HTML template is missing required elements.\");\n  }\n\n  root.remove();\n\n  const stylesheets = Array.from(\n    head.querySelectorAll<HTMLLinkElement>('link[rel=\"stylesheet\"]'),\n  )\n    .map((link) => link.getAttribute(\"href\"))\n    .filter((href): href is string => typeof href === \"string\");\n\n  const htmlModulePreloads = Array.from(\n    head.querySelectorAll<HTMLLinkElement>('link[rel=\"modulepreload\"]'),\n  )\n    .map((link) => link.getAttribute(\"href\"))\n    .filter((href): href is string => typeof href === \"string\");\n\n  const manifestPreloads = inline ? await readManifestPreloads() : [];\n  const allPreloads = new Set([...htmlModulePreloads, ...manifestPreloads]);\n\n  const inlineStyles = inline ? await readStylesheetContents(stylesheets) : [];\n\n  return {\n    stylesheets: inline ? [] : stylesheets,\n    inlineStyles,\n    modulePreloads: [...allPreloads],\n    headScripts: extractScripts(head),\n    bodyScripts: extractScripts(body),\n  };\n}\n"
  },
  {
    "path": "applications/web/src/server.tsx",
    "content": "import { RouterServer, renderRouterToStream } from \"@tanstack/react-router/ssr/server\";\nimport { createRequestHandler } from \"@tanstack/react-router/ssr/server\";\nimport { createAppRouter } from \"./router\";\nimport type { ViteAssets } from \"./lib/router-context\";\n\nexport function render(request: Request, viteAssets: ViteAssets): Promise<Response> {\n  const handleRequest = createRequestHandler({\n    createRouter: () => createAppRouter({ request, viteAssets }),\n    request,\n  });\n\n  return handleRequest(({ responseHeaders, router }) =>\n    renderRouterToStream({\n      children: <RouterServer router={router} />,\n      request,\n      responseHeaders,\n      router,\n    }));\n}\n"
  },
  {
    "path": "applications/web/src/state/auth-form.ts",
    "content": "import { atom } from \"jotai\";\n\nexport type AuthFormStatus = \"idle\" | \"loading\";\nexport type AuthFormStep = \"email\" | \"password\";\n\nexport const authFormStatusAtom = atom<AuthFormStatus>(\"idle\");\nauthFormStatusAtom.onMount = (set) => () => set(\"idle\");\n\nexport const authFormStepAtom = atom<AuthFormStep>(\"email\");\nauthFormStepAtom.onMount = (set) => () => set(\"email\");\n\ntype AuthFormError = {\n  message: string;\n  active: boolean;\n} | null;\n\nexport const authFormErrorAtom = atom<AuthFormError>(null);\nauthFormErrorAtom.onMount = (set) => () => set(null);\n"
  },
  {
    "path": "applications/web/src/state/calendar-detail.ts",
    "content": "import { atom } from \"jotai\";\nimport { selectAtom } from \"jotai/utils\";\nimport type { CalendarDetail } from \"@/types/api\";\n\nexport const calendarDetailAtom = atom<CalendarDetail | null>(null);\nexport const calendarDetailLoadedAtom = atom<string | false>(false);\nexport const calendarDetailErrorAtom = atom<Error | null>(null);\n\nexport const calendarNameAtom = selectAtom(calendarDetailAtom, (detail) => detail?.name ?? \"\");\nexport const calendarProviderAtom = selectAtom(calendarDetailAtom, (detail) => detail?.provider ?? \"\");\nexport const calendarTypeAtom = selectAtom(calendarDetailAtom, (detail) => detail?.calendarType ?? \"\");\nexport const customEventNameAtom = selectAtom(calendarDetailAtom, (detail) => detail?.customEventName ?? \"\");\n\nexport const excludeEventNameAtom = selectAtom(calendarDetailAtom, (detail) => detail?.excludeEventName ?? false);\nexport const excludeEventDescriptionAtom = selectAtom(calendarDetailAtom, (detail) => detail?.excludeEventDescription ?? false);\nexport const excludeEventLocationAtom = selectAtom(calendarDetailAtom, (detail) => detail?.excludeEventLocation ?? false);\nexport const excludeAllDayEventsAtom = selectAtom(calendarDetailAtom, (detail) => detail?.excludeAllDayEvents ?? false);\nexport const excludeFocusTimeAtom = selectAtom(calendarDetailAtom, (detail) => detail?.excludeFocusTime ?? false);\nexport const excludeOutOfOfficeAtom = selectAtom(calendarDetailAtom, (detail) => detail?.excludeOutOfOffice ?? false);\nexport type ExcludeField = keyof Pick<\n  CalendarDetail,\n  | \"excludeAllDayEvents\"\n  | \"excludeEventDescription\"\n  | \"excludeEventLocation\"\n  | \"excludeEventName\"\n  | \"excludeFocusTime\"\n  | \"excludeOutOfOffice\"\n>;\n\nexport const excludeFieldAtoms = {\n  excludeEventName: excludeEventNameAtom,\n  excludeEventDescription: excludeEventDescriptionAtom,\n  excludeEventLocation: excludeEventLocationAtom,\n  excludeAllDayEvents: excludeAllDayEventsAtom,\n  excludeFocusTime: excludeFocusTimeAtom,\n  excludeOutOfOffice: excludeOutOfOfficeAtom,\n} as const;\n"
  },
  {
    "path": "applications/web/src/state/calendar-emphasized.ts",
    "content": "import { atom } from \"jotai\";\n\nexport const calendarEmphasizedAtom = atom(false);\n"
  },
  {
    "path": "applications/web/src/state/destination-ids.ts",
    "content": "import { atom } from \"jotai\";\nimport { selectAtom } from \"jotai/utils\";\n\nexport const destinationIdsAtom = atom<Set<string>>(new Set<string>());\n\nexport const selectDestinationInclusion = (destinationId: string) =>\n  selectAtom(destinationIdsAtom, (ids) => ids.has(destinationId));\n"
  },
  {
    "path": "applications/web/src/state/event-graph-hover.ts",
    "content": "import { atom } from \"jotai\";\n\nexport const eventGraphHoverIndexAtom = atom<number | null>(null);\nexport const eventGraphDraggingAtom = atom(false);\n"
  },
  {
    "path": "applications/web/src/state/ical-feed-settings.ts",
    "content": "import { atom } from \"jotai\";\nimport { selectAtom } from \"jotai/utils\";\n\ninterface FeedSettings {\n  includeEventName: boolean;\n  includeEventDescription: boolean;\n  includeEventLocation: boolean;\n  excludeAllDayEvents: boolean;\n  customEventName: string;\n}\n\nexport type FeedSettingToggleKey = keyof Omit<FeedSettings, \"customEventName\">;\n\nconst DEFAULT_FEED_SETTINGS: FeedSettings = {\n  includeEventName: false,\n  includeEventDescription: false,\n  includeEventLocation: false,\n  excludeAllDayEvents: false,\n  customEventName: \"Busy\",\n};\n\nexport const feedSettingsAtom = atom<FeedSettings>(DEFAULT_FEED_SETTINGS);\nexport const feedSettingsLoadedAtom = atom(false);\n\nexport const includeEventNameAtom = selectAtom(feedSettingsAtom, (settings) => settings.includeEventName);\nexport const includeEventDescriptionAtom = selectAtom(feedSettingsAtom, (settings) => settings.includeEventDescription);\nexport const includeEventLocationAtom = selectAtom(feedSettingsAtom, (settings) => settings.includeEventLocation);\nexport const excludeAllDayEventsAtom = selectAtom(feedSettingsAtom, (settings) => settings.excludeAllDayEvents);\nexport const customEventNameAtom = selectAtom(feedSettingsAtom, (settings) => settings.customEventName);\n\nexport const feedSettingAtoms = {\n  includeEventName: includeEventNameAtom,\n  includeEventDescription: includeEventDescriptionAtom,\n  includeEventLocation: includeEventLocationAtom,\n  excludeAllDayEvents: excludeAllDayEventsAtom,\n} as const;\n"
  },
  {
    "path": "applications/web/src/state/ical-sources.ts",
    "content": "import { atom } from \"jotai\";\nimport { selectAtom } from \"jotai/utils\";\n\nexport const icalSourceInclusionAtom = atom<Record<string, boolean>>({});\n\nexport const selectSourceInclusion = (sourceId: string) =>\n  selectAtom(icalSourceInclusionAtom, (inclusion) => inclusion[sourceId] ?? false);\n"
  },
  {
    "path": "applications/web/src/state/popover-overlay.ts",
    "content": "import { atom } from \"jotai\";\n\nexport const popoverOverlayAtom = atom(false);\n"
  },
  {
    "path": "applications/web/src/state/sync.ts",
    "content": "import { atom } from \"jotai\";\nimport { selectAtom } from \"jotai/utils\";\nimport type { SyncAggregate } from \"@keeper.sh/data-schemas/client\";\n\nexport type CompositeState = \"idle\" | \"syncing\";\n\nexport type SyncAggregateData = SyncAggregate;\n\nexport interface CompositeSyncState {\n  state: CompositeState;\n  seq: number;\n  progressPercent: number;\n  syncEventsProcessed: number;\n  syncEventsRemaining: number;\n  syncEventsTotal: number;\n  lastSyncedAt: string | null;\n  connected: boolean;\n  hasReceivedAggregate: boolean;\n}\n\nexport const syncStateAtom = atom<CompositeSyncState>({\n  state: \"idle\",\n  seq: 0,\n  progressPercent: 100,\n  syncEventsProcessed: 0,\n  syncEventsRemaining: 0,\n  syncEventsTotal: 0,\n  lastSyncedAt: null,\n  connected: false,\n  hasReceivedAggregate: false,\n});\n\nexport const syncStatusLabelAtom = selectAtom(syncStateAtom, (composite) => {\n  if (!composite.connected) {\n    return \"Connecting\";\n  }\n\n  if (!composite.hasReceivedAggregate) {\n    return \"Connecting\";\n  }\n\n  if (composite.state === \"syncing\") {\n    return \"Syncing\";\n  }\n\n  if (composite.syncEventsRemaining === 0) {\n    return \"Up to Date\";\n  }\n\n  return \"Sync Paused\";\n});\n\nexport const syncStatusShimmerAtom = selectAtom(\n  syncStateAtom,\n  (composite) =>\n    !composite.connected || !composite.hasReceivedAggregate || composite.state === \"syncing\",\n);\n"
  },
  {
    "path": "applications/web/src/types/api.ts",
    "content": "export interface CalendarAccount {\n  id: string;\n  provider: string;\n  providerName: string;\n  providerIcon: string | null;\n  displayName: string | null;\n  email: string | null;\n  accountLabel: string;\n  accountIdentifier: string | null;\n  authType: string;\n  needsReauthentication: boolean;\n  calendarCount: number;\n  createdAt: string;\n}\n\nexport interface CalendarSource {\n  id: string;\n  name: string;\n  calendarType: string;\n  capabilities: string[];\n  accountId: string;\n  provider: string;\n  providerName: string;\n  providerIcon: string | null;\n  displayName: string | null;\n  email: string | null;\n  accountLabel: string;\n  accountIdentifier: string | null;\n  needsReauthentication: boolean;\n  includeInIcalFeed: boolean;\n}\n\nexport interface CalendarDetail {\n  id: string;\n  name: string;\n  originalName: string | null;\n  calendarType: string;\n  capabilities: string[];\n  provider: string;\n  providerName: string;\n  providerIcon: string | null;\n  url: string | null;\n  calendarUrl: string | null;\n  customEventName: string;\n  excludeAllDayEvents: boolean;\n  excludeEventDescription: boolean;\n  excludeEventLocation: boolean;\n  excludeEventName: boolean;\n  excludeFocusTime: boolean;\n  excludeOutOfOffice: boolean;\n  destinationIds: string[];\n  sourceIds: string[];\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport interface ApiEvent {\n  id: string;\n  startTime: string;\n  endTime: string;\n  calendarId: string;\n  calendarName: string;\n  calendarProvider: string;\n  calendarUrl: string;\n}\n\nexport interface ApiEventSummary {\n  id: string;\n  startTime: string;\n}\n"
  },
  {
    "path": "applications/web/src/utils/calendars.ts",
    "content": "interface CalendarLike {\n  capabilities: string[];\n  provider?: string | null;\n  calendarType: string;\n}\n\nexport const canPull = (calendar: CalendarLike): boolean =>\n  calendar.capabilities.includes(\"pull\");\n\nexport const canPush = (calendar: CalendarLike): boolean =>\n  calendar.capabilities.includes(\"push\");\n\nexport const getCalendarProvider = (\n  calendar: Pick<CalendarLike, \"provider\" | \"calendarType\">,\n): string => calendar.provider ?? calendar.calendarType;\n"
  },
  {
    "path": "applications/web/src/utils/checkout.ts",
    "content": "import { apiFetch } from \"@/lib/fetcher\";\n\ninterface CheckoutCallbacks {\n  onSuccess?: () => void;\n}\n\ninterface CheckoutResponse {\n  url: string;\n}\n\nasync function createCheckoutSession(productId: string): Promise<CheckoutResponse> {\n  const response = await apiFetch(\"/api/auth/checkout\", {\n    body: JSON.stringify({\n      embedOrigin: globalThis.location.origin,\n      products: [productId],\n      redirect: false,\n      successUrl: `${globalThis.location.origin}/dashboard`,\n    }),\n    headers: { \"Content-Type\": \"application/json\" },\n    method: \"POST\",\n  });\n\n  return response.json();\n}\n\nasync function createPortalSession(): Promise<CheckoutResponse> {\n  const response = await apiFetch(\"/api/auth/customer/portal\", {\n    body: JSON.stringify({ redirect: false }),\n    headers: { \"Content-Type\": \"application/json\" },\n    method: \"POST\",\n  });\n\n  return response.json();\n}\n\nexport async function openCheckout(productId: string, callbacks?: CheckoutCallbacks): Promise<void> {\n  const [{ PolarEmbedCheckout }, response] = await Promise.all([\n    import(\"@polar-sh/checkout/embed\"),\n    createCheckoutSession(productId),\n  ]);\n\n  if (!response.url) {\n    throw new Error(\"Failed to create checkout session\");\n  }\n\n  const checkout = await PolarEmbedCheckout.create(response.url, { theme: \"light\" });\n\n  checkout.addEventListener(\"success\", () => {\n    callbacks?.onSuccess?.();\n  });\n}\n\nexport async function openCustomerPortal(): Promise<void> {\n  const response = await createPortalSession();\n  if (!response.url) {\n    throw new Error(\"Failed to open customer portal\");\n  }\n  globalThis.location.href = response.url;\n}\n"
  },
  {
    "path": "applications/web/src/utils/cn.ts",
    "content": "import { type ClassValue, clsx } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return clsx(inputs);\n}\n"
  },
  {
    "path": "applications/web/src/utils/collections.ts",
    "content": "export function resolveUpdatedIds(currentIds: string[], targetId: string, checked: boolean): string[] {\n  if (checked) return currentIds.includes(targetId) ? currentIds : [...currentIds, targetId];\n  return currentIds.filter((id) => id !== targetId);\n}\n"
  },
  {
    "path": "applications/web/src/utils/errors.ts",
    "content": "export function resolveErrorMessage(error: unknown, fallback: string): string {\n  if (error instanceof Error) return error.message;\n  return fallback;\n}\n"
  },
  {
    "path": "applications/web/src/utils/templates.ts",
    "content": "export type TemplateSegment =\n  | { type: \"text\"; value: string }\n  | { type: \"variable\"; name: string };\n\nconst TEMPLATE_REGEX = /\\{\\{(\\w+)\\}\\}/g;\n\nexport function parseTemplate(input: string): TemplateSegment[] {\n  const segments: TemplateSegment[] = [];\n  let lastIndex = 0;\n\n  for (const match of input.matchAll(TEMPLATE_REGEX)) {\n    const index = match.index!;\n    if (index > lastIndex) {\n      segments.push({ type: \"text\", value: input.slice(lastIndex, index) });\n    }\n    segments.push({ type: \"variable\", name: match[1] });\n    lastIndex = index + match[0].length;\n  }\n\n  if (lastIndex < input.length) {\n    segments.push({ type: \"text\", value: input.slice(lastIndex) });\n  }\n\n  return segments;\n}\n"
  },
  {
    "path": "applications/web/src/vite-env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n/// <reference types=\"vite-plugin-svgr/client\" />\n"
  },
  {
    "path": "applications/web/tests/features/auth/components/auth-form.test.tsx",
    "content": "import { beforeAll, describe, expect, it, vi } from \"vitest\";\nimport { act } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { parseHTML } from \"linkedom\";\nimport type { AuthCapabilities } from \"@/lib/auth-capabilities\";\nimport type { AuthScreenCopy } from \"../../../../src/features/auth/components/auth-form\";\n\nconst { passkeySignInMock, omitMotionProps } = vi.hoisted(() => {\n  const passkeySignInMock = vi.fn(() => Promise.resolve({ error: null }));\n\n  const omitMotionProps = <T extends Record<string, unknown>>(props: T) => {\n    const domProps = { ...props };\n    delete domProps.animate;\n    delete domProps.exit;\n    delete domProps.initial;\n    delete domProps.layout;\n    delete domProps.transition;\n    delete domProps.variants;\n    return domProps;\n  };\n\n  return { passkeySignInMock, omitMotionProps };\n});\n\nvi.mock(\"@tanstack/react-router\", () => ({\n  Link: ({ children, ...props }: React.ComponentPropsWithoutRef<\"a\">) => <a {...props}>{children}</a>,\n  useNavigate: () => () => undefined,\n}));\n\nvi.mock(\"motion/react\", () => ({\n  AnimatePresence: ({ children }: React.PropsWithChildren) => <>{children}</>,\n  LazyMotion: ({ children }: React.PropsWithChildren) => <>{children}</>,\n}));\n\nvi.mock(\"motion/react-m\", () => ({\n  div: ({ children, ...props }: React.ComponentPropsWithoutRef<\"div\">) => (\n    <div {...omitMotionProps(props)}>{children}</div>\n  ),\n  span: ({ children, ...props }: React.ComponentPropsWithoutRef<\"span\">) => (\n    <span {...omitMotionProps(props)}>{children}</span>\n  ),\n}));\n\nvi.mock(\"../../../../src/lib/motion-features\", () => ({\n  loadMotionFeatures: async () => ({}),\n}));\n\nvi.mock(\"../../../../src/lib/auth-client\", () => ({\n  authClient: {\n    signIn: {\n      passkey: passkeySignInMock,\n    },\n  },\n}));\n\nvi.mock(\"../../../../src/components/ui/primitives/button\", () => ({\n  Button: ({ children, ...props }: React.ComponentPropsWithoutRef<\"button\">) => <button {...props}>{children}</button>,\n  LinkButton: ({ children, ...props }: React.ComponentPropsWithoutRef<\"a\">) => <a {...props}>{children}</a>,\n  ExternalLinkButton: ({ children, ...props }: React.ComponentPropsWithoutRef<\"a\">) => <a {...props}>{children}</a>,\n  ButtonText: ({ children }: React.PropsWithChildren) => <span>{children}</span>,\n  ButtonIcon: ({ children }: React.PropsWithChildren) => <>{children}</>,\n}));\n\nvi.mock(\"../../../../src/components/ui/primitives/divider\", () => ({\n  Divider: ({ children }: React.PropsWithChildren) => <div>{children}</div>,\n}));\n\nvi.mock(\"../../../../src/components/ui/primitives/text-link\", () => ({\n  TextLink: ({ children, ...props }: React.ComponentPropsWithoutRef<\"a\">) => <a {...props}>{children}</a>,\n  ExternalTextLink: ({ children, ...props }: React.ComponentPropsWithoutRef<\"a\">) => <a {...props}>{children}</a>,\n}));\n\nvi.mock(\"../../../../src/components/ui/primitives/heading\", () => ({\n  Heading2: ({ children }: React.PropsWithChildren) => <h2>{children}</h2>,\n}));\n\nvi.mock(\"../../../../src/components/ui/primitives/input\", () => ({\n  Input: (props: React.ComponentPropsWithoutRef<\"input\">) => <input {...props} />,\n}));\n\nvi.mock(\"../../../../src/components/ui/primitives/text\", () => ({\n  Text: ({ children }: React.PropsWithChildren) => <span>{children}</span>,\n}));\n\nvi.mock(\"../../../../src/features/auth/components/auth-switch-prompt\", () => ({\n  AuthSwitchPrompt: ({ children }: React.PropsWithChildren) => <div>{children}</div>,\n}));\n\nvi.mock(\"lucide-react/dist/esm/icons/arrow-left\", () => ({\n  default: (props: React.ComponentPropsWithoutRef<\"svg\">) => <svg {...props} />,\n}));\n\nvi.mock(\"lucide-react/dist/esm/icons/loader-circle\", () => ({\n  default: (props: React.ComponentPropsWithoutRef<\"svg\">) => <svg {...props} />,\n}));\n\nlet AuthForm: typeof import(\"../../../../src/features/auth/components/auth-form\").AuthForm;\n\nbeforeAll(async () => {\n  ({ AuthForm } = await import(\"../../../../src/features/auth/components/auth-form\"));\n});\n\nconst capabilities: AuthCapabilities = {\n  commercialMode: true,\n  credentialMode: \"email\",\n  requiresEmailVerification: true,\n  socialProviders: {\n    google: false,\n    microsoft: false,\n  },\n  supportsChangePassword: true,\n  supportsPasskeys: true,\n  supportsPasswordReset: true,\n};\n\nconst copy: AuthScreenCopy = {\n  heading: \"Welcome back\",\n  subtitle: \"Sign in to your Keeper.sh account\",\n  oauthActionLabel: \"Sign in\",\n  submitLabel: \"Sign in\",\n  switchPrompt: \"Don't have an account yet?\",\n  switchCta: \"Register\",\n  switchTo: \"/register\",\n  action: \"signIn\",\n};\n\ndescribe(\"AuthForm\", () => {\n  it(\"uses username webauthn autocomplete for passkey sign-in\", () => {\n    const markup = renderToStaticMarkup(<AuthForm capabilities={capabilities} copy={copy} />);\n\n    expect(markup).toContain('autoComplete=\"username webauthn\"');\n    expect(markup).not.toContain(\"Use passkey\");\n  });\n\n  it(\"keeps email autofill semantics for registration\", () => {\n    const markup = renderToStaticMarkup(\n      <AuthForm\n        capabilities={capabilities}\n        copy={{ ...copy, action: \"signUp\", switchCta: \"Login\", switchPrompt: \"Have an account?\", switchTo: \"/login\" }}\n      />,\n    );\n\n    expect(markup).toContain('autoComplete=\"email\"');\n  });\n\n  it(\"keeps the password field mounted for sign-in autofill heuristics\", () => {\n    const markup = renderToStaticMarkup(<AuthForm capabilities={capabilities} copy={copy} />);\n\n    expect(markup).toContain('name=\"password\"');\n    expect(markup).toContain('autoComplete=\"current-password\"');\n  });\n\n  it(\"uses conventional field ids, names, and labels for sign-in heuristics\", () => {\n    const markup = renderToStaticMarkup(<AuthForm capabilities={capabilities} copy={copy} />);\n\n    expect(markup).toContain('id=\"email\"');\n    expect(markup).toContain('name=\"email\"');\n    expect(markup).toContain('for=\"email\"');\n    expect(markup).toContain('id=\"current-password\"');\n    expect(markup).toContain('for=\"current-password\"');\n  });\n  it(\"starts passive passkey sign-in on render when conditional mediation is available\", async () => {\n    passkeySignInMock.mockClear();\n\n    const { document, window } = parseHTML(\"<html><body><div id='app'></div></body></html>\");\n    const previousGlobals = {\n      Event: globalThis.Event,\n      FocusEvent: globalThis.FocusEvent,\n      HTMLElement: globalThis.HTMLElement,\n      Node: globalThis.Node,\n      PublicKeyCredential: globalThis.PublicKeyCredential,\n      document: globalThis.document,\n      navigator: globalThis.navigator,\n      requestAnimationFrame: globalThis.requestAnimationFrame,\n      window: globalThis.window,\n    };\n\n    class FakePublicKeyCredential {}\n    Object.assign(FakePublicKeyCredential, {\n      isConditionalMediationAvailable: vi.fn(() => Promise.resolve(true)),\n    });\n\n    Object.assign(globalThis, {\n      Event: window.Event,\n      FocusEvent: window.FocusEvent ?? window.Event,\n      HTMLElement: window.HTMLElement,\n      IS_REACT_ACT_ENVIRONMENT: true,\n      Node: window.Node,\n      PublicKeyCredential: FakePublicKeyCredential,\n      document,\n      requestAnimationFrame: (callback: FrameRequestCallback) => {\n        callback(0);\n        return 1;\n      },\n      window,\n    });\n    Object.defineProperty(globalThis, \"navigator\", { value: window.navigator, configurable: true, writable: true });\n\n    const container = document.getElementById(\"app\");\n    if (!container) throw new Error(\"Expected app container\");\n\n    if (!(container instanceof HTMLElement)) {\n      throw Error(\"container must be Element\")\n    }\n\n    const root = createRoot(container);\n\n    try {\n      await act(async () => {\n        root.render(<AuthForm capabilities={capabilities} copy={copy} />);\n      });\n\n      expect(passkeySignInMock).toHaveBeenCalledTimes(1);\n    } finally {\n      await act(async () => {\n        root.unmount();\n      });\n      Object.defineProperty(globalThis, \"navigator\", { value: previousGlobals.navigator, configurable: true, writable: true });\n      Object.assign(globalThis, previousGlobals);\n    }\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/features/dashboard/components/sync-status-helpers.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport type { CompositeSyncState } from \"@/state/sync\";\nimport { resolveSyncPercent } from \"../../../../src/features/dashboard/components/sync-status-helpers\";\n\nconst createComposite = (\n  overrides: Partial<CompositeSyncState> = {},\n): CompositeSyncState => ({\n  connected: true,\n  hasReceivedAggregate: true,\n  lastSyncedAt: \"2026-03-08T12:00:00.000Z\",\n  progressPercent: 50,\n  seq: 2,\n  state: \"syncing\",\n  syncEventsProcessed: 5,\n  syncEventsRemaining: 5,\n  syncEventsTotal: 10,\n  ...overrides,\n});\n\ndescribe(\"resolveSyncPercent\", () => {\n  it(\"returns null before first aggregate is received\", () => {\n    const percent = resolveSyncPercent(\n      createComposite({\n        hasReceivedAggregate: false,\n        progressPercent: 100,\n        state: \"idle\",\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n      }),\n    );\n\n    expect(percent).toBeNull();\n  });\n\n  it(\"returns derived completion from processed/total when total is available\", () => {\n    const percent = resolveSyncPercent(\n      createComposite({\n        syncEventsProcessed: 2,\n        syncEventsTotal: 8,\n      }),\n    );\n\n    expect(percent).toBe(25);\n  });\n\n  it(\"returns 100 when idle and aggregate reports no remaining work\", () => {\n    const percent = resolveSyncPercent(\n      createComposite({\n        progressPercent: 100,\n        state: \"idle\",\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n      }),\n    );\n\n    expect(percent).toBe(100);\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/hooks/use-entitlements.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { canAddMore } from \"../../src/hooks/use-entitlements\";\n\ndescribe(\"canAddMore\", () => {\n  it(\"does not treat missing entitlements as hitting the limit\", () => {\n    expect(canAddMore(undefined)).toBe(true);\n  });\n\n  it(\"allows unlimited entitlements\", () => {\n    expect(canAddMore({ current: 99, limit: null })).toBe(true);\n  });\n\n  it(\"rejects exhausted entitlements\", () => {\n    expect(canAddMore({ current: 3, limit: 3 })).toBe(false);\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/lib/auth-capabilities.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  getEnabledSocialProviders,\n  resolveCredentialField,\n  supportsPasskeys,\n  type AuthCapabilities,\n} from \"../../src/lib/auth-capabilities\";\n\nconst emailCapabilities: AuthCapabilities = {\n  commercialMode: true,\n  credentialMode: \"email\",\n  requiresEmailVerification: true,\n  socialProviders: {\n    google: true,\n    microsoft: false,\n  },\n  supportsChangePassword: true,\n  supportsPasskeys: true,\n  supportsPasswordReset: true,\n};\n\ndescribe(\"resolveCredentialField\", () => {\n  it(\"returns email field metadata for commercial auth\", () => {\n    expect(resolveCredentialField(emailCapabilities)).toEqual({\n      autoComplete: \"email\",\n      id: \"email\",\n      label: \"Email\",\n      name: \"email\",\n      placeholder: \"johndoe+keeper@example.com\",\n      type: \"email\",\n    });\n  });\n\n  it(\"returns username field metadata for non-commercial auth\", () => {\n    expect(resolveCredentialField({\n      ...emailCapabilities,\n      credentialMode: \"username\",\n    })).toEqual({\n      autoComplete: \"username\",\n      id: \"username\",\n      label: \"Username\",\n      name: \"username\",\n      placeholder: \"johndoe\",\n      type: \"text\",\n    });\n  });\n});\n\ndescribe(\"getEnabledSocialProviders\", () => {\n  it(\"returns only enabled social providers\", () => {\n    expect(getEnabledSocialProviders(emailCapabilities)).toEqual([\"google\"]);\n  });\n});\n\ndescribe(\"supportsPasskeys\", () => {\n  it(\"returns false when passkeys are disabled\", () => {\n    expect(supportsPasskeys({\n      ...emailCapabilities,\n      supportsPasskeys: false,\n    })).toBe(false);\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/lib/auth.test.ts",
    "content": "import { beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { AuthCapabilities } from \"../../src/lib/auth-capabilities\";\n\nconst authClientMock = vi.hoisted(() => ({\n  signIn: {\n    email: vi.fn(() => Promise.resolve({ error: null })),\n  },\n  signUp: {\n    email: vi.fn(() => Promise.resolve({ error: null })),\n  },\n  requestPasswordReset: vi.fn(() => Promise.resolve({ error: null })),\n  resetPassword: vi.fn(() => Promise.resolve({ error: null })),\n}));\n\nvi.mock(\"../../src/lib/auth-client\", () => ({\n  authClient: authClientMock,\n}));\n\nlet signInWithCredential: typeof import(\"../../src/lib/auth\").signInWithCredential;\nlet signUpWithCredential: typeof import(\"../../src/lib/auth\").signUpWithCredential;\n\nconst commercialCapabilities: AuthCapabilities = {\n  commercialMode: true,\n  credentialMode: \"email\",\n  requiresEmailVerification: true,\n  socialProviders: {\n    google: false,\n    microsoft: false,\n  },\n  supportsChangePassword: true,\n  supportsPasskeys: true,\n  supportsPasswordReset: true,\n};\n\nbeforeAll(async () => {\n  ({ signInWithCredential, signUpWithCredential } = await import(\"../../src/lib/auth\"));\n});\n\nbeforeEach(() => {\n  authClientMock.signIn.email.mockClear();\n  authClientMock.signUp.email.mockClear();\n  const fetchMock = Object.assign(\n    vi.fn(() => Promise.resolve(new Response(JSON.stringify({}), { status: 200 }))),\n    { preconnect: () => undefined },\n  );\n  globalThis.fetch = fetchMock;\n});\n\ndescribe(\"signInWithCredential\", () => {\n  it(\"uses Better Auth email sign-in for commercial auth\", async () => {\n    await signInWithCredential(\"person@example.com\", \"password\", commercialCapabilities);\n\n    expect(authClientMock.signIn.email).toHaveBeenCalledWith({\n      email: \"person@example.com\",\n      password: \"password\",\n    });\n  });\n\n  it(\"uses the username-only endpoint for non-commercial auth\", async () => {\n    await signInWithCredential(\"keeper-user\", \"password\", {\n      ...commercialCapabilities,\n      credentialMode: \"username\",\n    });\n\n    expect(globalThis.fetch).toHaveBeenCalledWith(\"/api/auth/username-only/sign-in\", {\n      body: JSON.stringify({\n        password: \"password\",\n        username: \"keeper-user\",\n      }),\n      credentials: \"include\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      method: \"POST\",\n    });\n  });\n});\n\ndescribe(\"signUpWithCredential\", () => {\n  it(\"uses the username-only endpoint for non-commercial auth\", async () => {\n    await signUpWithCredential(\"keeper-user\", \"password\", {\n      ...commercialCapabilities,\n      credentialMode: \"username\",\n    });\n\n    expect(globalThis.fetch).toHaveBeenCalledWith(\"/api/auth/username-only/sign-up\", {\n      body: JSON.stringify({\n        password: \"password\",\n        username: \"keeper-user\",\n      }),\n      credentials: \"include\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      method: \"POST\",\n    });\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/lib/mcp-auth-flow.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  getMcpAuthorizationSearch,\n  resolvePostAuthRedirect,\n} from \"../../src/lib/mcp-auth-flow\";\n\ndescribe(\"getMcpAuthorizationSearch\", () => {\n  it(\"recognizes MCP authorization search params copied from Better Auth\", () => {\n    const result = getMcpAuthorizationSearch({\n      client_id: \"keeper-client\",\n      code_challenge: \"challenge\",\n      code_challenge_method: \"S256\",\n      redirect_uri: \"https://claude.ai/callback\",\n      response_type: \"code\",\n      scope: \"openid profile email offline_access keeper.read\",\n      state: \"opaque-state\",\n    });\n\n    expect(result).not.toBeNull();\n  });\n\n  it(\"returns null for regular login query params\", () => {\n    expect(\n      getMcpAuthorizationSearch({\n        next: \"/dashboard\",\n      }),\n    ).toBeNull();\n  });\n});\n\ndescribe(\"resolvePostAuthRedirect\", () => {\n  it(\"resumes the Better Auth MCP authorization flow after login\", () => {\n    expect(\n      resolvePostAuthRedirect({\n        apiOrigin: \"https://api.keeper.sh\",\n        defaultPath: \"/dashboard\",\n        search: {\n          client_id: \"keeper-client\",\n          code_challenge: \"challenge\",\n          code_challenge_method: \"S256\",\n          redirect_uri: \"https://claude.ai/callback\",\n          response_type: \"code\",\n          scope: \"openid profile email offline_access keeper.read\",\n          state: \"opaque-state\",\n          prompt: \"consent\",\n          resource: \"https://mcp.keeper.sh\",\n        },\n      }),\n    ).toBe(\n      \"https://api.keeper.sh/api/auth/oauth2/authorize?client_id=keeper-client&code_challenge=challenge&code_challenge_method=S256&redirect_uri=https%3A%2F%2Fclaude.ai%2Fcallback&response_type=code&scope=openid+profile+email+offline_access+keeper.read&state=opaque-state&prompt=consent&resource=https%3A%2F%2Fmcp.keeper.sh\",\n    );\n  });\n\n  it(\"falls back to the default in-app redirect when there is no MCP continuation\", () => {\n    expect(\n      resolvePostAuthRedirect({\n        apiOrigin: \"https://api.keeper.sh\",\n        defaultPath: \"/dashboard\",\n        search: {\n          next: \"/dashboard\",\n        },\n      }),\n    ).toBe(\"/dashboard\");\n  });\n});\n\ndescribe(\"getMcpAuthorizationSearch\", () => {\n  it(\"preserves optional OAuth continuation params after validating the required MCP ones\", () => {\n    expect(\n      getMcpAuthorizationSearch({\n        client_id: \"keeper-client\",\n        code_challenge: \"challenge\",\n        code_challenge_method: \"S256\",\n        prompt: \"consent\",\n        redirect_uri: \"https://claude.ai/callback\",\n        resource: \"https://mcp.keeper.sh\",\n        response_type: \"code\",\n        scope: \"offline_access keeper.read\",\n        state: \"opaque-state\",\n      }),\n    ).toEqual({\n      client_id: \"keeper-client\",\n      code_challenge: \"challenge\",\n      code_challenge_method: \"S256\",\n      prompt: \"consent\",\n      redirect_uri: \"https://claude.ai/callback\",\n      resource: \"https://mcp.keeper.sh\",\n      response_type: \"code\",\n      scope: \"offline_access keeper.read\",\n      state: \"opaque-state\",\n    });\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/lib/route-access-guards.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  resolveAuthRedirect,\n  resolveDashboardRedirect,\n  resolveUpgradeRedirect,\n} from \"../../src/lib/route-access-guards\";\n\ndescribe(\"route access guards\", () => {\n  describe(\"resolveDashboardRedirect\", () => {\n    const cases = [\n      {\n        expectedRedirect: \"/login\",\n        hasSession: false,\n      },\n      {\n        expectedRedirect: null,\n        hasSession: true,\n      },\n    ] as const;\n\n    for (const testCase of cases) {\n      it(`returns ${String(testCase.expectedRedirect)} when hasSession=${testCase.hasSession}`, () => {\n        expect(resolveDashboardRedirect(testCase.hasSession)).toBe(testCase.expectedRedirect);\n      });\n    }\n  });\n\n  describe(\"resolveAuthRedirect\", () => {\n    const cases = [\n      {\n        expectedRedirect: null,\n        hasSession: false,\n      },\n      {\n        expectedRedirect: \"/dashboard\",\n        hasSession: true,\n      },\n    ] as const;\n\n    for (const testCase of cases) {\n      it(`returns ${String(testCase.expectedRedirect)} when hasSession=${testCase.hasSession}`, () => {\n        expect(resolveAuthRedirect(testCase.hasSession)).toBe(testCase.expectedRedirect);\n      });\n    }\n  });\n\n  describe(\"resolveUpgradeRedirect\", () => {\n    const cases = [\n      {\n        expectedRedirect: \"/login\",\n        hasSession: false,\n        plan: null,\n      },\n      {\n        expectedRedirect: \"/login\",\n        hasSession: false,\n        plan: \"free\",\n      },\n      {\n        expectedRedirect: \"/dashboard\",\n        hasSession: true,\n        plan: \"pro\",\n      },\n      {\n        expectedRedirect: null,\n        hasSession: true,\n        plan: \"free\",\n      },\n      {\n        expectedRedirect: null,\n        hasSession: true,\n        plan: null,\n      },\n    ] as const;\n\n    for (const testCase of cases) {\n      it(\n        `returns ${String(testCase.expectedRedirect)} when hasSession=${testCase.hasSession} and plan=${String(testCase.plan)}`,\n        () => {\n          expect(resolveUpgradeRedirect(testCase.hasSession, testCase.plan)).toBe(\n            testCase.expectedRedirect,\n          );\n        },\n      );\n    }\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/lib/runtime-config.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  resolvePublicRuntimeConfig,\n  serializePublicRuntimeConfig,\n} from \"../../src/lib/runtime-config\";\n\ndescribe(\"resolvePublicRuntimeConfig\", () => {\n  it(\"returns normalized runtime values\", () => {\n    const config = resolvePublicRuntimeConfig({\n      googleAdsConversionLabel: \"runtime-conversion\",\n      googleAdsId: \"runtime-google\",\n      visitorsNowToken: \"runtime-visitors\",\n    });\n\n    expect(config).toEqual({\n      commercialMode: false,\n      gdprApplies: false,\n      googleAdsConversionLabel: \"runtime-conversion\",\n      googleAdsId: \"runtime-google\",\n      polarProMonthlyProductId: null,\n      polarProYearlyProductId: null,\n      visitorsNowToken: \"runtime-visitors\",\n    });\n  });\n\n  it(\"treats missing runtime values as null\", () => {\n    const config = resolvePublicRuntimeConfig({\n      googleAdsConversionLabel: \"\",\n      googleAdsId: undefined,\n      visitorsNowToken: null,\n    });\n\n    expect(config).toEqual({\n      commercialMode: false,\n      gdprApplies: false,\n      googleAdsConversionLabel: null,\n      googleAdsId: null,\n      polarProMonthlyProductId: null,\n      polarProYearlyProductId: null,\n      visitorsNowToken: null,\n    });\n  });\n});\n\ndescribe(\"serializePublicRuntimeConfig\", () => {\n  it(\"serializes config for safe inline script injection\", () => {\n    const serialized = serializePublicRuntimeConfig({\n      commercialMode: false,\n      gdprApplies: false,\n      googleAdsConversionLabel: \"conversion\",\n      googleAdsId: \"ads-123\",\n      polarProMonthlyProductId: null,\n      polarProYearlyProductId: null,\n      visitorsNowToken: \"</script><script>alert(1)</script>\",\n    });\n\n    expect(serialized).toContain(\"\\\"googleAdsId\\\":\\\"ads-123\\\"\");\n    expect(serialized).not.toContain(\"</script>\");\n    expect(serialized).toContain(\"\\\\u003C/script\\\\u003E\");\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/lib/serialized-mutate.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { serializedPatch, serializedCall } from \"../../src/lib/serialized-mutate\";\n\nfunction deferred<T = void>() {\n  const handle: {\n    resolve: (value: T) => void;\n    reject: (reason?: unknown) => void;\n    promise: Promise<T>;\n  } = {\n    resolve: () => {},\n    reject: () => {},\n    promise: Promise.resolve() as Promise<T>,\n  };\n\n  handle.promise = new Promise<T>((resolve, reject) => {\n    handle.resolve = resolve;\n    handle.reject = reject;\n  });\n\n  return handle;\n}\n\ndescribe(\"serializedPatch\", () => {\n  it(\"flushes immediately when nothing is in-flight\", async () => {\n    const flushed: Record<string, unknown>[] = [];\n\n    serializedPatch(\"key-a\", { field: true }, async (patch) => {\n      flushed.push(patch);\n    });\n\n    await Promise.resolve();\n    expect(flushed).toEqual([{ field: true }]);\n  });\n\n  it(\"queues patches while a request is in-flight and merges them\", async () => {\n    const flushed: Record<string, unknown>[] = [];\n    const first = deferred();\n\n    serializedPatch(\"key-b\", { a: true }, () => first.promise);\n\n    serializedPatch(\"key-b\", { b: true }, async (patch) => {\n      flushed.push(patch);\n    });\n    serializedPatch(\"key-b\", { c: true }, async (patch) => {\n      flushed.push(patch);\n    });\n\n    first.resolve();\n    await first.promise;\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(flushed).toEqual([{ b: true, c: true }]);\n  });\n\n  it(\"processes multiple generations sequentially\", async () => {\n    const order: string[] = [];\n    const first = deferred();\n    const second = deferred();\n\n    serializedPatch(\"key-c\", { gen: 1 }, () => {\n      order.push(\"gen1-start\");\n      return first.promise.then(() => order.push(\"gen1-end\"));\n    });\n\n    serializedPatch(\"key-c\", { gen: 2 }, () => {\n      order.push(\"gen2-start\");\n      return second.promise.then(() => order.push(\"gen2-end\"));\n    });\n\n    expect(order).toEqual([\"gen1-start\"]);\n\n    first.resolve();\n    await first.promise;\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(order).toEqual([\"gen1-start\", \"gen1-end\", \"gen2-start\"]);\n\n    second.resolve();\n    await second.promise;\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(order).toEqual([\"gen1-start\", \"gen1-end\", \"gen2-start\", \"gen2-end\"]);\n  });\n\n  it(\"drains the queue even when flush rejects\", async () => {\n    const flushed: Record<string, unknown>[] = [];\n    const errors: unknown[] = [];\n    const failing = deferred();\n\n    serializedPatch(\"key-d\", { a: true }, () => failing.promise, (error) => {\n      errors.push(error);\n    });\n\n    serializedPatch(\"key-d\", { b: true }, async (patch) => {\n      flushed.push(patch);\n    });\n\n    failing.reject(new Error(\"network error\"));\n    await failing.promise.catch(() => {});\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(flushed).toEqual([{ b: true }]);\n    expect(errors).toHaveLength(1);\n  });\n\n  it(\"uses independent queues for different keys\", async () => {\n    const flushed: Array<{ key: string; patch: Record<string, unknown> }> = [];\n    const first = deferred();\n\n    serializedPatch(\"key-e1\", { a: true }, () => first.promise);\n    serializedPatch(\"key-e2\", { b: true }, async (patch) => {\n      flushed.push({ key: \"key-e2\", patch });\n    });\n\n    await Promise.resolve();\n    expect(flushed).toEqual([{ key: \"key-e2\", patch: { b: true } }]);\n\n    first.resolve();\n    await first.promise;\n  });\n\n  it(\"later patches overwrite earlier patches for the same field\", async () => {\n    const flushed: Record<string, unknown>[] = [];\n    const first = deferred();\n\n    serializedPatch(\"key-f\", { toggle: true }, () => first.promise);\n\n    serializedPatch(\"key-f\", { toggle: false }, async (patch) => {\n      flushed.push(patch);\n    });\n    serializedPatch(\"key-f\", { toggle: true }, async (patch) => {\n      flushed.push(patch);\n    });\n\n    first.resolve();\n    await first.promise;\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(flushed).toEqual([{ toggle: true }]);\n  });\n});\n\ndescribe(\"serializedCall\", () => {\n  it(\"executes immediately when nothing is in-flight\", async () => {\n    const calls: string[] = [];\n\n    serializedCall(\"call-a\", async () => {\n      calls.push(\"executed\");\n    });\n\n    await Promise.resolve();\n    expect(calls).toEqual([\"executed\"]);\n  });\n\n  it(\"queues the latest callback and discards earlier ones\", async () => {\n    const calls: string[] = [];\n    const first = deferred();\n\n    serializedCall(\"call-b\", () => first.promise);\n\n    serializedCall(\"call-b\", async () => {\n      calls.push(\"second\");\n    });\n    serializedCall(\"call-b\", async () => {\n      calls.push(\"third\");\n    });\n\n    first.resolve();\n    await first.promise;\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(calls).toEqual([\"third\"]);\n  });\n\n  it(\"drains the queue even when callback rejects\", async () => {\n    const calls: string[] = [];\n    const errors: unknown[] = [];\n    const failing = deferred();\n\n    serializedCall(\"call-c\", () => failing.promise, (error) => {\n      errors.push(error);\n    });\n\n    serializedCall(\"call-c\", async () => {\n      calls.push(\"recovered\");\n    });\n\n    failing.reject(new Error(\"network error\"));\n    await failing.promise.catch(() => {});\n    await Promise.resolve();\n    await Promise.resolve();\n\n    expect(calls).toEqual([\"recovered\"]);\n    expect(errors).toHaveLength(1);\n  });\n\n  it(\"uses independent queues for different keys\", async () => {\n    const calls: string[] = [];\n    const first = deferred();\n\n    serializedCall(\"call-d1\", () => first.promise);\n    serializedCall(\"call-d2\", async () => {\n      calls.push(\"d2\");\n    });\n\n    await Promise.resolve();\n    expect(calls).toEqual([\"d2\"]);\n\n    first.resolve();\n    await first.promise;\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/providers/sync-provider-logic.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport type { CompositeSyncState, SyncAggregateData } from \"@/state/sync\";\nimport {\n  parseIncomingSocketAction,\n  shouldAcceptAggregatePayload,\n} from \"../../src/providers/sync-provider-logic\";\n\nconst createCurrentState = (\n  overrides: Partial<CompositeSyncState> = {},\n): CompositeSyncState => ({\n  connected: true,\n  hasReceivedAggregate: true,\n  lastSyncedAt: \"2026-03-08T12:00:00.000Z\",\n  progressPercent: 30,\n  seq: 8,\n  state: \"syncing\",\n  syncEventsProcessed: 3,\n  syncEventsRemaining: 7,\n  syncEventsTotal: 10,\n  ...overrides,\n});\n\nconst createAggregate = (\n  overrides: Partial<SyncAggregateData> = {},\n): SyncAggregateData => ({\n  lastSyncedAt: \"2026-03-08T12:01:00.000Z\",\n  progressPercent: 40,\n  seq: 9,\n  syncing: true,\n  syncEventsProcessed: 4,\n  syncEventsRemaining: 6,\n  syncEventsTotal: 10,\n  ...overrides,\n});\n\ndescribe(\"parseIncomingSocketAction\", () => {\n  it(\"returns reconnect for invalid json before first aggregate\", () => {\n    expect(parseIncomingSocketAction(\"{ bad\")).toEqual({ kind: \"reconnect\" });\n  });\n\n  it(\"returns reconnect for invalid json after first aggregate has been received\", () => {\n    expect(parseIncomingSocketAction(\"{ bad\")).toEqual({ kind: \"reconnect\" });\n  });\n\n  it(\"responds to ping frames with pong action\", () => {\n    expect(\n      parseIncomingSocketAction(JSON.stringify({ event: \"ping\" })),\n    ).toEqual({ kind: \"pong\" });\n  });\n\n  it(\"ignores unknown event frames\", () => {\n    expect(\n      parseIncomingSocketAction(\n        JSON.stringify({ data: { value: true }, event: \"unrelated:event\" }),\n      ),\n    ).toEqual({ kind: \"ignore\" });\n  });\n\n  it(\"returns reconnect for invalid sync aggregate payload before initialization\", () => {\n    expect(\n      parseIncomingSocketAction(\n        JSON.stringify({ data: { seq: \"bad\" }, event: \"sync:aggregate\" }),\n      ),\n    ).toEqual({ kind: \"reconnect\" });\n  });\n\n  it(\"returns aggregate action for valid sync aggregate payload\", () => {\n    const payload = createAggregate();\n\n    expect(\n      parseIncomingSocketAction(\n        JSON.stringify({ data: payload, event: \"sync:aggregate\" }),\n      ),\n    ).toEqual({\n      data: payload,\n      kind: \"aggregate\",\n    });\n  });\n});\n\ndescribe(\"shouldAcceptAggregatePayload\", () => {\n  it(\"accepts strictly newer sequence numbers\", () => {\n    const decision = shouldAcceptAggregatePayload(\n      createCurrentState(),\n      8,\n      createAggregate({ seq: 9 }),\n    );\n\n    expect(decision.accepted).toBe(true);\n    expect(decision.nextSeq).toBe(9);\n  });\n\n  it(\"accepts non-increasing sequence when it still shows forward progress\", () => {\n    const decision = shouldAcceptAggregatePayload(\n      createCurrentState(),\n      8,\n      createAggregate({ seq: 8, syncEventsProcessed: 5, syncEventsRemaining: 5 }),\n    );\n\n    expect(decision.accepted).toBe(true);\n    expect(decision.nextSeq).toBe(8);\n  });\n\n  it(\"accepts lower sequence when a new sync cycle starts\", () => {\n    const current = createCurrentState({\n      progressPercent: 100,\n      seq: 25,\n      state: \"idle\",\n      syncEventsProcessed: 0,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 0,\n    });\n\n    const decision = shouldAcceptAggregatePayload(\n      current,\n      25,\n      createAggregate({\n        lastSyncedAt: current.lastSyncedAt,\n        progressPercent: 0,\n        seq: 1,\n        syncing: true,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 12,\n        syncEventsTotal: 12,\n      }),\n    );\n\n    expect(decision.accepted).toBe(true);\n    expect(decision.nextSeq).toBe(25);\n  });\n\n  it(\"accepts lower sequence when lastSyncedAt moves forward\", () => {\n    const current = createCurrentState({\n      lastSyncedAt: \"2026-03-08T12:00:00.000Z\",\n      seq: 30,\n      state: \"idle\",\n      syncEventsProcessed: 0,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 0,\n    });\n\n    const decision = shouldAcceptAggregatePayload(\n      current,\n      30,\n      createAggregate({\n        lastSyncedAt: \"2026-03-08T12:05:00.000Z\",\n        progressPercent: 100,\n        seq: 2,\n        syncing: false,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n      }),\n    );\n\n    expect(decision.accepted).toBe(true);\n    expect(decision.nextSeq).toBe(30);\n  });\n\n  it(\"rejects non-increasing sequence with no forward progress\", () => {\n    const current = createCurrentState({\n      progressPercent: 40,\n      seq: 8,\n      syncEventsProcessed: 4,\n      syncEventsRemaining: 6,\n    });\n\n    const decision = shouldAcceptAggregatePayload(\n      current,\n      8,\n      createAggregate({\n        lastSyncedAt: current.lastSyncedAt,\n        progressPercent: 40,\n        seq: 8,\n        syncEventsProcessed: 4,\n        syncEventsRemaining: 6,\n      }),\n    );\n\n    expect(decision.accepted).toBe(false);\n    expect(decision.nextSeq).toBe(8);\n  });\n\n  it(\"rejects lower sequence with stale idle payload and no progress\", () => {\n    const current = createCurrentState({\n      progressPercent: 100,\n      seq: 50,\n      state: \"idle\",\n      syncEventsProcessed: 0,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 0,\n    });\n\n    const decision = shouldAcceptAggregatePayload(\n      current,\n      50,\n      createAggregate({\n        lastSyncedAt: current.lastSyncedAt,\n        progressPercent: 100,\n        seq: 4,\n        syncing: false,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n      }),\n    );\n\n    expect(decision.accepted).toBe(false);\n    expect(decision.nextSeq).toBe(50);\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/server/internal-routes.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { resolveInternalProxyPath } from \"../../src/server/internal-routes\";\n\ndescribe(\"resolveInternalProxyPath\", () => {\n  it(\"maps OAuth authorization-server metadata to the API auth handler\", () => {\n    expect(resolveInternalProxyPath(\"/.well-known/oauth-authorization-server\")).toBe(\n      \"/api/auth/.well-known/oauth-authorization-server\",\n    );\n  });\n\n  it(\"maps OpenID metadata to the API auth handler\", () => {\n    expect(resolveInternalProxyPath(\"/.well-known/openid-configuration\")).toBe(\n      \"/api/auth/.well-known/openid-configuration\",\n    );\n  });\n\n  it(\"maps path-suffixed OAuth metadata to the API auth handler\", () => {\n    expect(resolveInternalProxyPath(\"/.well-known/oauth-authorization-server/api/auth\")).toBe(\n      \"/api/auth/.well-known/oauth-authorization-server\",\n    );\n  });\n\n  it(\"maps path-suffixed OpenID metadata to the API auth handler\", () => {\n    expect(resolveInternalProxyPath(\"/.well-known/openid-configuration/api/auth\")).toBe(\n      \"/api/auth/.well-known/openid-configuration\",\n    );\n  });\n\n  it(\"returns null for regular application routes\", () => {\n    expect(resolveInternalProxyPath(\"/dashboard\")).toBeNull();\n  });\n});\n"
  },
  {
    "path": "applications/web/tests/state/sync.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { createStore } from \"jotai\";\nimport {\n  syncStateAtom,\n  syncStatusLabelAtom,\n  syncStatusShimmerAtom,\n} from \"../../src/state/sync\";\n\ndescribe(\"sync status atoms\", () => {\n  it(\"does not report up-to-date before first aggregate payload\", () => {\n    const store = createStore();\n    store.set(syncStateAtom, {\n      connected: true,\n      hasReceivedAggregate: false,\n      lastSyncedAt: null,\n      progressPercent: 100,\n      seq: 0,\n      state: \"idle\",\n      syncEventsProcessed: 0,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 0,\n    });\n\n    expect(store.get(syncStatusLabelAtom)).toBe(\"Connecting\");\n    expect(store.get(syncStatusShimmerAtom)).toBe(true);\n  });\n\n  it(\"reports up-to-date only after a real aggregate payload\", () => {\n    const store = createStore();\n    store.set(syncStateAtom, {\n      connected: true,\n      hasReceivedAggregate: true,\n      lastSyncedAt: \"2026-03-08T12:00:00.000Z\",\n      progressPercent: 100,\n      seq: 4,\n      state: \"idle\",\n      syncEventsProcessed: 0,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 0,\n    });\n\n    expect(store.get(syncStatusLabelAtom)).toBe(\"Up to Date\");\n    expect(store.get(syncStatusShimmerAtom)).toBe(false);\n  });\n});\n"
  },
  {
    "path": "applications/web/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"useDefineForClassFields\": true,\n    \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"],\n    \"module\": \"ESNext\",\n    \"skipLibCheck\": true,\n\n    /* Bundler mode */\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\",\n\n    /* Linting */\n    \"strict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"noFallthroughCasesInSwitch\": true,\n\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"src\",\"tests/**/*\"],\n  \"exclude\": [\"src/**/*.test.ts\", \"src/**/*.test.tsx\"],\n  \"references\": [{ \"path\": \"./tsconfig.node.json\" }]\n}\n"
  },
  {
    "path": "applications/web/tsconfig.node.json",
    "content": "{\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"skipLibCheck\": true,\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"bundler\",\n    \"allowSyntheticDefaultImports\": true\n  },\n  \"include\": [\"vite.config.ts\", \"plugins/**/*.ts\"]\n}\n"
  },
  {
    "path": "applications/web/vite.config.ts",
    "content": "import { resolve } from \"node:path\";\nimport { defineConfig } from \"vite\";\nimport { tanstackRouter } from \"@tanstack/router-plugin/vite\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport svgr from \"vite-plugin-svgr\";\nimport react, { reactCompilerPreset } from '@vitejs/plugin-react'\nimport babel from '@rolldown/plugin-babel'\nimport { blogPlugin } from \"./plugins/blog\";\nimport { sitemapPlugin } from \"./plugins/sitemap\";\n\nexport default defineConfig(({ isSsrBuild }) => ({\n  resolve: {\n    alias: {\n      \"@\": resolve(import.meta.dirname, \"src\"),\n    },\n  },\n  plugins: [\n    blogPlugin(),\n    tailwindcss(),\n    tanstackRouter({\n      autoCodeSplitting: true,\n      generatedRouteTree: \"src/generated/tanstack/route-tree.generated.ts\",\n      target: \"react\",\n    }),\n    react(),\n    babel({\n      presets: [\n        [\"@babel/preset-typescript\", { isTSX: true, allExtensions: true }],\n        reactCompilerPreset(),\n      ],\n    }),\n    svgr(),\n    !isSsrBuild && sitemapPlugin(),\n  ].filter(Boolean),\n  build: {\n    manifest: !isSsrBuild,\n    sourcemap: process.env.ENV !== \"production\",\n    rollupOptions: !isSsrBuild\n      ? {\n          external: [\"mermaid\"],\n          output: {\n            manualChunks(id) {\n              if (id.includes(\"/react-dom/\") || id.includes(\"/react/\")) {\n                return \"react-vendor\";\n              }\n            },\n          },\n        }\n      : undefined,\n  },\n  server: {\n    allowedHosts: [\"macbook\"],\n    host: \"0.0.0.0\",\n    proxy: {\n      \"/api\": {\n        changeOrigin: true,\n        target: \"http://localhost:3000\",\n        ws: true,\n      },\n      \"/mcp\": {\n        changeOrigin: true,\n        target: \"http://localhost:3001\",\n      },\n    },\n  },\n}));\n"
  },
  {
    "path": "applications/web/vitest.config.ts",
    "content": "import { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      \"@\": resolve(fileURLToPath(import.meta.url), \"../src\"),\n    },\n  },\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\", \"./tests/**/*.test.tsx\"],\n  },\n});\n"
  },
  {
    "path": "bunfig.toml",
    "content": "[test]\npreload = [\"./scripts/bun-test.ts\"]\n"
  },
  {
    "path": "compose.yaml",
    "content": "name: keeper\n\nservices:\n  postgres:\n    image: postgres:17\n    container_name: keeper-postgres\n    environment:\n      POSTGRES_USER: ${DATABASE_USER:-postgres}\n      POSTGRES_PASSWORD: ${DATABASE_PASSWORD:-postgres}\n      POSTGRES_DB: ${DATABASE_NAME:-postgres}\n    ports:\n      - 5432:5432\n    volumes:\n      - keeper-postgres-data:/var/lib/postgresql/data\n    restart: unless-stopped\n\n  redis:\n    image: redis:7-alpine\n    container_name: keeper-redis\n    ports:\n      - 6379:6379\n    volumes:\n      - keeper-redis-data:/data\n    restart: unless-stopped\n\n  caddy:\n    image: caddy:2-alpine\n    container_name: keeper-caddy\n    ports:\n      - \"443:443\"\n      - \"443:443/udp\"\n      - \"80:80\"\n    extra_hosts:\n      - \"host.docker.internal:host-gateway\"\n    volumes:\n      - ./Caddyfile:/etc/caddy/Caddyfile:ro\n      - ./.pki/root.crt:/data/caddy/pki/authorities/local/root.crt:ro\n      - ./.pki/root.key:/data/caddy/pki/authorities/local/root.key:ro\n      - keeper-caddy-config:/config\n    restart: unless-stopped\n\nvolumes:\n  keeper-postgres-data:\n  keeper-redis-data:\n  keeper-caddy-config:\n"
  },
  {
    "path": "deploy/Caddyfile",
    "content": "{$DOMAIN} {\n\ttls {\n\t\tdns cloudflare {$CLOUDFLARE_API_TOKEN}\n\t}\n\n\tredir https://www.{$DOMAIN}{uri} permanent\n}\n\nwww.{$DOMAIN} {\n\ttls {\n\t\tdns cloudflare {$CLOUDFLARE_API_TOKEN}\n\t}\n\n\treverse_proxy web:3000\n}\n"
  },
  {
    "path": "deploy/compose.yaml",
    "content": "name: keeper\n\nservices:\n  caddy:\n    build:\n      context: ../docker/caddy\n    container_name: keeper-caddy\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443/udp\"\n    environment:\n      DOMAIN: \"${DOMAIN:?DOMAIN is required}\"\n      CLOUDFLARE_API_TOKEN: \"${CLOUDFLARE_API_TOKEN:?CLOUDFLARE_API_TOKEN is required}\"\n    volumes:\n      - ./Caddyfile:/etc/caddy/Caddyfile:ro\n      - caddy-data:/data\n      - caddy-config:/config\n    depends_on:\n      - web\n    restart: unless-stopped\n\n  redis:\n    image: redis:7-alpine\n    container_name: keeper-redis\n    command: redis-server --requirepass \"${REDIS_PASSWORD:?REDIS_PASSWORD is required}\"\n    env_file: .env\n    volumes:\n      - redis-data:/data\n    restart: unless-stopped\n\n  api:\n    image: ghcr.io/ridafkih/keeper-api:latest\n    container_name: keeper-api\n    env_file: .env\n    environment:\n      ENV: production\n      NODE_EXTRA_CA_CERTS: /certs/global-bundle.pem\n      BLOCK_PRIVATE_RESOLUTION: \"true\"\n    volumes:\n      - ./global-bundle.pem:/certs/global-bundle.pem:ro\n    depends_on:\n      - redis\n    restart: unless-stopped\n\n  cron:\n    image: ghcr.io/ridafkih/keeper-cron:latest\n    container_name: keeper-cron\n    env_file: .env\n    environment:\n      ENV: production\n      NODE_EXTRA_CA_CERTS: /certs/global-bundle.pem\n      WORKER_JOB_QUEUE_ENABLED: \"true\"\n      BLOCK_PRIVATE_RESOLUTION: \"true\"\n    volumes:\n      - ./global-bundle.pem:/certs/global-bundle.pem:ro\n    depends_on:\n      - api\n    restart: unless-stopped\n\n  worker:\n    image: ghcr.io/ridafkih/keeper-worker:latest\n    container_name: keeper-worker\n    env_file: .env\n    environment:\n      ENV: production\n      NODE_EXTRA_CA_CERTS: /certs/global-bundle.pem\n    volumes:\n      - ./global-bundle.pem:/certs/global-bundle.pem:ro\n    depends_on:\n      - redis\n    restart: unless-stopped\n\n  mcp:\n    image: ghcr.io/ridafkih/keeper-mcp:latest\n    container_name: keeper-mcp\n    env_file: .env\n    environment:\n      ENV: production\n      NODE_EXTRA_CA_CERTS: /certs/global-bundle.pem\n    volumes:\n      - ./global-bundle.pem:/certs/global-bundle.pem:ro\n    depends_on:\n      - api\n    restart: unless-stopped\n\n  web:\n    image: ghcr.io/ridafkih/keeper-web:latest\n    container_name: keeper-web\n    env_file: .env\n    environment:\n      VITE_API_URL: http://api:3001\n      VITE_MCP_URL: http://mcp:3002\n      PORT: \"3000\"\n      ENV: production\n    depends_on:\n      - api\n      - mcp\n    restart: unless-stopped\n\nvolumes:\n  caddy-data:\n  caddy-config:\n  redis-data:\n"
  },
  {
    "path": "docker/caddy/Dockerfile",
    "content": "FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n  --with github.com/caddy-dns/cloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder /usr/bin/caddy /usr/bin/caddy\n"
  },
  {
    "path": "docker/services/Dockerfile",
    "content": "ARG S6_OVERLAY_VERSION=3.2.0.2\n\nFROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/api @keeper.sh/cron @keeper.sh/worker @keeper.sh/web --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd services/api build && \\\n    bun run --cwd services/cron build && \\\n    bun run --cwd services/worker build && \\\n    bun run --cwd applications/web build\n\nFROM debian:bookworm-slim AS runtime\n\nARG S6_OVERLAY_VERSION\nARG TARGETARCH\n\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n  ca-certificates \\\n  curl \\\n  xz-utils \\\n  unzip \\\n  && rm -rf /var/lib/apt/lists/*\n\nRUN curl -fsSL https://bun.sh/install | bash\nENV PATH=\"/root/.bun/bin:${PATH}\"\n\nRUN case \"${TARGETARCH}\" in \\\n  amd64) S6_ARCH=\"x86_64\" ;; \\\n  arm64) S6_ARCH=\"aarch64\" ;; \\\n  *) echo \"Unsupported architecture: ${TARGETARCH}\" && exit 1 ;; \\\n  esac \\\n  && curl -fsSL \"https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz\" -o /tmp/s6-overlay-noarch.tar.xz \\\n  && curl -fsSL \"https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz\" -o /tmp/s6-overlay-arch.tar.xz \\\n  && tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz \\\n  && tar -C / -Jxpf /tmp/s6-overlay-arch.tar.xz \\\n  && rm /tmp/s6-overlay-*.tar.xz\n\nWORKDIR /app\n\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\n\nCOPY --from=build /app/services/api/dist ./services/api/dist\nCOPY --from=build /app/services/cron/dist ./services/cron/dist\nCOPY --from=build /app/services/worker/dist ./services/worker/dist\nCOPY --from=build /app/packages/database/src ./packages/database/src\nCOPY --from=source /app/packages/database/scripts ./packages/database/scripts\nCOPY --from=source /app/packages/database/drizzle ./packages/database/drizzle\n\nCOPY --from=build /app/applications/web/dist ./applications/web/dist\n\nCOPY docker/services/rootfs /\n\nRUN chmod +x /etc/s6-overlay/s6-rc.d/*/run /etc/s6-overlay/scripts/*\n\nENV ENV=production\nENV S6_KEEP_ENV=1\nENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2\nENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=60000\n\nENV API_PORT=3001\nENV VITE_API_URL=http://127.0.0.1:3001\nENV COMMERCIAL_MODE=false\nENV WORKER_JOB_QUEUE_ENABLED=true\n\nEXPOSE 3000 3001\n\nHEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \\\n  CMD curl -f -H \"Accept: text/html\" http://localhost:3000/ || exit 1\n\nENTRYPOINT [\"/init\"]\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/api/dependencies.d/init-db",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/api/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app\nexec /root/.bun/bin/bun run services/api/dist/index.js\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/api/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/cron/dependencies.d/init-db",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/cron/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app\nexec /root/.bun/bin/bun run services/cron/dist/index.js\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/cron/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/init-db/type",
    "content": "oneshot\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/init-db/up",
    "content": "/etc/s6-overlay/scripts/init-db\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/api",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/cron",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/init-db",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/web",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/worker",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/user/type",
    "content": "bundle\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/web/dependencies.d/api",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/web/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app/applications/web\nexport HOSTNAME=0.0.0.0\nexport PORT=3000\nexec /root/.bun/bin/bun dist/server-entry/index.js\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/web/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/worker/dependencies.d/init-db",
    "content": ""
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/worker/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app\nexec /root/.bun/bin/bun run services/worker/dist/index.js\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/s6-rc.d/worker/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/services/rootfs/etc/s6-overlay/scripts/init-db",
    "content": "#!/bin/bash\nset -e\n\n/root/.bun/bin/bun /app/packages/database/scripts/migrate.ts\n"
  },
  {
    "path": "docker/standalone/Dockerfile",
    "content": "ARG S6_OVERLAY_VERSION=3.2.0.2\n\nFROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/api @keeper.sh/cron @keeper.sh/worker @keeper.sh/web --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd services/api build && \\\n    bun run --cwd services/cron build && \\\n    bun run --cwd services/worker build && \\\n    bun run --cwd applications/web build\n\nFROM debian:bookworm-slim AS runtime\n\nARG S6_OVERLAY_VERSION\nARG TARGETARCH\n\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n  ca-certificates \\\n  curl \\\n  gnupg \\\n  lsb-release \\\n  xz-utils \\\n  unzip \\\n  && rm -rf /var/lib/apt/lists/*\n\nRUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg \\\n  && echo \"deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main\" > /etc/apt/sources.list.d/pgdg.list \\\n  && apt-get update \\\n  && apt-get install -y --no-install-recommends postgresql-17 \\\n  && rm -rf /var/lib/apt/lists/*\n\nRUN apt-get update && apt-get install -y --no-install-recommends redis-server \\\n  && rm -rf /var/lib/apt/lists/*\n\nRUN curl -fsSL https://caddyserver.com/api/download?os=linux\\&arch=${TARGETARCH} -o /usr/bin/caddy \\\n  && chmod +x /usr/bin/caddy\n\nRUN curl -fsSL https://bun.sh/install | bash\nENV PATH=\"/root/.bun/bin:${PATH}\"\n\nRUN case \"${TARGETARCH}\" in \\\n  amd64) S6_ARCH=\"x86_64\" ;; \\\n  arm64) S6_ARCH=\"aarch64\" ;; \\\n  *) echo \"Unsupported architecture: ${TARGETARCH}\" && exit 1 ;; \\\n  esac \\\n  && curl -fsSL \"https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz\" -o /tmp/s6-overlay-noarch.tar.xz \\\n  && curl -fsSL \"https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz\" -o /tmp/s6-overlay-arch.tar.xz \\\n  && tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz \\\n  && tar -C / -Jxpf /tmp/s6-overlay-arch.tar.xz \\\n  && rm /tmp/s6-overlay-*.tar.xz\n\nWORKDIR /app\n\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\n\nCOPY --from=build /app/services/api/dist ./services/api/dist\nCOPY --from=build /app/services/cron/dist ./services/cron/dist\nCOPY --from=build /app/services/worker/dist ./services/worker/dist\nCOPY --from=build /app/packages/database/src ./packages/database/src\nCOPY --from=source /app/packages/database/scripts ./packages/database/scripts\nCOPY --from=source /app/packages/database/drizzle ./packages/database/drizzle\n\nCOPY --from=build /app/applications/web/dist ./applications/web/dist\n\nCOPY docker/standalone/rootfs /\n\nRUN chmod +x /etc/s6-overlay/s6-rc.d/*/run /etc/s6-overlay/scripts/* \\\n  && mkdir -p /var/lib/postgresql/data /run/postgresql /var/log/keeper \\\n  && chown -R postgres:postgres /var/lib/postgresql /run/postgresql\n\nENV ENV=production\nENV S6_KEEP_ENV=1\nENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2\nENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=60000\n\nENV DATABASE_URL=postgresql://keeper:keeper@localhost:5432/keeper\nENV REDIS_URL=redis://localhost:6379\nENV API_PORT=3001\nENV COMMERCIAL_MODE=false\nENV WORKER_JOB_QUEUE_ENABLED=true\nENV BETTER_AUTH_URL=http://localhost\nENV VITE_API_URL=http://127.0.0.1:3001\n\nEXPOSE 80\n\nVOLUME [\"/var/lib/postgresql/data\"]\n\nHEALTHCHECK --interval=30s --timeout=10s --start-period=90s --retries=3 \\\n  CMD curl -f -H \"Accept: text/html\" http://localhost/ || exit 1\n\nENTRYPOINT [\"/init\"]\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/caddy/Caddyfile",
    "content": ":80 {\n\thandle /api/* {\n\t\treverse_proxy 127.0.0.1:3001 {\n\t\t\tflush_interval -1\n\t\t}\n\t}\n\n\thandle {\n\t\treverse_proxy 127.0.0.1:3000\n\t}\n}\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/api/dependencies.d/init-db",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/api/dependencies.d/redis",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/api/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app\nexec /root/.bun/bin/bun run services/api/dist/index.js\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/api/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/caddy/dependencies.d/web",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/caddy/run",
    "content": "#!/bin/bash\nexec 2>&1\n\nexec caddy run --config /etc/caddy/Caddyfile\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/caddy/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/cron/dependencies.d/init-db",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/cron/dependencies.d/redis",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/cron/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app\nexec /root/.bun/bin/bun run services/cron/dist/index.js\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/cron/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/init-db/dependencies.d/postgres",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/init-db/type",
    "content": "oneshot\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/init-db/up",
    "content": "/etc/s6-overlay/scripts/init-db\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/postgres/dependencies.d/base",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/postgres/run",
    "content": "#!/bin/bash\nexec 2>&1\n\nPGDATA=/var/lib/postgresql/data\n\nchown postgres:postgres \"$PGDATA\"\nchmod 0700 \"$PGDATA\"\n\nif [ ! -f \"$PGDATA/PG_VERSION\" ]; then\n    su postgres -c \"/usr/lib/postgresql/17/bin/initdb -D $PGDATA\"\nfi\n\nexec su postgres -c \"/usr/lib/postgresql/17/bin/postgres -D $PGDATA -c listen_addresses=localhost\"\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/postgres/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/redis/dependencies.d/base",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/redis/run",
    "content": "#!/bin/bash\nexec 2>&1\n\nexec redis-server --bind 127.0.0.1 --port 6379 --daemonize no\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/redis/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/api",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/caddy",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/cron",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/init-db",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/postgres",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/redis",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/web",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/worker",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/user/type",
    "content": "bundle\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/web/dependencies.d/api",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/web/run",
    "content": "#!/bin/bash\nexec 2>&1\n\nuntil curl -sf http://127.0.0.1:3001/api/health > /dev/null; do\n  sleep 1\ndone\n\ncd /app/applications/web\nexport HOSTNAME=0.0.0.0\nexport PORT=3000\nexec /root/.bun/bin/bun dist/server-entry/index.js\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/web/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/worker/dependencies.d/init-db",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/worker/dependencies.d/redis",
    "content": ""
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/worker/run",
    "content": "#!/bin/bash\nexec 2>&1\n\ncd /app\nexec /root/.bun/bin/bun run services/worker/dist/index.js\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/s6-rc.d/worker/type",
    "content": "longrun\n"
  },
  {
    "path": "docker/standalone/rootfs/etc/s6-overlay/scripts/init-db",
    "content": "#!/bin/bash\nset -e\n\nuntil su postgres -c \"/usr/lib/postgresql/17/bin/pg_isready -q\"; do\n    sleep 1\ndone\n\nKEEPER_DB_PASSWORD=\"${POSTGRES_PASSWORD:-keeper}\"\n\nif ! su postgres -c \"/usr/lib/postgresql/17/bin/psql -tAc \\\"SELECT 1 FROM pg_database WHERE datname='keeper'\\\"\" | grep -q 1; then\n    su postgres -c \"/usr/lib/postgresql/17/bin/createuser -s keeper\" || true\n    su postgres -c \"/usr/lib/postgresql/17/bin/createdb -O keeper keeper\"\n    su postgres -c \"/usr/lib/postgresql/17/bin/psql -c \\\"ALTER USER keeper WITH PASSWORD '${KEEPER_DB_PASSWORD}'\\\"\"\nfi\n\nif [ -n \"${POSTGRES_PASSWORD}\" ]; then\n    export DATABASE_URL=\"postgresql://keeper:${KEEPER_DB_PASSWORD}@localhost:5432/keeper\"\nfi\n\n/root/.bun/bin/bun /app/packages/database/scripts/migrate.ts\n"
  },
  {
    "path": "knip.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/knip@5/schema.json\",\n  \"ignore\": [\n    \"**/*.css\",\n    \"**/*.test.ts\",\n    \"**/*.test.tsx\",\n    \"tests/**/*\",\n    \"scripts/**/*\",\n    \"services/cron/src/jobs/**/*\",\n    \"applications/web/src/generated/**/*\"\n  ],\n  \"ignoreBinaries\": [],\n  \"ignoreDependencies\": [\"@keeper.sh/otelemetry\", \"@keeper.sh/fixtures\"],\n  \"ignoreWorkspaces\": [\"packages/typescript-config\"],\n  \"ignoreExportsUsedInFile\": true,\n  \"workspaces\": {\n    \"packages/*\": {\n      \"entry\": [\"src/{index.ts,api.ts,cron.ts}\"],\n      \"project\": \"src/**/*.{ts,tsx}\"\n    },\n    \"applications/*\": {\n      \"entry\": [\"src/{index.ts,main.tsx,server.tsx}\"],\n      \"project\": \"src/**/*.{ts,tsx}\"\n    },\n    \"applications/web\": {\n      \"entry\": [\n        \"src/main.tsx\",\n        \"src/server.tsx\",\n        \"plugins/**/*.ts\",\n        \"scripts/**/*.ts\"\n      ],\n      \"project\": [\"src/**/*.{ts,tsx}\", \"plugins/**/*.ts\", \"scripts/**/*.ts\"],\n      \"ignoreDependencies\": [\"@babel/preset-typescript\"]\n    },\n    \"services/*\": {\n      \"project\": \"src/**/*.{ts,tsx}\"\n    },\n    \"services/api\": {\n      \"entry\": [\"src/routes/**/*.ts\"],\n      \"project\": \"src/**/*.{ts,tsx}\"\n    },\n    \"services/cron\": {\n      \"entry\": [\"src/jobs/*.ts\"],\n      \"project\": \"src/**/*.{ts,tsx}\"\n    },\n    \"services/mcp\": {\n      \"entry\": [\"src/routes/**/*.ts\"],\n      \"project\": \"src/**/*.{ts,tsx}\"\n    }\n  }\n}\n"
  },
  {
    "path": "lefthook.yml",
    "content": "pre-push:\n  parallel: true\n  jobs:\n    - name: lint\n      run: bun run lint\n    - name: types\n      run: bun run types\n    - name: unused\n      run: bun run unused\n    - name: test\n      run: bun run test\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"keeper.sh\",\n  \"devDependencies\": {\n    \"knip\": \"5.80.0\",\n    \"oxlint\": \"^1.55.0\",\n    \"rimraf\": \"^6.1.3\",\n    \"turbo\": \"^2.9.0\"\n  },\n  \"license\": \"AGPL-3.0-only\",\n  \"overrides\": {\n    \"arktype\": \"^2.2.0\"\n  },\n  \"packageManager\": \"bun@1.3.11\",\n  \"private\": true,\n  \"scripts\": {\n    \"clean\": \"rimraf --glob **/{.turbo,node_modules,.next/}/\",\n    \"dev\": \"turbo run dev dev:root\",\n    \"dev:root\": \"docker compose up --force-recreate\",\n    \"types\": \"turbo run types --parallel\",\n    \"build\": \"turbo run build\",\n    \"start\": \"turbo run start\",\n    \"test\": \"turbo run test\",\n    \"lint\": \"turbo run lint\",\n    \"unused\": \"knip\"\n  },\n  \"type\": \"module\",\n  \"workspaces\": {\n    \"packages\": [\n      \"packages/*\",\n      \"applications/*\",\n      \"services/*\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/auth/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/auth\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"bun x --bun vitest run\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@better-auth/oauth-provider\": \"1.5.5\",\n    \"@better-auth/passkey\": \"^1.5.5\",\n    \"@keeper.sh/constants\": \"workspace:*\",\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"@polar-sh/better-auth\": \"^1.6.3\",\n    \"@polar-sh/sdk\": \"^0.42.1\",\n    \"arktype\": \"^2.2.0\",\n    \"better-auth\": \"1.5.5\",\n    \"better-call\": \"^2.0.2\",\n    \"drizzle-orm\": \"^0.45.1\",\n    \"resend\": \"^6.6.0\",\n    \"zod\": \"^4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "packages/auth/src/capabilities.ts",
    "content": "import { authCapabilitiesSchema } from \"@keeper.sh/data-schemas\";\nimport type { AuthCapabilities } from \"@keeper.sh/data-schemas\";\n\ninterface ResolveAuthCapabilitiesConfig {\n  commercialMode?: boolean;\n  googleClientId?: string;\n  googleClientSecret?: string;\n  microsoftClientId?: string;\n  microsoftClientSecret?: string;\n  passkeyRpId?: string;\n  passkeyOrigin?: string;\n}\n\nconst hasOAuthCredentials = (clientId?: string, clientSecret?: string): boolean =>\n  Boolean(clientId && clientSecret);\n\nconst resolveCredentialMode = (\n  commercialMode?: boolean,\n): AuthCapabilities[\"credentialMode\"] => {\n  if (commercialMode) {\n    return \"email\";\n  }\n\n  return \"username\";\n};\n\nconst resolveAuthCapabilities = (\n  config: ResolveAuthCapabilitiesConfig,\n): AuthCapabilities =>\n  authCapabilitiesSchema.assert({\n    commercialMode: config.commercialMode ?? false,\n    credentialMode: resolveCredentialMode(config.commercialMode),\n    requiresEmailVerification: config.commercialMode ?? false,\n    socialProviders: {\n      google: hasOAuthCredentials(config.googleClientId, config.googleClientSecret),\n      microsoft: hasOAuthCredentials(config.microsoftClientId, config.microsoftClientSecret),\n    },\n    supportsChangePassword: true,\n    supportsPasskeys: Boolean(\n      config.commercialMode && config.passkeyOrigin && config.passkeyRpId,\n    ),\n    supportsPasswordReset: config.commercialMode ?? false,\n  });\n\nexport { resolveAuthCapabilities };\nexport type { ResolveAuthCapabilitiesConfig };\n"
  },
  {
    "path": "packages/auth/src/index.ts",
    "content": "import { type } from \"arktype\";\nimport { betterAuth } from \"better-auth\";\nimport { createAuthMiddleware } from \"better-auth/api\";\nimport { drizzleAdapter } from \"better-auth/adapters/drizzle\";\nimport { jwt as jwtPlugin } from \"better-auth/plugins\";\nimport { oauthProvider } from \"@better-auth/oauth-provider\";\nimport { oauthProviderResourceClient } from \"@better-auth/oauth-provider/resource-client\";\nimport { passkey as passkeyPlugin } from \"@better-auth/passkey\";\nimport { checkout, polar, portal } from \"@polar-sh/better-auth\";\nimport { Polar } from \"@polar-sh/sdk\";\nimport { Resend } from \"resend\";\nimport { usernameOnly } from \"./plugins/username-only\";\nimport { deletePolarCustomerByExternalId } from \"./polar-customer-delete\";\nimport { writeAuthStderr } from \"./runtime-environment\";\nimport { resolveAuthCapabilities } from \"./capabilities\";\nimport {\n  resolveMcpAuthOptions,\n} from \"./mcp-config\";\nimport {\n  account as accountTable,\n  jwks as jwksTable,\n  oauthAccessToken as oauthAccessTokenTable,\n  oauthClient as oauthClientTable,\n  oauthConsent as oauthConsentTable,\n  oauthRefreshToken as oauthRefreshTokenTable,\n  passkey as passkeyTable,\n  session as sessionTable,\n  user as userTable,\n  verification as verificationTable,\n} from \"@keeper.sh/database/auth-schema\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { BetterAuthPlugin, User } from \"better-auth\";\n\ninterface EmailUser {\n  email: string;\n  name: string;\n}\n\ninterface SendEmailParams {\n  user: EmailUser;\n  url: string;\n}\n\ninterface AuthConfig {\n  database: BunSQLDatabase;\n  secret: string;\n  baseUrl: string;\n  commercialMode?: boolean;\n  polarAccessToken?: string;\n  polarMode?: \"sandbox\" | \"production\";\n  googleClientId?: string;\n  googleClientSecret?: string;\n  microsoftClientId?: string;\n  microsoftClientSecret?: string;\n  resendApiKey?: string;\n  passkeyRpId?: string;\n  passkeyRpName?: string;\n  passkeyOrigin?: string;\n  trustedOrigins?: string[];\n  mcpResourceUrl?: string;\n}\n\ninterface KeeperMcpAuthSession {\n  scopes: string;\n  userId: string | null;\n}\n\ninterface KeeperMcpAuthApi {\n  getMcpSession: (input: { headers: Headers }) => Promise<KeeperMcpAuthSession | null>;\n  getMCPProtectedResource: () => Promise<unknown>;\n  getMcpOAuthConfig: () => Promise<unknown>;\n}\n\n/**\n * Better Auth's oauthProvider plugin adds API methods at runtime.\n * This type predicate verifies the methods exist so we can call them\n * without type assertions.\n */\ninterface OAuthProviderAuthApi {\n  getOAuthServerConfig: (input: { headers: Headers }) => Promise<unknown>;\n  getOpenIdConfig: (input: { headers: Headers }) => Promise<unknown>;\n}\n\nconst hasOAuthProviderApi = (\n  api: object,\n): api is OAuthProviderAuthApi => {\n  if (!(\"getOAuthServerConfig\" in api)) {\n    return false;\n  }\n  if (!(\"getOpenIdConfig\" in api)) {\n    return false;\n  }\n  if (typeof api.getOAuthServerConfig !== \"function\") {\n    return false;\n  }\n  if (typeof api.getOpenIdConfig !== \"function\") {\n    return false;\n  }\n  return true;\n};\n\nconst mcpJwtClaimsSchema = type({\n  scope: \"string\",\n  sub: \"string\",\n  \"+\": \"delete\",\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst extractSignUpEmail = (value: unknown): string | null => {\n  if (!isRecord(value) || typeof value.email !== \"string\") {\n    return null;\n  }\n\n  return value.email;\n};\n\nconst createAuth = (config: AuthConfig) => {\n  const {\n    database,\n    secret,\n    baseUrl,\n    commercialMode = false,\n    polarAccessToken,\n    polarMode,\n    googleClientId,\n    googleClientSecret,\n    microsoftClientId,\n    microsoftClientSecret,\n    resendApiKey,\n    passkeyRpId,\n    passkeyRpName,\n    passkeyOrigin,\n    trustedOrigins,\n    mcpResourceUrl,\n  } = config;\n\n  const buildResendClient = (): Resend | null => {\n    if (resendApiKey) {\n      return new Resend(resendApiKey);\n    }\n    return null;\n  };\n\n  const resend = buildResendClient();\n  const capabilities = resolveAuthCapabilities({\n    commercialMode,\n    googleClientId,\n    googleClientSecret,\n    microsoftClientId,\n    microsoftClientSecret,\n    passkeyOrigin,\n    passkeyRpId,\n  });\n\n  const plugins: BetterAuthPlugin[] = [];\n\n  if (!commercialMode) {\n    plugins.push(usernameOnly());\n  }\n\n  const buildPolarClient = (): Polar | null => {\n    if (polarAccessToken && polarMode) {\n      return new Polar({\n        accessToken: polarAccessToken,\n        server: polarMode,\n      });\n    }\n    return null;\n  };\n\n  const polarClient = buildPolarClient();\n\n  if (polarClient) {\n    const buildCheckoutSuccessUrl = (): string => {\n      if (!baseUrl) {\n        return \"/dashboard/billing?success=true\";\n      }\n      return new URL(\"/dashboard/billing?success=true\", baseUrl).toString();\n    };\n\n    const checkoutSuccessUrl = buildCheckoutSuccessUrl();\n\n    plugins.push(\n      polar({\n        client: polarClient,\n        createCustomerOnSignUp: true,\n        use: [\n          checkout({\n            successUrl: checkoutSuccessUrl,\n          }),\n          portal(),\n        ],\n      }),\n    );\n  }\n\n  if (commercialMode && passkeyRpId && passkeyOrigin) {\n    plugins.push(\n      passkeyPlugin({\n        origin: passkeyOrigin,\n        rpID: passkeyRpId,\n        rpName: passkeyRpName,\n      }),\n    );\n  }\n\n  const mcpOptions = resolveMcpAuthOptions({\n    resourceBaseUrl: mcpResourceUrl,\n    webBaseUrl: baseUrl,\n  });\n\n  if (mcpOptions) {\n    plugins.push(jwtPlugin());\n    plugins.push(oauthProvider(mcpOptions.oauthProvider));\n  }\n\n  const socialProviders: Parameters<typeof betterAuth>[0][\"socialProviders\"] = {};\n\n  if (googleClientId && googleClientSecret) {\n    socialProviders.google = {\n      accessType: \"offline\",\n      clientId: googleClientId,\n      clientSecret: googleClientSecret,\n      prompt: \"consent\",\n      scope: [\"https://www.googleapis.com/auth/calendar.events\"],\n    };\n  }\n\n  if (microsoftClientId && microsoftClientSecret) {\n    socialProviders.microsoft = {\n      clientId: microsoftClientId,\n      clientSecret: microsoftClientSecret,\n      prompt: \"consent\",\n      scope: [\"offline_access\", \"User.Read\", \"Calendars.ReadWrite\"],\n    };\n  }\n\n  const auth = betterAuth({\n    account: {\n      accountLinking: {\n        allowDifferentEmails: true,\n      },\n    },\n    basePath: \"/api/auth\",\n    baseURL: baseUrl,\n    database: drizzleAdapter(database, {\n      provider: \"pg\",\n      schema: {\n        account: accountTable,\n        jwks: jwksTable,\n        oauthAccessToken: oauthAccessTokenTable,\n        oauthClient: oauthClientTable,\n        oauthConsent: oauthConsentTable,\n        oauthRefreshToken: oauthRefreshTokenTable,\n        passkey: passkeyTable,\n        session: sessionTable,\n        user: userTable,\n        verification: verificationTable,\n      },\n    }),\n    emailAndPassword: {\n      enabled: commercialMode,\n      requireEmailVerification: commercialMode,\n      sendResetPassword: async ({ user, url }: SendEmailParams) => {\n        if (!resend) {\n          return;\n        }\n        await resend.emails.send({\n          template: {\n            id: \"password-reset\",\n            variables: { name: user.name, url },\n          },\n          to: user.email,\n        });\n      },\n    },\n    emailVerification: {\n      autoSignInAfterVerification: true,\n      sendVerificationEmail: async ({ user, url }: SendEmailParams) => {\n        if (!resend) {\n          return;\n        }\n        await resend.emails.send({\n          template: {\n            id: \"email-verification\",\n            variables: { name: user.name, url },\n          },\n          to: user.email,\n        });\n      },\n    },\n    hooks: {\n      before: createAuthMiddleware(async (context) => {\n        if (context.path !== \"/sign-up/email\") {\n          return;\n        }\n        const email = extractSignUpEmail(context.body);\n        if (!email) {\n          return;\n        }\n        const existingUser = await context.context.adapter.findOne<User>({\n          model: \"user\",\n          where: [\n            { field: \"email\", value: email },\n            { field: \"emailVerified\", value: false },\n          ],\n        });\n        if (!existingUser) {\n          return;\n        }\n        await context.context.internalAdapter.deleteUser(existingUser.id);\n      }),\n    },\n    onAPIError: {\n      onError(error: unknown) {\n        if (typeof error !== \"object\" || error === null) {\n          return;\n        }\n        if (!(\"body\" in error) || typeof error.body !== \"object\" || error.body === null) {\n          return;\n        }\n        if (!(\"message\" in error.body) || typeof error.body.message !== \"string\") {\n          return;\n        }\n\n        if (error.body.message.toLowerCase().includes(\"invalid origin\")) {\n          writeAuthStderr(\n            \"A request has failed due to an origin mismatch. If this was meant to be a valid request, please set the `TRUSTED_ORIGINS` environment variable to include the origin you intend on accessing Keeper from.\\n\\nThis should be a comma-delimited array of values, for more information please refer to the documentation on GitHub. https://github.com/ridafkih/keeper.sh#accessing-keeper-from-non-localhost-urls\",\n          );\n        }\n      },\n    },\n    plugins,\n    secret,\n    socialProviders,\n    trustedOrigins,\n    user: {\n      deleteUser: {\n        afterDelete: async (user) => {\n          if (!polarClient) {\n            return;\n          }\n\n          await deletePolarCustomerByExternalId(polarClient, user.id);\n        },\n        enabled: true,\n      },\n    },\n  });\n\n  if (mcpOptions) {\n    const resourceClient = oauthProviderResourceClient();\n    const resourceActions = resourceClient.getActions();\n    const jwksUrl = `${baseUrl}/api/auth/jwks`;\n\n    if (!hasOAuthProviderApi(auth.api)) {\n      throw new Error(\"OAuth provider plugin did not register expected API methods\");\n    }\n\n    const oauthApi = auth.api;\n\n    Object.assign(auth.api, {\n      getMCPProtectedResource: () =>\n        resourceActions.getProtectedResourceMetadata(\n          mcpOptions.protectedResourceMetadata,\n        ),\n      getMcpOAuthConfig: () =>\n        oauthApi.getOAuthServerConfig({\n          headers: new Headers(),\n        }),\n      getMcpSession: async ({ headers }: { headers: Headers }) => {\n        const authorization = headers.get(\"authorization\");\n\n        if (!authorization?.startsWith(\"Bearer \")) {\n          return null;\n        }\n\n        const accessToken = authorization.slice(\"Bearer \".length).trim();\n\n        if (accessToken.length === 0) {\n          return null;\n        }\n\n        const jwt = await resourceActions.verifyAccessToken(accessToken, {\n          jwksUrl,\n          verifyOptions: {\n            audience: mcpOptions.oauthProvider.validAudiences,\n            issuer: `${baseUrl}/api/auth`,\n          },\n        });\n\n        const claims = mcpJwtClaimsSchema(jwt);\n\n        if (claims instanceof type.errors) {\n          throw new TypeError(`Invalid JWT claims: ${claims.summary}`);\n        }\n\n        return {\n          scopes: claims.scope,\n          userId: claims.sub,\n        };\n      },\n    } satisfies KeeperMcpAuthApi);\n  }\n\n  return { auth, capabilities, polarClient: polarClient ?? null };\n};\n\ntype KeeperMcpEnabledAuth<TAuth = ReturnType<typeof betterAuth>> = TAuth & {\n  api: KeeperMcpAuthApi;\n};\n\nconst isKeeperMcpEnabledAuth = <TAuth extends { api: object }>(\n  auth: TAuth,\n): auth is TAuth & { api: KeeperMcpAuthApi } => {\n  if (!(\"getMcpSession\" in auth.api)) {\n    return false;\n  }\n  if (!(\"getMCPProtectedResource\" in auth.api)) {\n    return false;\n  }\n  if (!(\"getMcpOAuthConfig\" in auth.api)) {\n    return false;\n  }\n  return true;\n};\n\ntype AuthResult = ReturnType<typeof createAuth>;\n\nexport {\n  createAuth,\n  hasOAuthProviderApi,\n  isKeeperMcpEnabledAuth,\n};\nexport { resolveAuthCapabilities } from \"./capabilities\";\nexport {\n  KEEPER_API_DEFAULT_SCOPE,\n  KEEPER_API_DESTINATION_SCOPE,\n  KEEPER_API_EVENT_SCOPE,\n  KEEPER_API_MAPPING_SCOPE,\n  KEEPER_API_READ_SCOPE,\n  KEEPER_API_RESOURCE_SCOPES,\n  KEEPER_API_SCOPES,\n  KEEPER_API_SOURCE_SCOPE,\n  KEEPER_API_SYNC_SCOPE,\n} from \"./mcp-config\";\nexport type {\n  AuthConfig,\n  AuthResult,\n  KeeperMcpAuthApi,\n  KeeperMcpAuthSession,\n  KeeperMcpEnabledAuth,\n};\n"
  },
  {
    "path": "packages/auth/src/mcp-config.ts",
    "content": "import {\n  KEEPER_API_DEFAULT_SCOPE,\n  KEEPER_API_DESTINATION_SCOPE,\n  KEEPER_API_EVENT_SCOPE,\n  KEEPER_API_MAPPING_SCOPE,\n  KEEPER_API_READ_SCOPE,\n  KEEPER_API_RESOURCE_SCOPES,\n  KEEPER_API_SCOPES,\n  KEEPER_API_SOURCE_SCOPE,\n  KEEPER_API_SYNC_SCOPE,\n} from \"@keeper.sh/constants\";\n\nconst KEEPER_MCP_OAUTH_SCOPES = [\n  \"openid\",\n  \"profile\",\n  \"email\",\n  \"offline_access\",\n  ...KEEPER_API_RESOURCE_SCOPES,\n];\n\ninterface ResolveMcpAuthOptionsInput {\n  resourceBaseUrl?: string;\n  webBaseUrl?: string;\n}\n\nconst MCP_ACCESS_TOKEN_EXPIRES_IN = 2_592_000;\nconst MCP_REFRESH_TOKEN_EXPIRES_IN = 7_776_000;\n\ninterface ResolvedMcpAuthOptions {\n  oauthProvider: {\n    accessTokenExpiresIn: number;\n    refreshTokenExpiresIn: number;\n    allowDynamicClientRegistration: true;\n    allowUnauthenticatedClientRegistration: true;\n    clientRegistrationAllowedScopes: string[];\n    clientRegistrationDefaultScopes: string[];\n    consentPage: string;\n    loginPage: string;\n    scopes: string[];\n    silenceWarnings: {\n      oauthAuthServerConfig: boolean;\n    };\n    validAudiences: string[];\n  };\n  protectedResourceMetadata: {\n    resource: string;\n    scopes_supported: string[];\n  };\n}\n\nconst resolveAbsoluteUrl = (pathname: string, baseUrl: string): string =>\n  new URL(pathname, baseUrl).toString();\n\nconst normalizeUrl = (url: string): string =>\n  url.replace(/\\/$/, \"\");\n\nconst resolveValidAudiences = (resourceBaseUrl: string): string[] => {\n  const normalized = normalizeUrl(resourceBaseUrl);\n  const { origin } = new URL(resourceBaseUrl);\n  const audiences = new Set([origin, normalized]);\n  return [...audiences];\n};\n\nconst resolveMcpAuthOptions = (\n  input: ResolveMcpAuthOptionsInput,\n): ResolvedMcpAuthOptions | null => {\n  if (!input.webBaseUrl || !input.resourceBaseUrl) {\n    return null;\n  }\n\n  const resourceUrl = normalizeUrl(input.resourceBaseUrl);\n\n  return {\n    oauthProvider: {\n      accessTokenExpiresIn: MCP_ACCESS_TOKEN_EXPIRES_IN,\n      refreshTokenExpiresIn: MCP_REFRESH_TOKEN_EXPIRES_IN,\n      allowDynamicClientRegistration: true,\n      allowUnauthenticatedClientRegistration: true,\n      clientRegistrationAllowedScopes: KEEPER_MCP_OAUTH_SCOPES,\n      clientRegistrationDefaultScopes: [\"offline_access\", ...KEEPER_API_RESOURCE_SCOPES],\n      consentPage: resolveAbsoluteUrl(\"/oauth/consent\", input.webBaseUrl),\n      loginPage: resolveAbsoluteUrl(\"/login\", input.webBaseUrl),\n      scopes: KEEPER_MCP_OAUTH_SCOPES,\n      silenceWarnings: {\n        oauthAuthServerConfig: true,\n      },\n      validAudiences: resolveValidAudiences(input.resourceBaseUrl),\n    },\n    protectedResourceMetadata: {\n      resource: resourceUrl,\n      scopes_supported: KEEPER_API_RESOURCE_SCOPES,\n    },\n  };\n};\n\nexport {\n  KEEPER_API_DEFAULT_SCOPE,\n  KEEPER_API_DESTINATION_SCOPE,\n  KEEPER_API_EVENT_SCOPE,\n  KEEPER_API_MAPPING_SCOPE,\n  KEEPER_API_READ_SCOPE,\n  KEEPER_API_RESOURCE_SCOPES,\n  KEEPER_API_SCOPES,\n  KEEPER_API_SOURCE_SCOPE,\n  KEEPER_API_SYNC_SCOPE,\n  KEEPER_MCP_OAUTH_SCOPES,\n  resolveMcpAuthOptions,\n};\nexport type { ResolvedMcpAuthOptions, ResolveMcpAuthOptionsInput };\n"
  },
  {
    "path": "packages/auth/src/plugins/username-only/endpoints/sign-in.ts",
    "content": "import { createAuthEndpoint } from \"better-auth/api\";\nimport { APIError } from \"better-call\";\nimport { z } from \"zod\";\nimport type { CredentialAccount, User } from \"../types\";\n\nconst INVALID_CREDENTIALS_ERROR = {\n  message: \"invalid username or password\",\n};\n\nconst createSignInEndpoint = () =>\n  createAuthEndpoint(\n    \"/username-only/sign-in\",\n    {\n      body: z.object({\n        password: z.string(),\n        username: z.string().regex(/^[a-zA-Z0-9._-]+$/),\n      }),\n      method: \"POST\",\n    },\n    async (context) => {\n      const { username, password } = context.body;\n\n      const user = await context.context.adapter.findOne<User>({\n        model: \"user\",\n        where: [{ field: \"username\", value: username }],\n      });\n\n      if (!user) {\n        throw new APIError(\"UNAUTHORIZED\", INVALID_CREDENTIALS_ERROR);\n      }\n\n      const account = await context.context.adapter.findOne<CredentialAccount>({\n        model: \"account\",\n        where: [\n          { field: \"userId\", value: user.id },\n          { field: \"providerId\", value: \"credential\" },\n        ],\n      });\n\n      if (!account?.password) {\n        throw new APIError(\"UNAUTHORIZED\", INVALID_CREDENTIALS_ERROR);\n      }\n\n      const valid = await context.context.password.verify({\n        hash: account.password,\n        password,\n      });\n\n      if (!valid) {\n        throw new APIError(\"UNAUTHORIZED\", INVALID_CREDENTIALS_ERROR);\n      }\n\n      const session = await context.context.internalAdapter.createSession(user.id, false);\n\n      await context.setSignedCookie(\n        context.context.authCookies.sessionToken.name,\n        session.token,\n        context.context.secret,\n        context.context.authCookies.sessionToken.attributes,\n      );\n\n      return context.json({ session, user });\n    },\n  );\n\nexport { createSignInEndpoint };\n"
  },
  {
    "path": "packages/auth/src/plugins/username-only/endpoints/sign-up.ts",
    "content": "import { createAuthEndpoint } from \"better-auth/api\";\nimport { APIError } from \"better-call\";\nimport { z } from \"zod\";\nimport type { UsernameOnlyConfig } from \"../utils/config\";\nimport type { User } from \"../types\";\n\nconst createSignUpEndpoint = (config: UsernameOnlyConfig) =>\n  createAuthEndpoint(\n    \"/username-only/sign-up\",\n    {\n      body: z.object({\n        name: z.string().optional(),\n        password: z.string().min(config.minPasswordLength).max(config.maxPasswordLength),\n        username: z\n          .string()\n          .min(config.minUsernameLength)\n          .max(config.maxUsernameLength)\n          .regex(\n            /^[a-zA-Z0-9._-]+$/,\n            \"username can only contain letters, numbers, dots, underscores, and hyphens\",\n          ),\n      }),\n      method: \"POST\",\n    },\n    async (context) => {\n      const { username, password, name } = context.body;\n\n      const existingUser = await context.context.adapter.findOne<User>({\n        model: \"user\",\n        where: [{ field: \"username\", value: username }],\n      });\n\n      if (existingUser) {\n        throw new APIError(\"BAD_REQUEST\", {\n          message: \"username already taken\",\n        });\n      }\n\n      const hashedPassword = await context.context.password.hash(password);\n\n      const user = await context.context.adapter.create<User>({\n        data: {\n          createdAt: new Date(),\n          email: `${username}@local`,\n          emailVerified: true,\n          name: name ?? username,\n          updatedAt: new Date(),\n          username,\n        },\n        model: \"user\",\n      });\n\n      await context.context.adapter.create({\n        data: {\n          accountId: user.id,\n          createdAt: new Date(),\n          password: hashedPassword,\n          providerId: \"credential\",\n          updatedAt: new Date(),\n          userId: user.id,\n        },\n        model: \"account\",\n      });\n\n      const session = await context.context.internalAdapter.createSession(user.id, false);\n\n      await context.setSignedCookie(\n        context.context.authCookies.sessionToken.name,\n        session.token,\n        context.context.secret,\n        context.context.authCookies.sessionToken.attributes,\n      );\n\n      return context.json({ session, user });\n    },\n  );\n\nexport { createSignUpEndpoint };\n"
  },
  {
    "path": "packages/auth/src/plugins/username-only/index.ts",
    "content": "import type { BetterAuthPlugin } from \"better-auth\";\nimport { resolveConfig } from \"./utils/config\";\nimport type { UsernameOnlyOptions } from \"./utils/config\";\nimport { schema } from \"./utils/schema\";\nimport { createSignUpEndpoint } from \"./endpoints/sign-up\";\nimport { createSignInEndpoint } from \"./endpoints/sign-in\";\n\nconst usernameOnly = (options?: UsernameOnlyOptions): BetterAuthPlugin => {\n  const config = resolveConfig(options);\n\n  return {\n    endpoints: {\n      signInUsername: createSignInEndpoint(),\n      signUpUsername: createSignUpEndpoint(config),\n    },\n    id: \"username-only\",\n    schema,\n  };\n};\n\nexport { usernameOnly };\nexport type { UsernameOnlyOptions };\n"
  },
  {
    "path": "packages/auth/src/plugins/username-only/types.ts",
    "content": "interface User {\n  id: string;\n  username: string;\n  name: string;\n  email: string;\n  emailVerified: boolean;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\ninterface CredentialAccount {\n  id: string;\n  userId: string;\n  accountId: string;\n  providerId: \"credential\";\n  password: string;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\nexport type { User, CredentialAccount };\n"
  },
  {
    "path": "packages/auth/src/plugins/username-only/utils/config.ts",
    "content": "interface UsernameOnlyOptions {\n  minUsernameLength?: number;\n  maxUsernameLength?: number;\n  minPasswordLength?: number;\n  maxPasswordLength?: number;\n}\n\ntype UsernameOnlyConfig = Required<UsernameOnlyOptions>;\n\nconst defaultOptions: UsernameOnlyConfig = {\n  maxPasswordLength: 128,\n  maxUsernameLength: 32,\n  minPasswordLength: 8,\n  minUsernameLength: 3,\n};\n\nconst resolveConfig = (options?: UsernameOnlyOptions): UsernameOnlyConfig => ({\n  ...defaultOptions,\n  ...options,\n});\n\nexport { resolveConfig };\nexport type { UsernameOnlyOptions, UsernameOnlyConfig };\n"
  },
  {
    "path": "packages/auth/src/plugins/username-only/utils/schema.ts",
    "content": "import type { BetterAuthPlugin } from \"better-auth\";\n\nexport const schema: BetterAuthPlugin[\"schema\"] = {\n  user: {\n    fields: {\n      username: {\n        required: true,\n        type: \"string\",\n        unique: true,\n      },\n    },\n  },\n};\n"
  },
  {
    "path": "packages/auth/src/polar-customer-delete.ts",
    "content": "import { writeAuthStderr } from \"./runtime-environment\";\n\ninterface PolarCustomerDeletionClient {\n  customers: {\n    deleteExternal: (payload: { externalId: string }) => Promise<unknown>;\n  };\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst isResourceNotFoundError = (error: unknown): boolean => {\n  if (!isRecord(error)) {\n    return false;\n  }\n\n  return error.error === \"ResourceNotFound\";\n};\n\nconst toErrorMessage = (error: unknown): string => {\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  if (isRecord(error) && typeof error.detail === \"string\") {\n    return error.detail;\n  }\n\n  return \"Unknown error\";\n};\n\nconst deletePolarCustomerByExternalId = async (\n  polarClient: PolarCustomerDeletionClient,\n  externalId: string,\n): Promise<void> => {\n  try {\n    await polarClient.customers.deleteExternal({\n      externalId,\n    });\n  } catch (error) {\n    if (isResourceNotFoundError(error)) {\n      return;\n    }\n\n    writeAuthStderr(\n      `[auth] Failed to delete Polar customer for user ${externalId}: ${toErrorMessage(error)}\\n`,\n    );\n  }\n};\n\nexport { deletePolarCustomerByExternalId };\nexport type { PolarCustomerDeletionClient };\n"
  },
  {
    "path": "packages/auth/src/runtime-environment.ts",
    "content": "const getRuntimeEnvironment = (): string | undefined =>\n  process.env.ENV ?? process.env.NODE_ENV ?? globalThis.undefined;\n\nconst isTestEnvironment = (): boolean => getRuntimeEnvironment() === \"test\";\n\nconst writeAuthStderr = (message: string): void => {\n  if (isTestEnvironment()) {\n    return;\n  }\n\n  process.stderr.write(message);\n};\n\nexport { getRuntimeEnvironment, isTestEnvironment, writeAuthStderr };\n"
  },
  {
    "path": "packages/auth/tests/capabilities.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { resolveAuthCapabilities } from \"../src/capabilities\";\n\ndescribe(\"resolveAuthCapabilities\", () => {\n  it(\"uses username auth in non-commercial mode while preserving configured socials\", () => {\n    const capabilities = resolveAuthCapabilities({\n      commercialMode: false,\n      googleClientId: \"google-client-id\",\n      googleClientSecret: \"google-client-secret\",\n      microsoftClientId: \"microsoft-client-id\",\n      microsoftClientSecret: \"microsoft-client-secret\",\n      passkeyOrigin: \"https://keeper.sh\",\n      passkeyRpId: \"keeper.sh\",\n    });\n\n    expect(capabilities).toEqual({\n      commercialMode: false,\n      credentialMode: \"username\",\n      requiresEmailVerification: false,\n      socialProviders: {\n        google: true,\n        microsoft: true,\n      },\n      supportsChangePassword: true,\n      supportsPasskeys: false,\n      supportsPasswordReset: false,\n    });\n  });\n\n  it(\"enables email auth, passkeys, and configured socials in commercial mode\", () => {\n    const capabilities = resolveAuthCapabilities({\n      commercialMode: true,\n      googleClientId: \"google-client-id\",\n      googleClientSecret: \"google-client-secret\",\n      microsoftClientId: \"microsoft-client-id\",\n      microsoftClientSecret: \"microsoft-client-secret\",\n      passkeyOrigin: \"https://keeper.sh\",\n      passkeyRpId: \"keeper.sh\",\n    });\n\n    expect(capabilities).toEqual({\n      commercialMode: true,\n      credentialMode: \"email\",\n      requiresEmailVerification: true,\n      socialProviders: {\n        google: true,\n        microsoft: true,\n      },\n      supportsChangePassword: true,\n      supportsPasskeys: true,\n      supportsPasswordReset: true,\n    });\n  });\n});\n"
  },
  {
    "path": "packages/auth/tests/mcp-config.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  KEEPER_API_DEFAULT_SCOPE,\n  KEEPER_API_READ_SCOPE,\n  KEEPER_API_RESOURCE_SCOPES,\n  KEEPER_API_SCOPES,\n  KEEPER_MCP_OAUTH_SCOPES,\n  resolveMcpAuthOptions,\n} from \"../src/mcp-config\";\n\ndescribe(\"resolveMcpAuthOptions\", () => {\n  it(\"builds Keeper OAuth provider settings from the Keeper web and MCP URLs\", () => {\n    expect(\n      resolveMcpAuthOptions({\n        resourceBaseUrl: \"https://mcp.keeper.sh\",\n        webBaseUrl: \"https://app.keeper.sh\",\n      }),\n    ).toEqual({\n      oauthProvider: {\n        accessTokenExpiresIn: 2_592_000,\n        refreshTokenExpiresIn: 7_776_000,\n        allowDynamicClientRegistration: true,\n        allowUnauthenticatedClientRegistration: true,\n        clientRegistrationAllowedScopes: KEEPER_MCP_OAUTH_SCOPES,\n        clientRegistrationDefaultScopes: [\"offline_access\", ...KEEPER_API_RESOURCE_SCOPES],\n        consentPage: \"https://app.keeper.sh/oauth/consent\",\n        loginPage: \"https://app.keeper.sh/login\",\n        scopes: KEEPER_MCP_OAUTH_SCOPES,\n        silenceWarnings: {\n          oauthAuthServerConfig: true,\n        },\n        validAudiences: [\"https://mcp.keeper.sh\"],\n      },\n      protectedResourceMetadata: {\n        resource: \"https://mcp.keeper.sh\",\n        scopes_supported: KEEPER_API_RESOURCE_SCOPES,\n      },\n    });\n  });\n\n  it(\"returns null when Keeper does not know both the web and MCP URLs\", () => {\n    expect(\n      resolveMcpAuthOptions({\n        resourceBaseUrl: \"https://mcp.keeper.sh\",\n      }),\n    ).toBeNull();\n\n    expect(\n      resolveMcpAuthOptions({\n        webBaseUrl: \"https://app.keeper.sh\",\n      }),\n    ).toBeNull();\n  });\n\n  it(\"keeps keeper.read inside the supported scope list and default scope\", () => {\n    expect(KEEPER_API_SCOPES).toContain(KEEPER_API_READ_SCOPE);\n    expect(KEEPER_API_DEFAULT_SCOPE.split(\" \")).toContain(KEEPER_API_READ_SCOPE);\n    expect(KEEPER_API_RESOURCE_SCOPES).toContain(KEEPER_API_READ_SCOPE);\n  });\n\n  it(\"supports offline_access for refresh tokens without advertising it as a resource scope\", () => {\n    expect(KEEPER_MCP_OAUTH_SCOPES).toContain(\"offline_access\");\n    expect(KEEPER_API_RESOURCE_SCOPES).not.toContain(\"offline_access\");\n    expect(KEEPER_API_DEFAULT_SCOPE.split(\" \")).toContain(\"offline_access\");\n  });\n});\n"
  },
  {
    "path": "packages/auth/tests/polar-customer-delete.test.ts",
    "content": "import { describe, expect, it, vi } from \"vitest\";\nimport { deletePolarCustomerByExternalId } from \"../src/polar-customer-delete\";\n\ndescribe(\"deletePolarCustomerByExternalId\", () => {\n  it(\"ignores ResourceNotFound responses from Polar\", () => {\n    const resourceNotFoundError = Object.assign(new Error(\"Not found\"), {\n      detail: \"Not found\",\n      error: \"ResourceNotFound\",\n    });\n    const deleteExternal = vi.fn(() => Promise.reject(resourceNotFoundError));\n\n    expect(\n      deletePolarCustomerByExternalId(\n        { customers: { deleteExternal } },\n        \"user-1\",\n      ),\n    ).resolves.toBeUndefined();\n\n    expect(deleteExternal).toHaveBeenCalledTimes(1);\n    expect(deleteExternal).toHaveBeenCalledWith({ externalId: \"user-1\" });\n  });\n\n  it(\"does not throw when Polar deletion fails unexpectedly\", () => {\n    const deleteExternal = vi.fn(() => Promise.reject(new Error(\"polar unavailable\")));\n\n    expect(\n      deletePolarCustomerByExternalId(\n        { customers: { deleteExternal } },\n        \"user-1\",\n      ),\n    ).resolves.toBeUndefined();\n  });\n\n  it(\"does not write to stderr during tests when deletion fails unexpectedly\", () => {\n    const deleteExternal = vi.fn(() => Promise.reject(new Error(\"polar unavailable\")));\n    const stderrWrite = vi.fn(() => true);\n    const originalNodeEnv = process.env.NODE_ENV;\n    const originalStderrWrite = process.stderr.write.bind(process.stderr);\n\n    process.env.NODE_ENV = \"test\";\n    process.stderr.write = stderrWrite;\n\n    try {\n      expect(\n        deletePolarCustomerByExternalId(\n          { customers: { deleteExternal } },\n          \"user-1\",\n        ),\n      ).resolves.toBeUndefined();\n\n      expect(stderrWrite).not.toHaveBeenCalled();\n    } finally {\n      process.env.NODE_ENV = originalNodeEnv;\n      process.stderr.write = originalStderrWrite;\n    }\n  });\n});\n"
  },
  {
    "path": "packages/auth/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/auth/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/broadcast/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/broadcast\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"ioredis\": \"^5.10.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/broadcast/src/index.ts",
    "content": "import { broadcastMessageSchema } from \"@keeper.sh/data-schemas\";\nimport type { BroadcastMessage } from \"@keeper.sh/data-schemas\";\nimport { connections } from \"./state\";\nimport type { Socket } from \"./types\";\nimport type Redis from \"ioredis\";\n\nconst EMPTY_CONNECTIONS_COUNT = 0;\nconst IDLE_TIMEOUT_SECONDS = 60;\n\ntype OnConnectCallback = (userId: string, socket: Socket) => void | Promise<void>;\n\ninterface WebsocketHandlerOptions {\n  onConnect?: OnConnectCallback;\n}\n\ninterface BroadcastConfig {\n  redis: Redis;\n}\n\ninterface BroadcastService {\n  emit: (userId: string, eventName: string, data: unknown) => void;\n  startSubscriber: () => Promise<void>;\n}\n\nconst CHANNEL = \"broadcast\";\n\nconst sendToUser = (userId: string, eventName: string, data: unknown): void => {\n  const userConnections = connections.get(userId);\n\n  if (!userConnections || userConnections.size === EMPTY_CONNECTIONS_COUNT) {\n    return;\n  }\n\n  const message = JSON.stringify({ data, event: eventName });\n  for (const socket of userConnections) {\n    socket.send(message);\n  }\n};\n\nconst createBroadcastService = (config: BroadcastConfig): BroadcastService => {\n  const { redis } = config;\n\n  const emit = (userId: string, eventName: string, data: unknown): void => {\n    const message: BroadcastMessage = { data, event: eventName, userId };\n    redis.publish(CHANNEL, JSON.stringify(message));\n  };\n\n  const startSubscriber = async (): Promise<void> => {\n    const subscriber = redis.duplicate();\n\n    subscriber.on(\"message\", (channel: string, message: string) => {\n      if (channel !== CHANNEL) {\n        return;\n      }\n      const parsed = JSON.parse(message);\n      if (!broadcastMessageSchema.allows(parsed)) {\n        return;\n      }\n      sendToUser(parsed.userId, parsed.event, parsed.data);\n    });\n\n    await subscriber.subscribe(CHANNEL);\n  };\n\n  return { emit, startSubscriber };\n};\n\nconst addConnection = (userId: string, socket: Socket): void => {\n  const existing = connections.get(userId);\n\n  if (existing) {\n    existing.add(socket);\n    return;\n  }\n\n  connections.set(userId, new Set([socket]));\n};\n\nconst removeConnection = (userId: string, socket: Socket): void => {\n  const userConnections = connections.get(userId);\n  if (userConnections) {\n    userConnections.delete(socket);\n    if (userConnections.size === EMPTY_CONNECTIONS_COUNT) {\n      connections.delete(userId);\n    }\n  }\n};\n\nconst getConnectionCount = (userId: string): number =>\n  connections.get(userId)?.size ?? EMPTY_CONNECTIONS_COUNT;\n\nconst createWebsocketHandler = (\n  options?: WebsocketHandlerOptions,\n): {\n  close: (socket: Socket) => void;\n  idleTimeout: number;\n  message: (socket: Socket, message: string | Buffer) => void;\n  open: (socket: Socket) => Promise<void>;\n} => ({\n  close(socket: Socket): void {\n    const { userId } = socket.data;\n    removeConnection(userId, socket);\n  },\n  idleTimeout: IDLE_TIMEOUT_SECONDS,\n  message: (): null => null,\n  async open(socket: Socket): Promise<void> {\n    const { userId } = socket.data;\n\n    addConnection(userId, socket);\n    try {\n      await options?.onConnect?.(userId, socket);\n    } catch {\n      if (socket.readyState !== 3) {\n        socket.close();\n      }\n    }\n  },\n});\n\nexport {\n  createBroadcastService,\n  addConnection,\n  removeConnection,\n  getConnectionCount,\n  createWebsocketHandler,\n};\nexport type { BroadcastData, Socket } from \"./types\";\nexport type { OnConnectCallback, WebsocketHandlerOptions, BroadcastConfig, BroadcastService };\n"
  },
  {
    "path": "packages/broadcast/src/state.ts",
    "content": "import type { Socket } from \"./types\";\n\nconst connections = new Map<string, Set<Socket>>();\nexport { connections };\n"
  },
  {
    "path": "packages/broadcast/src/types.ts",
    "content": "import type { ServerWebSocket } from \"bun\";\n\ninterface BroadcastData {\n  userId: string;\n}\n\ntype Socket = ServerWebSocket<BroadcastData>;\n\nexport type { BroadcastData, Socket };\n"
  },
  {
    "path": "packages/broadcast/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/calendar/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/calendar\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./caldav\": \"./src/providers/caldav/index.ts\",\n    \"./google\": \"./src/providers/google/index.ts\",\n    \"./outlook\": \"./src/providers/outlook/index.ts\",\n    \"./fastmail\": \"./src/providers/fastmail/index.ts\",\n    \"./icloud\": \"./src/providers/icloud/index.ts\",\n    \"./ics\": \"./src/ics/index.ts\",\n    \"./safe-fetch\": \"./src/utils/safe-fetch.ts\",\n    \"./digest-fetch\": \"./src/providers/caldav/shared/digest-fetch.ts\"\n  },\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"TZ=UTC bun x --bun vitest run\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/constants\": \"workspace:*\",\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"@keeper.sh/digest-fetch\": \"workspace:*\",\n    \"drizzle-orm\": \"^0.45.1\",\n    \"ioredis\": \"^5.10.0\",\n    \"ipaddr.js\": \"^2.3.0\",\n    \"tldts\": \"^7.0.27\",\n    \"ts-ics\": \"^2.4.3\",\n    \"tsdav\": \"^2.1.8\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/fixtures\": \"workspace:*\",\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "packages/calendar/src/core/events/all-day.ts",
    "content": "interface AllDayEventShape {\n  startTime: Date;\n  endTime: Date;\n  isAllDay?: boolean;\n}\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nconst isMidnightUtc = (value: Date): boolean =>\n  value.getUTCHours() === 0\n  && value.getUTCMinutes() === 0\n  && value.getUTCSeconds() === 0\n  && value.getUTCMilliseconds() === 0;\n\nconst inferAllDayEvent = ({ startTime, endTime }: Omit<AllDayEventShape, \"isAllDay\">): boolean => {\n  const durationMs = endTime.getTime() - startTime.getTime();\n\n  if (durationMs <= 0 || durationMs % MS_PER_DAY !== 0) {\n    return false;\n  }\n\n  return isMidnightUtc(startTime) && isMidnightUtc(endTime);\n};\n\nconst resolveIsAllDayEvent = ({ isAllDay, startTime, endTime }: AllDayEventShape): boolean => {\n  if (typeof isAllDay === \"boolean\") {\n    return isAllDay;\n  }\n\n  return inferAllDayEvent({ endTime, startTime });\n};\n\nexport { inferAllDayEvent, resolveIsAllDayEvent };\nexport type { AllDayEventShape };\n"
  },
  {
    "path": "packages/calendar/src/core/events/content-hash.ts",
    "content": "import type { SyncableEvent } from \"../types\";\nimport { resolveIsAllDayEvent } from \"./all-day\";\n\ntype SyncableEventContent = Pick<SyncableEvent, \"summary\" | \"description\" | \"location\">\n  & Partial<Pick<SyncableEvent, \"availability\" | \"isAllDay\" | \"startTime\" | \"endTime\">>;\n\nconst normalizeText = (value?: string): string => value?.trim() ?? \"\";\nconst normalizeAvailability = (value?: SyncableEvent[\"availability\"]): string => value ?? \"\";\nconst resolveHashedAllDay = (event: SyncableEventContent): boolean => {\n  if (event.startTime && event.endTime) {\n    return resolveIsAllDayEvent({\n      endTime: event.endTime,\n      isAllDay: event.isAllDay,\n      startTime: event.startTime,\n    });\n  }\n\n  return event.isAllDay ?? false;\n};\n\nconst createSyncEventContentHash = (event: SyncableEventContent): string => {\n  const payload = JSON.stringify([\n    normalizeText(event.summary),\n    normalizeText(event.description),\n    normalizeText(event.location),\n    normalizeAvailability(event.availability),\n    resolveHashedAllDay(event),\n  ]);\n\n  return new Bun.CryptoHasher(\"sha256\").update(payload).digest(\"hex\");\n};\n\nexport { createSyncEventContentHash };\nexport type { SyncableEventContent };\n"
  },
  {
    "path": "packages/calendar/src/core/events/events.ts",
    "content": "import {\n  calendarsTable,\n  eventStatesTable,\n  sourceDestinationMappingsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, asc, eq, gte, inArray, isNotNull, or } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { EventAvailability, SourceEventType, SyncableEvent } from \"../types\";\nimport { getOAuthSyncWindowStart } from \"../oauth/sync-window\";\nimport {\n  hasActiveFutureOccurrence,\n  parseExceptionDatesFromJson,\n  parseRecurrenceRuleFromJson,\n} from \"./recurrence\";\n\nconst EMPTY_SOURCES_COUNT = 0;\n\nconst orAbsent = <TValue>(value: TValue | null): TValue | undefined => {\n  if (value === null) {\n    return;\n  }\n  return value;\n};\n\nconst excludeOrAbsent = <TValue>(exclude: boolean, value: TValue | null): TValue | undefined => {\n  if (exclude) {\n    return;\n  }\n  return orAbsent(value);\n};\n\nconst orAbsentBoolean = (value: boolean | null): boolean | undefined => {\n  if (value === null) {\n    return;\n  }\n  return value;\n};\n\nconst isEventAvailability = (value: string | null): value is EventAvailability =>\n  value === \"busy\"\n  || value === \"free\"\n  || value === \"oof\"\n  || value === \"workingElsewhere\";\n\nconst parseAvailability = (value: string | null): EventAvailability | undefined => {\n  if (!isEventAvailability(value)) {\n    return;\n  }\n\n  return value;\n};\nconst parseSourceEventType = (\n  value: string | null,\n  availability: string | null,\n): SourceEventType => {\n  if (value === \"focusTime\" || value === \"outOfOffice\" || value === \"workingLocation\") {\n    return value;\n  }\n\n  if (availability === \"workingElsewhere\") {\n    return \"workingLocation\";\n  }\n\n  if (availability === \"oof\") {\n    return \"outOfOffice\";\n  }\n\n  return \"default\";\n};\n\nconst shouldExcludeSyncEvent = (event: {\n  excludeAllDayEvents: boolean;\n  excludeFocusTime: boolean;\n  excludeOutOfOffice: boolean;\n  availability: string | null;\n  isAllDay: boolean | null;\n  sourceEventType: string | null;\n}): boolean => {\n  const sourceEventType = parseSourceEventType(event.sourceEventType, event.availability);\n\n  if (sourceEventType === \"workingLocation\") {\n    return true;\n  }\n  if (event.excludeAllDayEvents && event.isAllDay) {\n    return true;\n  }\n  if (event.excludeFocusTime && sourceEventType === \"focusTime\") {\n    return true;\n  }\n  if (event.excludeOutOfOffice && sourceEventType === \"outOfOffice\") {\n    return true;\n  }\n\n  return false;\n};\nconst TEMPLATE_TOKEN_PATTERN = /\\{\\{(\\w+)\\}\\}/g;\nconst DEFAULT_EVENT_NAME = \"Busy\";\nconst DEFAULT_EVENT_NAME_TEMPLATE = \"{{calendar_name}}\";\nconst resolveEventNameTemplate = (\n  template: string,\n  variables: Record<string, string>,\n): string => {\n  const resolved = template.replace(\n    TEMPLATE_TOKEN_PATTERN,\n    (token, variableName) => variables[variableName] ?? token,\n  ).trim();\n\n  return resolved || variables.calendar_name || DEFAULT_EVENT_NAME;\n};\n\nconst getMappedSourceCalendarIds = async (\n  database: BunSQLDatabase,\n  destinationCalendarId: string,\n): Promise<string[]> => {\n  const mappings = await database\n    .select({ sourceCalendarId: sourceDestinationMappingsTable.sourceCalendarId })\n    .from(sourceDestinationMappingsTable)\n    .where(eq(sourceDestinationMappingsTable.destinationCalendarId, destinationCalendarId));\n\n  return mappings.map((mapping) => mapping.sourceCalendarId);\n};\n\nconst fetchEventsForCalendars = async (\n  database: BunSQLDatabase,\n  calendarIds: string[],\n): Promise<SyncableEvent[]> => {\n  if (calendarIds.length === EMPTY_SOURCES_COUNT) {\n    return [];\n  }\n\n  const syncWindowStart = getOAuthSyncWindowStart();\n\n  const results = await database\n    .select({\n      calendarId: eventStatesTable.calendarId,\n      calendarName: calendarsTable.name,\n      calendarUrl: calendarsTable.url,\n      customEventName: calendarsTable.customEventName,\n      excludeAllDayEvents: calendarsTable.excludeAllDayEvents,\n      excludeEventDescription: calendarsTable.excludeEventDescription,\n      excludeEventLocation: calendarsTable.excludeEventLocation,\n      excludeEventName: calendarsTable.excludeEventName,\n      excludeFocusTime: calendarsTable.excludeFocusTime,\n      excludeOutOfOffice: calendarsTable.excludeOutOfOffice,\n      availability: eventStatesTable.availability,\n      description: eventStatesTable.description,\n      endTime: eventStatesTable.endTime,\n      exceptionDates: eventStatesTable.exceptionDates,\n      id: eventStatesTable.id,\n      isAllDay: eventStatesTable.isAllDay,\n      location: eventStatesTable.location,\n      recurrenceRule: eventStatesTable.recurrenceRule,\n      sourceEventType: eventStatesTable.sourceEventType,\n      sourceEventUid: eventStatesTable.sourceEventUid,\n      startTime: eventStatesTable.startTime,\n      startTimeZone: eventStatesTable.startTimeZone,\n      title: eventStatesTable.title,\n    })\n    .from(eventStatesTable)\n    .innerJoin(calendarsTable, eq(eventStatesTable.calendarId, calendarsTable.id))\n    .where(\n      and(\n        inArray(eventStatesTable.calendarId, calendarIds),\n        or(\n          gte(eventStatesTable.startTime, syncWindowStart),\n          isNotNull(eventStatesTable.recurrenceRule),\n        ),\n      ),\n    )\n    .orderBy(asc(eventStatesTable.startTime));\n\n  const syncableEvents: SyncableEvent[] = [];\n\n  for (const result of results) {\n    if (result.sourceEventUid === null) {\n      continue;\n    }\n    if (shouldExcludeSyncEvent(result)) {\n      continue;\n    }\n\n    const parsedRecurrenceRule = parseRecurrenceRuleFromJson(result.recurrenceRule);\n    const parsedExceptionDates = parseExceptionDatesFromJson(result.exceptionDates);\n\n    if (\n      result.startTime < syncWindowStart\n      && !hasActiveFutureOccurrence(\n        result.startTime,\n        parsedRecurrenceRule,\n        parsedExceptionDates,\n        syncWindowStart,\n      )\n    ) {\n      continue;\n    }\n\n    const eventName = result.title ?? DEFAULT_EVENT_NAME;\n    const {calendarName} = result;\n    const template = result.customEventName || DEFAULT_EVENT_NAME_TEMPLATE;\n\n    let summary = eventName;\n    if (result.excludeEventName) {\n      summary = resolveEventNameTemplate(template, {\n        calendar_name: calendarName,\n        event_name: eventName,\n      });\n    }\n\n    syncableEvents.push({\n      calendarId: result.calendarId,\n      calendarName: result.calendarName,\n      calendarUrl: result.calendarUrl,\n      availability: parseAvailability(result.availability),\n      description: excludeOrAbsent(result.excludeEventDescription, result.description),\n      endTime: result.endTime,\n      id: result.id,\n      isAllDay: orAbsentBoolean(result.isAllDay),\n      location: excludeOrAbsent(result.excludeEventLocation, result.location),\n      exceptionDates: parsedExceptionDates,\n      recurrenceRule: orAbsent(parsedRecurrenceRule),\n      sourceEventUid: result.sourceEventUid,\n      startTime: result.startTime,\n      startTimeZone: orAbsent(result.startTimeZone),\n      summary,\n    });\n  }\n\n  return syncableEvents;\n};\n\nconst getEventsForDestination = async (\n  database: BunSQLDatabase,\n  destinationCalendarId: string,\n): Promise<SyncableEvent[]> => {\n  const sourceCalendarIds = await getMappedSourceCalendarIds(database, destinationCalendarId);\n\n  if (sourceCalendarIds.length === EMPTY_SOURCES_COUNT) {\n    return [];\n  }\n\n  return fetchEventsForCalendars(database, sourceCalendarIds);\n};\n\nexport { getEventsForDestination, shouldExcludeSyncEvent };\n"
  },
  {
    "path": "packages/calendar/src/core/events/identity.ts",
    "content": "import { KEEPER_EVENT_SUFFIX } from \"@keeper.sh/constants\";\n\nconst generateDeterministicEventUid = (seed: string): string => {\n  const hash = new Bun.CryptoHasher(\"sha256\").update(seed).digest(\"hex\").slice(0, 32);\n  return `${hash}${KEEPER_EVENT_SUFFIX}`;\n};\n\nconst isKeeperEvent = (uid: string): boolean => uid.endsWith(KEEPER_EVENT_SUFFIX);\n\nexport { generateDeterministicEventUid, isKeeperEvent };\n"
  },
  {
    "path": "packages/calendar/src/core/events/mappings.ts",
    "content": "import { eventMappingsTable } from \"@keeper.sh/database/schema\";\nimport { and, count, eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\nconst DEFAULT_COUNT = 0;\n\ninterface EventMapping {\n  id: string;\n  eventStateId: string;\n  calendarId: string;\n  destinationEventUid: string;\n  deleteIdentifier: string;\n  syncEventHash: string | null;\n  startTime: Date;\n  endTime: Date;\n}\n\nconst getEventMappingsForDestination = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n): Promise<EventMapping[]> => {\n  const mappings = await database\n    .select({\n      calendarId: eventMappingsTable.calendarId,\n      deleteIdentifier: eventMappingsTable.deleteIdentifier,\n      destinationEventUid: eventMappingsTable.destinationEventUid,\n      endTime: eventMappingsTable.endTime,\n      eventStateId: eventMappingsTable.eventStateId,\n      id: eventMappingsTable.id,\n      syncEventHash: eventMappingsTable.syncEventHash,\n      startTime: eventMappingsTable.startTime,\n    })\n    .from(eventMappingsTable)\n    .where(eq(eventMappingsTable.calendarId, calendarId));\n\n  return mappings.map((mapping) => ({\n    ...mapping,\n    deleteIdentifier: mapping.deleteIdentifier ?? mapping.destinationEventUid,\n  }));\n};\n\nconst createEventMapping = async (\n  database: BunSQLDatabase,\n  params: {\n    eventStateId: string;\n    calendarId: string;\n    destinationEventUid: string;\n    deleteIdentifier?: string;\n    syncEventHash?: string;\n    startTime: Date;\n    endTime: Date;\n  },\n): Promise<void> => {\n  await database\n    .insert(eventMappingsTable)\n    .values({\n      calendarId: params.calendarId,\n      deleteIdentifier: params.deleteIdentifier,\n      destinationEventUid: params.destinationEventUid,\n      endTime: params.endTime,\n      eventStateId: params.eventStateId,\n      syncEventHash: params.syncEventHash,\n      startTime: params.startTime,\n    })\n    .onConflictDoNothing();\n};\n\nconst deleteEventMapping = async (database: BunSQLDatabase, mappingId: string): Promise<void> => {\n  await database.delete(eventMappingsTable).where(eq(eventMappingsTable.id, mappingId));\n};\n\nconst deleteEventMappingByDestinationUid = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n  destinationEventUid: string,\n): Promise<void> => {\n  await database\n    .delete(eventMappingsTable)\n    .where(\n      and(\n        eq(eventMappingsTable.calendarId, calendarId),\n        eq(eventMappingsTable.destinationEventUid, destinationEventUid),\n      ),\n    );\n};\n\nconst countMappingsForDestination = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n): Promise<number> => {\n  const [result] = await database\n    .select({ count: count() })\n    .from(eventMappingsTable)\n    .where(eq(eventMappingsTable.calendarId, calendarId));\n\n  return result?.count ?? DEFAULT_COUNT;\n};\n\nexport {\n  getEventMappingsForDestination,\n  createEventMapping,\n  deleteEventMapping,\n  deleteEventMappingByDestinationUid,\n  countMappingsForDestination,\n};\nexport type { EventMapping };\n"
  },
  {
    "path": "packages/calendar/src/core/events/recurrence.ts",
    "content": "import { extendByRecurrenceRule, type IcsRecurrenceRule } from \"ts-ics\";\n\nconst MIN_RECURRENCE_COUNT = 0;\n\nconst RECURRENCE_FREQUENCIES: IcsRecurrenceRule[\"frequency\"][] = [\n  \"SECONDLY\",\n  \"MINUTELY\",\n  \"HOURLY\",\n  \"DAILY\",\n  \"WEEKLY\",\n  \"MONTHLY\",\n  \"YEARLY\",\n];\nconst WEEK_DAYS: NonNullable<IcsRecurrenceRule[\"workweekStart\"]>[] = [\n  \"SU\",\n  \"MO\",\n  \"TU\",\n  \"WE\",\n  \"TH\",\n  \"FR\",\n  \"SA\",\n];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value);\n\nconst parseJson = (value: string | null): unknown => {\n  if (value === null) {\n    return null;\n  }\n\n  try {\n    return JSON.parse(value);\n  } catch {\n    return null;\n  }\n};\n\nconst parseWeekDay = (\n  value: unknown,\n): NonNullable<IcsRecurrenceRule[\"workweekStart\"]> | null => {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  for (const weekDay of WEEK_DAYS) {\n    if (weekDay === value) {\n      return weekDay;\n    }\n  }\n\n  return null;\n};\n\nconst parseRecurrenceFrequency = (value: unknown): IcsRecurrenceRule[\"frequency\"] | null => {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  for (const frequency of RECURRENCE_FREQUENCIES) {\n    if (frequency === value) {\n      return frequency;\n    }\n  }\n\n  return null;\n};\n\nconst parseNumberArray = (value: unknown): number[] | undefined => {\n  if (!Array.isArray(value)) {\n    return;\n  }\n\n  if (value.some((entry) => typeof entry !== \"number\")) {\n    return;\n  }\n\n  return value;\n};\n\nconst parseRecurrenceByDay = (value: unknown): IcsRecurrenceRule[\"byDay\"] | undefined => {\n  if (!Array.isArray(value)) {\n    return;\n  }\n\n  const byDay: NonNullable<IcsRecurrenceRule[\"byDay\"]> = [];\n\n  for (const entry of value) {\n    if (!isRecord(entry)) {\n      continue;\n    }\n\n    const parsedDay = parseWeekDay(entry.day);\n    if (!parsedDay) {\n      continue;\n    }\n\n    if (\"occurrence\" in entry && typeof entry.occurrence !== \"number\") {\n      continue;\n    }\n\n    if (typeof entry.occurrence === \"number\") {\n      byDay.push({ day: parsedDay, occurrence: entry.occurrence });\n      continue;\n    }\n\n    byDay.push({ day: parsedDay });\n  }\n\n  if (byDay.length === MIN_RECURRENCE_COUNT) {\n    return;\n  }\n  return byDay;\n};\n\nconst parseUntilDate = (value: unknown): IcsRecurrenceRule[\"until\"] | undefined => {\n  if (!isRecord(value)) {\n    return;\n  }\n\n  const { date } = value;\n  if (date instanceof Date) {\n    if (Number.isNaN(date.getTime())) {\n      return;\n    }\n    return { date };\n  }\n\n  if (typeof date !== \"string\") {\n    return;\n  }\n\n  const parsedDate = new Date(date);\n  if (Number.isNaN(parsedDate.getTime())) {\n    return;\n  }\n  return { date: parsedDate };\n};\n\nconst toDate = (date: Date | string): Date => {\n  if (date instanceof Date) {\n    return date;\n  }\n  return new Date(date);\n};\n\nconst parseExceptionDatesFromJson = (exceptionDates: string | null): Date[] | undefined => {\n  const parsedExceptionDates = parseJson(exceptionDates);\n  if (!Array.isArray(parsedExceptionDates)) {\n    return;\n  }\n\n  const dates = parsedExceptionDates.flatMap((exceptionDate) => {\n    if (!isRecord(exceptionDate)) {\n      return [];\n    }\n\n    const { date } = exceptionDate;\n    if (!(date instanceof Date) && typeof date !== \"string\") {\n      return [];\n    }\n\n    const parsedDate = toDate(date);\n    if (Number.isNaN(parsedDate.getTime())) {\n      return [];\n    }\n\n    return [parsedDate];\n  });\n\n  if (dates.length === MIN_RECURRENCE_COUNT) {\n    return;\n  }\n  return dates;\n};\n\nconst parseRecurrenceRuleFromJson = (recurrenceRule: string | null): IcsRecurrenceRule | null => {\n  const parsedRecurrenceRule = parseJson(recurrenceRule);\n  if (!isRecord(parsedRecurrenceRule)) {\n    return null;\n  }\n\n  const frequency = parseRecurrenceFrequency(parsedRecurrenceRule.frequency);\n  if (!frequency) {\n    return null;\n  }\n\n  const normalizedRule: IcsRecurrenceRule = { frequency };\n\n  if (typeof parsedRecurrenceRule.count === \"number\") {\n    normalizedRule.count = parsedRecurrenceRule.count;\n  }\n  if (typeof parsedRecurrenceRule.interval === \"number\") {\n    normalizedRule.interval = parsedRecurrenceRule.interval;\n  }\n\n  const until = parseUntilDate(parsedRecurrenceRule.until);\n  if (until) {\n    normalizedRule.until = until;\n  }\n\n  const bySecond = parseNumberArray(parsedRecurrenceRule.bySecond);\n  if (bySecond) {\n    normalizedRule.bySecond = bySecond;\n  }\n\n  const byMinute = parseNumberArray(parsedRecurrenceRule.byMinute);\n  if (byMinute) {\n    normalizedRule.byMinute = byMinute;\n  }\n\n  const byHour = parseNumberArray(parsedRecurrenceRule.byHour);\n  if (byHour) {\n    normalizedRule.byHour = byHour;\n  }\n\n  const byDay = parseRecurrenceByDay(parsedRecurrenceRule.byDay);\n  if (byDay) {\n    normalizedRule.byDay = byDay;\n  }\n\n  const byMonthday = parseNumberArray(parsedRecurrenceRule.byMonthday);\n  if (byMonthday) {\n    normalizedRule.byMonthday = byMonthday;\n  }\n\n  const byYearday = parseNumberArray(parsedRecurrenceRule.byYearday);\n  if (byYearday) {\n    normalizedRule.byYearday = byYearday;\n  }\n\n  const byWeekNo = parseNumberArray(parsedRecurrenceRule.byWeekNo);\n  if (byWeekNo) {\n    normalizedRule.byWeekNo = byWeekNo;\n  }\n\n  const byMonth = parseNumberArray(parsedRecurrenceRule.byMonth);\n  if (byMonth) {\n    normalizedRule.byMonth = byMonth;\n  }\n\n  const bySetPos = parseNumberArray(parsedRecurrenceRule.bySetPos);\n  if (bySetPos) {\n    normalizedRule.bySetPos = bySetPos;\n  }\n\n  const workweekStart = parseWeekDay(parsedRecurrenceRule.workweekStart);\n  if (workweekStart) {\n    normalizedRule.workweekStart = workweekStart;\n  }\n\n  return normalizedRule;\n};\n\nconst hasActiveFutureOccurrence = (\n  startTime: Date,\n  recurrenceRule: IcsRecurrenceRule | null,\n  exceptionDates: Date[] | undefined,\n  startOfToday: Date,\n): boolean => {\n  if (!recurrenceRule) {\n    return false;\n  }\n\n  const dates = extendByRecurrenceRule(recurrenceRule, {\n    exceptions: exceptionDates,\n    start: startTime,\n  });\n\n  return dates.some((date) => date >= startOfToday);\n};\n\nexport {\n  hasActiveFutureOccurrence,\n  parseExceptionDatesFromJson,\n  parseRecurrenceRuleFromJson,\n};\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/accounts.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n  eventStatesTable,\n  oauthCredentialsTable,\n  userSubscriptionsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, asc, eq, gte } from \"drizzle-orm\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\nimport type { SyncableEvent } from \"../types\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport { getOAuthSyncWindowStart } from \"./sync-window\";\n\ninterface OAuthAccount {\n  calendarId: string;\n  userId: string;\n  accountId: string;\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n}\n\nconst getDestinationScopeFilter = (_database: BunSQLDatabase) =>\n  arrayContains(calendarsTable.capabilities, [\"push\"]);\n\nconst getOAuthAccountsByPlan = async (\n  database: BunSQLDatabase,\n  provider: string,\n  targetPlan: Plan,\n): Promise<OAuthAccount[]> => {\n  const results = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      accessTokenExpiresAt: oauthCredentialsTable.expiresAt,\n      accountId: calendarAccountsTable.accountId,\n      calendarId: calendarsTable.id,\n      plan: userSubscriptionsTable.plan,\n      refreshToken: oauthCredentialsTable.refreshToken,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(\n      oauthCredentialsTable,\n      eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id),\n    )\n    .leftJoin(\n      userSubscriptionsTable,\n      eq(calendarsTable.userId, userSubscriptionsTable.userId),\n    )\n    .where(\n      and(\n        eq(calendarAccountsTable.provider, provider),\n        eq(calendarAccountsTable.needsReauthentication, false),\n        getDestinationScopeFilter(database),\n      ),\n    );\n\n  const accounts: OAuthAccount[] = [];\n\n  for (const result of results) {\n    const { plan, accessToken, refreshToken, accessTokenExpiresAt, accountId } = result;\n    const userPlan = plan ?? \"free\";\n\n    if (userPlan !== targetPlan) {\n      continue;\n    }\n\n    accounts.push({\n      accessToken,\n      accessTokenExpiresAt,\n      accountId: accountId ?? \"\",\n      calendarId: result.calendarId,\n      refreshToken,\n      userId: result.userId,\n    });\n  }\n\n  return accounts;\n};\n\nconst getOAuthAccountsForUser = async (\n  database: BunSQLDatabase,\n  provider: string,\n  userId: string,\n): Promise<OAuthAccount[]> => {\n  const results = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      accessTokenExpiresAt: oauthCredentialsTable.expiresAt,\n      accountId: calendarAccountsTable.accountId,\n      calendarId: calendarsTable.id,\n      refreshToken: oauthCredentialsTable.refreshToken,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(\n      oauthCredentialsTable,\n      eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarAccountsTable.provider, provider),\n        eq(calendarsTable.userId, userId),\n        eq(calendarAccountsTable.needsReauthentication, false),\n        getDestinationScopeFilter(database),\n      ),\n    );\n\n  return results.map((result) => ({\n    accessToken: result.accessToken,\n    accessTokenExpiresAt: result.accessTokenExpiresAt,\n    accountId: result.accountId ?? \"\",\n    calendarId: result.calendarId,\n    refreshToken: result.refreshToken,\n    userId: result.userId,\n  }));\n};\n\nconst getUserEventsForSync = async (\n  database: BunSQLDatabase,\n  userId: string,\n): Promise<SyncableEvent[]> => {\n  const syncWindowStart = getOAuthSyncWindowStart();\n\n  const results = await database\n    .select({\n      calendarId: eventStatesTable.calendarId,\n      calendarName: calendarsTable.name,\n      calendarUrl: calendarsTable.url,\n      endTime: eventStatesTable.endTime,\n      id: eventStatesTable.id,\n      sourceEventUid: eventStatesTable.sourceEventUid,\n      startTime: eventStatesTable.startTime,\n    })\n    .from(eventStatesTable)\n    .innerJoin(calendarsTable, eq(eventStatesTable.calendarId, calendarsTable.id))\n    .where(and(eq(calendarsTable.userId, userId), gte(eventStatesTable.startTime, syncWindowStart)))\n    .orderBy(asc(eventStatesTable.startTime));\n\n  const events: SyncableEvent[] = [];\n\n  for (const result of results) {\n    if (result.sourceEventUid === null) {\n      continue;\n    }\n\n    events.push({\n      calendarId: result.calendarId,\n      calendarName: result.calendarName,\n      calendarUrl: result.calendarUrl,\n      endTime: result.endTime,\n      id: result.id,\n      sourceEventUid: result.sourceEventUid,\n      startTime: result.startTime,\n      summary: result.calendarName ?? \"Busy\",\n    });\n  }\n\n  return events;\n};\n\nexport { getOAuthAccountsByPlan, getOAuthAccountsForUser, getUserEventsForSync };\nexport type { OAuthAccount };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/config.ts",
    "content": "interface OAuthCredentials {\n  clientId: string;\n  clientSecret: string;\n}\n\ninterface OAuthEnv {\n  GOOGLE_CLIENT_ID?: string;\n  GOOGLE_CLIENT_SECRET?: string;\n  MICROSOFT_CLIENT_ID?: string;\n  MICROSOFT_CLIENT_SECRET?: string;\n}\n\ninterface OAuthConfigs {\n  google: OAuthCredentials | null;\n  microsoft: OAuthCredentials | null;\n}\n\nconst getCredentials = (\n  clientId: string | undefined,\n  clientSecret: string | undefined,\n): OAuthCredentials | null => {\n  if (!clientId) {\n    return null;\n  }\n\n  if (!clientSecret) {\n    return null;\n  }\n\n  return { clientId, clientSecret };\n};\n\nconst buildOAuthConfigs = (env: OAuthEnv): OAuthConfigs => {\n  const google = getCredentials(env.GOOGLE_CLIENT_ID, env.GOOGLE_CLIENT_SECRET);\n  const microsoft = getCredentials(env.MICROSOFT_CLIENT_ID, env.MICROSOFT_CLIENT_SECRET);\n\n  return { google, microsoft };\n};\n\nexport { buildOAuthConfigs };\nexport type { OAuthCredentials, OAuthEnv, OAuthConfigs };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/coordinated-refresher.ts",
    "content": "import type { RefreshLockStore } from \"./refresh-coordinator\";\nimport { runWithCredentialRefreshLock } from \"./refresh-coordinator\";\nimport { isOAuthReauthRequiredError } from \"./error-classification\";\nimport {\n  calendarAccountsTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\nconst MS_PER_SECOND = 1000;\n\ninterface CoordinatedRefresherOptions {\n  database: BunSQLDatabase;\n  oauthCredentialId: string;\n  calendarAccountId: string;\n  refreshLockStore: RefreshLockStore | null;\n  rawRefresh: (refreshToken: string) => Promise<{\n    access_token: string;\n    expires_in: number;\n    refresh_token?: string;\n  }>;\n}\n\nconst createCoordinatedRefresher = (options: CoordinatedRefresherOptions) => {\n  const { database, oauthCredentialId, calendarAccountId, refreshLockStore, rawRefresh } = options;\n\n  return (refreshToken: string) =>\n    runWithCredentialRefreshLock(\n      oauthCredentialId,\n      async () => {\n        try {\n          const result = await rawRefresh(refreshToken);\n\n          const newExpiresAt = new Date(Date.now() + result.expires_in * MS_PER_SECOND);\n\n          await database\n            .update(oauthCredentialsTable)\n            .set({\n              accessToken: result.access_token,\n              expiresAt: newExpiresAt,\n              refreshToken: result.refresh_token ?? refreshToken,\n            })\n            .where(eq(oauthCredentialsTable.id, oauthCredentialId));\n\n          return result;\n        } catch (error) {\n          if (isOAuthReauthRequiredError(error)) {\n            await database\n              .update(calendarAccountsTable)\n              .set({ needsReauthentication: true })\n              .where(eq(calendarAccountsTable.id, calendarAccountId));\n          }\n          throw error;\n        }\n      },\n      refreshLockStore,\n    );\n};\n\nexport { createCoordinatedRefresher };\nexport type { CoordinatedRefresherOptions };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/create-source-provider.ts",
    "content": "import type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { OAuthTokenProvider } from \"./token-provider\";\nimport type { OAuthSourceProvider } from \"./source-provider\";\nimport type { OAuthSourceConfig, SourceSyncResult } from \"../types\";\nimport type { RefreshLockStore } from \"./refresh-coordinator\";\nimport { allSettledWithConcurrency } from \"../utils/concurrency\";\n\nconst EMPTY_SOURCES_COUNT = 0;\nconst INITIAL_ADDED_COUNT = 0;\nconst INITIAL_REMOVED_COUNT = 0;\nconst INITIAL_INSERTED_COUNT = 0;\nconst INITIAL_UPDATED_COUNT = 0;\nconst INITIAL_FILTERED_OUT_OF_WINDOW_COUNT = 0;\nconst INITIAL_SYNC_TOKEN_RESET_COUNT = 0;\nconst SOURCE_SYNC_CONCURRENCY = 3;\nconst SOURCE_SYNC_TIMEOUT_MS = 60_000;\n\nconst toError = (reason: unknown): Error => {\n  if (reason instanceof Error) {\n    return reason;\n  }\n  return new Error(String(reason));\n};\n\ninterface OAuthSourceAccount {\n  calendarId: string;\n  calendarAccountId: string;\n  userId: string;\n  externalCalendarId: string;\n  syncToken: string | null;\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  oauthCredentialId: string;\n  provider: string;\n}\n\ninterface SourceProvider {\n  syncAllSources(): Promise<SourceSyncResult>;\n}\n\ninterface CreateOAuthSourceProviderOptions<\n  TAccount extends OAuthSourceAccount,\n  TConfig extends OAuthSourceConfig,\n> {\n  database: BunSQLDatabase;\n  oauthProvider: OAuthTokenProvider;\n  refreshLockStore?: RefreshLockStore | null;\n  getAllSources: (database: BunSQLDatabase) => Promise<TAccount[]>;\n  createProviderInstance: (\n    config: TConfig,\n    oauthProvider: OAuthTokenProvider,\n  ) => OAuthSourceProvider<TConfig>;\n  buildConfig: (database: BunSQLDatabase, account: TAccount) => TConfig;\n}\n\nconst createOAuthSourceProvider = <\n  TAccount extends OAuthSourceAccount,\n  TConfig extends OAuthSourceConfig,\n>(\n  options: CreateOAuthSourceProviderOptions<TAccount, TConfig>,\n): SourceProvider => {\n  const { database, oauthProvider, refreshLockStore, getAllSources, createProviderInstance, buildConfig } = options;\n\n  const syncAllSources = async (): Promise<SourceSyncResult> => {\n    const sources = await getAllSources(database);\n\n    if (sources.length === EMPTY_SOURCES_COUNT) {\n      return { eventsAdded: INITIAL_ADDED_COUNT, eventsRemoved: INITIAL_REMOVED_COUNT };\n    }\n\n    const tasks = sources.map((source) => (): Promise<SourceSyncResult> => {\n        const config = buildConfig(database, source);\n        config.refreshLockStore = refreshLockStore ?? null;\n        const provider = createProviderInstance(config, oauthProvider);\n\n        return Promise.race([\n          provider.sync(),\n          Bun.sleep(SOURCE_SYNC_TIMEOUT_MS).then((): never => {\n            throw new Error(`Source sync timed out after ${SOURCE_SYNC_TIMEOUT_MS}ms`);\n          }),\n        ]);\n      });\n\n    const results = await allSettledWithConcurrency(tasks, {\n      concurrency: SOURCE_SYNC_CONCURRENCY,\n    });\n\n    const combined: SourceSyncResult = {\n      eventsAdded: INITIAL_ADDED_COUNT,\n      eventsRemoved: INITIAL_REMOVED_COUNT,\n    };\n    let eventsInserted = INITIAL_INSERTED_COUNT;\n    let eventsUpdated = INITIAL_UPDATED_COUNT;\n    let eventsFilteredOutOfWindow = INITIAL_FILTERED_OUT_OF_WINDOW_COUNT;\n    let syncTokenResetCount = INITIAL_SYNC_TOKEN_RESET_COUNT;\n\n    const errors: Error[] = [];\n\n    for (const result of results) {\n      if (result.status === \"fulfilled\") {\n        combined.eventsAdded += result.value.eventsAdded;\n        combined.eventsRemoved += result.value.eventsRemoved;\n        eventsInserted += result.value.eventsInserted ?? INITIAL_INSERTED_COUNT;\n        eventsUpdated += result.value.eventsUpdated ?? INITIAL_UPDATED_COUNT;\n        eventsFilteredOutOfWindow += result.value.eventsFilteredOutOfWindow\n          ?? INITIAL_FILTERED_OUT_OF_WINDOW_COUNT;\n        syncTokenResetCount += result.value.syncTokenResetCount ?? INITIAL_SYNC_TOKEN_RESET_COUNT;\n      } else {\n        errors.push(toError(result.reason));\n      }\n    }\n\n    combined.eventsInserted = eventsInserted;\n    combined.eventsUpdated = eventsUpdated;\n    combined.eventsFilteredOutOfWindow = eventsFilteredOutOfWindow;\n    combined.syncTokenResetCount = syncTokenResetCount;\n\n    if (errors.length > EMPTY_SOURCES_COUNT) {\n      combined.errors = errors;\n    }\n\n    return combined;\n  };\n\n  return { syncAllSources };\n};\n\nexport { createOAuthSourceProvider };\nexport type { CreateOAuthSourceProviderOptions, OAuthSourceAccount, SourceProvider };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/ensure-valid-token.ts",
    "content": "import { TOKEN_REFRESH_BUFFER_MS } from \"@keeper.sh/constants\";\n\nconst MS_PER_SECOND = 1000;\n\ninterface TokenState {\n  accessToken: string;\n  accessTokenExpiresAt: Date;\n  refreshToken: string;\n}\n\ninterface OAuthTokenRefreshResult {\n  access_token: string;\n  expires_in: number;\n  refresh_token?: string;\n}\n\ntype TokenRefresher = (refreshToken: string) => Promise<OAuthTokenRefreshResult>;\n\nconst ensureValidToken = async (\n  tokenState: TokenState,\n  refreshAccessToken: TokenRefresher,\n): Promise<void> => {\n  if (tokenState.accessTokenExpiresAt.getTime() > Date.now() + TOKEN_REFRESH_BUFFER_MS) {\n    return;\n  }\n\n  const result = await refreshAccessToken(tokenState.refreshToken);\n  tokenState.accessToken = result.access_token;\n  tokenState.accessTokenExpiresAt = new Date(Date.now() + result.expires_in * MS_PER_SECOND);\n\n  if (result.refresh_token) {\n    tokenState.refreshToken = result.refresh_token;\n  }\n};\n\nexport { ensureValidToken };\nexport type { TokenState, TokenRefresher, OAuthTokenRefreshResult };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/error-classification.ts",
    "content": "const isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst isOAuthReauthRequiredError = (error: unknown): boolean => {\n  if (isRecord(error) && \"oauthReauthRequired\" in error) {\n    return error.oauthReauthRequired === true;\n  }\n\n  if (error instanceof Error) {\n    return error.message.toLowerCase().includes(\"invalid_grant\");\n  }\n\n  return false;\n};\n\nexport { isOAuthReauthRequiredError };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/google.ts",
    "content": "import { googleTokenResponseSchema, googleUserInfoSchema } from \"@keeper.sh/data-schemas\";\nimport type { GoogleTokenResponse, GoogleUserInfo } from \"@keeper.sh/data-schemas\";\nimport { generateState } from \"./state\";\nimport type { ValidatedState, OAuthStateStore } from \"./state\";\n\nconst GOOGLE_AUTH_URL = \"https://accounts.google.com/o/oauth2/v2/auth\";\nconst GOOGLE_TOKEN_URL = \"https://oauth2.googleapis.com/token\";\nconst GOOGLE_USERINFO_URL = \"https://www.googleapis.com/oauth2/v2/userinfo\";\n\nconst GOOGLE_CALENDAR_SCOPE = \"https://www.googleapis.com/auth/calendar.events\";\nconst GOOGLE_CALENDAR_LIST_SCOPE = \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\";\nconst GOOGLE_EMAIL_SCOPE = \"https://www.googleapis.com/auth/userinfo.email\";\nconst REQUEST_TIMEOUT_MS = 15_000;\nconst REFRESH_MAX_ATTEMPTS = 2;\n\nconst isRequestTimeoutError = (error: unknown): boolean =>\n  error instanceof Error\n  && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n\ninterface GoogleOAuthCredentials {\n  clientId: string;\n  clientSecret: string;\n}\n\ninterface AuthorizationUrlOptions {\n  callbackUrl: string;\n  scopes?: string[];\n  destinationId?: string;\n  sourceCredentialId?: string;\n}\n\ninterface GoogleOAuthService {\n  getAuthorizationUrl: (userId: string, options: AuthorizationUrlOptions) => Promise<string>;\n  exchangeCodeForTokens: (code: string, callbackUrl: string) => Promise<GoogleTokenResponse>;\n  refreshAccessToken: (refreshToken: string) => Promise<GoogleTokenResponse>;\n}\n\ninterface GoogleTokenErrorPayload {\n  error?: string;\n  error_description?: string;\n  error_subtype?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst readOptionalString = (\n  value: Record<string, unknown>,\n  key: string,\n): string | undefined => {\n  const entry = value[key];\n  if (typeof entry !== \"string\") {\n    return;\n  }\n  return entry;\n};\n\nclass GoogleOAuthRefreshError extends Error {\n  readonly status: number | null;\n  readonly oauthErrorCode?: string;\n  readonly oauthErrorSubtype?: string;\n  readonly oauthReauthRequired: boolean;\n  readonly oauthRetriable: boolean;\n\n  constructor(\n    message: string,\n    options: {\n      status: number | null;\n      oauthErrorCode?: string;\n      oauthErrorSubtype?: string;\n      oauthReauthRequired: boolean;\n      oauthRetriable: boolean;\n    },\n  ) {\n    super(message);\n    this.name = \"GoogleOAuthRefreshError\";\n    this.status = options.status;\n    this.oauthErrorCode = options.oauthErrorCode;\n    this.oauthErrorSubtype = options.oauthErrorSubtype;\n    this.oauthReauthRequired = options.oauthReauthRequired;\n    this.oauthRetriable = options.oauthRetriable;\n  }\n}\n\nconst isRetriableStatusCode = (status: number): boolean => status === 429 || status >= 500;\n\nconst parseGoogleTokenErrorPayload = (value: string): GoogleTokenErrorPayload | null => {\n  try {\n    const parsed: unknown = JSON.parse(value);\n    if (!isRecord(parsed)) {\n      return null;\n    }\n\n    const error = readOptionalString(parsed, \"error\");\n    const errorDescription = readOptionalString(parsed, \"error_description\");\n    const errorSubtype = readOptionalString(parsed, \"error_subtype\");\n\n    return {\n      ...(error && { error }),\n      ...(errorDescription && { error_description: errorDescription }),\n      ...(errorSubtype && { error_subtype: errorSubtype }),\n    };\n  } catch {\n    return null;\n  }\n};\n\nconst getRefreshErrorCode = (\n  payload: GoogleTokenErrorPayload | null,\n): string | undefined => payload?.error?.toLowerCase();\n\nconst createGoogleTokenRefresher = (\n  credentials: GoogleOAuthCredentials,\n) => {\n  const { clientId, clientSecret } = credentials;\n\n  return async (refreshToken: string): Promise<GoogleTokenResponse> => {\n    for (let attempt = 1; attempt <= REFRESH_MAX_ATTEMPTS; attempt++) {\n      const response = await fetch(GOOGLE_TOKEN_URL, {\n        body: new URLSearchParams({\n          client_id: clientId,\n          client_secret: clientSecret,\n          grant_type: \"refresh_token\",\n          refresh_token: refreshToken,\n        }),\n        headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n        method: \"POST\",\n        signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n      }).catch((error) => {\n        if (isRequestTimeoutError(error)) {\n          const timeoutError = new GoogleOAuthRefreshError(\n            `Token refresh timed out after ${REQUEST_TIMEOUT_MS}ms`,\n            {\n              oauthReauthRequired: false,\n              oauthRetriable: true,\n              status: null,\n            },\n          );\n\n          if (attempt < REFRESH_MAX_ATTEMPTS) {\n            return timeoutError;\n          }\n\n          throw timeoutError;\n        }\n\n        if (attempt < REFRESH_MAX_ATTEMPTS) {\n          return error;\n        }\n\n        throw error;\n      });\n\n      if (response instanceof GoogleOAuthRefreshError) {\n        continue;\n      }\n\n      if (response instanceof Error) {\n        continue;\n      }\n\n      if (!response.ok) {\n        const rawError = await response.text();\n        const parsedError = parseGoogleTokenErrorPayload(rawError);\n        const oauthErrorCode = getRefreshErrorCode(parsedError);\n        const oauthErrorSubtype = parsedError?.error_subtype;\n        const oauthReauthRequired = response.status === 400 && oauthErrorCode === \"invalid_grant\";\n        const oauthRetriable = isRetriableStatusCode(response.status);\n        const refreshError = new GoogleOAuthRefreshError(\n          `Token refresh failed (${response.status}): ${rawError}`,\n          {\n            oauthErrorCode,\n            oauthErrorSubtype,\n            oauthReauthRequired,\n            oauthRetriable,\n            status: response.status,\n          },\n        );\n\n        if (refreshError.oauthRetriable && attempt < REFRESH_MAX_ATTEMPTS) {\n          continue;\n        }\n\n        throw refreshError;\n      }\n\n      const body = await response.json();\n      return googleTokenResponseSchema.assert(body);\n    }\n\n    throw new GoogleOAuthRefreshError(\n      \"Token refresh failed after retry attempts\",\n      {\n        oauthReauthRequired: false,\n        oauthRetriable: false,\n        status: null,\n      },\n    );\n  };\n};\n\nconst createGoogleOAuthService = (\n  credentials: GoogleOAuthCredentials,\n  stateStore: OAuthStateStore,\n): GoogleOAuthService => {\n  const { clientId, clientSecret } = credentials;\n\n  const getAuthorizationUrl = async (userId: string, options: AuthorizationUrlOptions): Promise<string> => {\n    const state = await generateState(stateStore, userId, {\n      destinationId: options.destinationId,\n      sourceCredentialId: options.sourceCredentialId,\n    });\n    const scopes = options.scopes ?? [\n      GOOGLE_CALENDAR_SCOPE,\n      GOOGLE_CALENDAR_LIST_SCOPE,\n      GOOGLE_EMAIL_SCOPE,\n    ];\n\n    const url = new URL(GOOGLE_AUTH_URL);\n    url.searchParams.set(\"client_id\", clientId);\n    url.searchParams.set(\"redirect_uri\", options.callbackUrl);\n    url.searchParams.set(\"response_type\", \"code\");\n    url.searchParams.set(\"scope\", scopes.join(\" \"));\n    url.searchParams.set(\"access_type\", \"offline\");\n    url.searchParams.set(\"prompt\", \"consent\");\n    url.searchParams.set(\"state\", state);\n\n    return url.toString();\n  };\n\n  const exchangeCodeForTokens = async (\n    code: string,\n    callbackUrl: string,\n  ): Promise<GoogleTokenResponse> => {\n    const response = await fetch(GOOGLE_TOKEN_URL, {\n      body: new URLSearchParams({\n        client_id: clientId,\n        client_secret: clientSecret,\n        code,\n        grant_type: \"authorization_code\",\n        redirect_uri: callbackUrl,\n      }),\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      method: \"POST\",\n    });\n\n    if (!response.ok) {\n      const error = await response.text();\n      throw new Error(`Token exchange failed (${response.status}): ${error}`);\n    }\n\n    const body = await response.json();\n    return googleTokenResponseSchema.assert(body);\n  };\n\n  const refreshAccessToken = createGoogleTokenRefresher(credentials);\n\n  return {\n    exchangeCodeForTokens,\n    getAuthorizationUrl,\n    refreshAccessToken,\n  };\n};\n\nconst fetchUserInfo = async (accessToken: string): Promise<GoogleUserInfo> => {\n  const response = await fetch(GOOGLE_USERINFO_URL, {\n    headers: { Authorization: `Bearer ${accessToken}` },\n  });\n\n  if (!response.ok) {\n    throw new Error(`Failed to fetch user info: ${response.status}`);\n  }\n\n  const body = await response.json();\n  return googleUserInfoSchema.assert(body);\n};\n\n/**\n * Checks if the granted scopes include all required scopes for calendar operations.\n * Google returns scopes as a space-separated string.\n */\nconst hasRequiredScopes = (grantedScopes: string): boolean => {\n  const scopes = grantedScopes.split(\" \");\n  return scopes.includes(GOOGLE_CALENDAR_SCOPE);\n};\n\nexport {\n  createGoogleTokenRefresher,\n  GOOGLE_CALENDAR_SCOPE,\n  GOOGLE_CALENDAR_LIST_SCOPE,\n  GOOGLE_EMAIL_SCOPE,\n  createGoogleOAuthService,\n  fetchUserInfo,\n  hasRequiredScopes,\n};\nexport type {\n  ValidatedState,\n  OAuthStateStore,\n  GoogleOAuthCredentials,\n  AuthorizationUrlOptions,\n  GoogleOAuthService,\n  GoogleTokenResponse,\n  GoogleUserInfo,\n};\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/microsoft.ts",
    "content": "import { microsoftTokenResponseSchema, microsoftUserInfoSchema } from \"@keeper.sh/data-schemas\";\nimport type { MicrosoftTokenResponse, MicrosoftUserInfo } from \"@keeper.sh/data-schemas\";\nimport { generateState, validateState } from \"./state\";\nimport type { ValidatedState, OAuthStateStore } from \"./state\";\n\nconst MICROSOFT_AUTH_URL = \"https://login.microsoftonline.com/common/oauth2/v2.0/authorize\";\nconst MICROSOFT_TOKEN_URL = \"https://login.microsoftonline.com/common/oauth2/v2.0/token\";\nconst MICROSOFT_USERINFO_URL = \"https://graph.microsoft.com/v1.0/me\";\n\nconst MICROSOFT_CALENDAR_SCOPE = \"Calendars.ReadWrite\";\nconst MICROSOFT_USER_SCOPE = \"User.Read\";\nconst MICROSOFT_OFFLINE_SCOPE = \"offline_access\";\nconst REQUEST_TIMEOUT_MS = 15_000;\n\nconst isRequestTimeoutError = (error: unknown): boolean =>\n  error instanceof Error\n  && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n\ninterface MicrosoftOAuthCredentials {\n  clientId: string;\n  clientSecret: string;\n}\n\ninterface AuthorizationUrlOptions {\n  callbackUrl: string;\n  scopes?: string[];\n  destinationId?: string;\n  sourceCredentialId?: string;\n}\n\ninterface MicrosoftOAuthService {\n  getAuthorizationUrl: (userId: string, options: AuthorizationUrlOptions) => Promise<string>;\n  exchangeCodeForTokens: (code: string, callbackUrl: string) => Promise<MicrosoftTokenResponse>;\n  refreshAccessToken: (refreshToken: string) => Promise<MicrosoftTokenResponse>;\n}\n\nconst createMicrosoftTokenRefresher = (\n  credentials: MicrosoftOAuthCredentials,\n) => {\n  const { clientId, clientSecret } = credentials;\n\n  return async (refreshToken: string): Promise<MicrosoftTokenResponse> => {\n    const response = await fetch(MICROSOFT_TOKEN_URL, {\n      body: new URLSearchParams({\n        client_id: clientId,\n        client_secret: clientSecret,\n        grant_type: \"refresh_token\",\n        refresh_token: refreshToken,\n      }),\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      method: \"POST\",\n      signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n    }).catch((error) => {\n      if (isRequestTimeoutError(error)) {\n        throw new Error(`Token refresh timed out after ${REQUEST_TIMEOUT_MS}ms`);\n      }\n\n      throw error;\n    });\n\n    if (!response.ok) {\n      const error = await response.text();\n      throw new Error(`Token refresh failed (${response.status}): ${error}`);\n    }\n\n    const body = await response.json();\n    return microsoftTokenResponseSchema.assert(body);\n  };\n};\n\nconst createMicrosoftOAuthService = (\n  credentials: MicrosoftOAuthCredentials,\n  stateStore: OAuthStateStore,\n): MicrosoftOAuthService => {\n  const { clientId, clientSecret } = credentials;\n\n  const getAuthorizationUrl = async (userId: string, options: AuthorizationUrlOptions): Promise<string> => {\n    const state = await generateState(stateStore, userId, {\n      destinationId: options.destinationId,\n      sourceCredentialId: options.sourceCredentialId,\n    });\n    const scopes = options.scopes ?? [\n      MICROSOFT_CALENDAR_SCOPE,\n      MICROSOFT_USER_SCOPE,\n      MICROSOFT_OFFLINE_SCOPE,\n    ];\n\n    const url = new URL(MICROSOFT_AUTH_URL);\n    url.searchParams.set(\"client_id\", clientId);\n    url.searchParams.set(\"redirect_uri\", options.callbackUrl);\n    url.searchParams.set(\"response_type\", \"code\");\n    url.searchParams.set(\"scope\", scopes.join(\" \"));\n    url.searchParams.set(\"response_mode\", \"query\");\n    url.searchParams.set(\"prompt\", \"consent\");\n    url.searchParams.set(\"state\", state);\n\n    return url.toString();\n  };\n\n  const exchangeCodeForTokens = async (\n    code: string,\n    callbackUrl: string,\n  ): Promise<MicrosoftTokenResponse> => {\n    const response = await fetch(MICROSOFT_TOKEN_URL, {\n      body: new URLSearchParams({\n        client_id: clientId,\n        client_secret: clientSecret,\n        code,\n        grant_type: \"authorization_code\",\n        redirect_uri: callbackUrl,\n      }),\n      headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n      method: \"POST\",\n    });\n\n    if (!response.ok) {\n      const error = await response.text();\n      throw new Error(`Token exchange failed (${response.status}): ${error}`);\n    }\n\n    const body = await response.json();\n    return microsoftTokenResponseSchema.assert(body);\n  };\n\n  const refreshAccessToken = createMicrosoftTokenRefresher(credentials);\n\n  return {\n    exchangeCodeForTokens,\n    getAuthorizationUrl,\n    refreshAccessToken,\n  };\n};\n\nconst fetchUserInfo = async (accessToken: string): Promise<MicrosoftUserInfo> => {\n  const response = await fetch(MICROSOFT_USERINFO_URL, {\n    headers: { Authorization: `Bearer ${accessToken}` },\n  });\n\n  if (!response.ok) {\n    throw new Error(`Failed to fetch user info: ${response.status}`);\n  }\n\n  const body = await response.json();\n  return microsoftUserInfoSchema.assert(body);\n};\n\n/**\n * Checks if the granted scopes include all required scopes for calendar operations.\n * Microsoft returns scopes as a space-separated string.\n */\nconst hasRequiredScopes = (grantedScopes: string): boolean => {\n  const scopes = grantedScopes.toLowerCase().split(\" \");\n  return scopes.includes(MICROSOFT_CALENDAR_SCOPE.toLowerCase());\n};\n\nexport {\n  createMicrosoftTokenRefresher,\n  MICROSOFT_CALENDAR_SCOPE,\n  MICROSOFT_USER_SCOPE,\n  MICROSOFT_OFFLINE_SCOPE,\n  createMicrosoftOAuthService,\n  fetchUserInfo,\n  hasRequiredScopes,\n  validateState,\n};\nexport type {\n  ValidatedState,\n  MicrosoftOAuthCredentials,\n  AuthorizationUrlOptions,\n  MicrosoftOAuthService,\n  MicrosoftTokenResponse,\n  MicrosoftUserInfo,\n};\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/providers.ts",
    "content": "import {\n  createGoogleOAuthService,\n  fetchUserInfo as fetchGoogleUserInfo,\n  hasRequiredScopes as hasRequiredGoogleScopes,\n} from \"./google\";\nimport type { GoogleOAuthCredentials, ValidatedState, OAuthStateStore } from \"./google\";\nimport {\n  createMicrosoftOAuthService,\n  fetchUserInfo as fetchMicrosoftUserInfo,\n  hasRequiredScopes as hasRequiredMicrosoftScopes,\n} from \"./microsoft\";\nimport type { MicrosoftOAuthCredentials } from \"./microsoft\";\nimport { validateState } from \"./state\";\n\ninterface AuthorizationUrlOptions {\n  callbackUrl: string;\n  scopes?: string[];\n  destinationId?: string;\n  sourceCredentialId?: string;\n}\n\ninterface NormalizedUserInfo {\n  id: string;\n  email: string;\n}\n\ninterface OAuthTokens {\n  access_token: string;\n  refresh_token?: string;\n  expires_in: number;\n  scope: string;\n}\n\ninterface OAuthProvider {\n  getAuthorizationUrl: (userId: string, options: AuthorizationUrlOptions) => Promise<string>;\n  exchangeCodeForTokens: (code: string, callbackUrl: string) => Promise<OAuthTokens>;\n  fetchUserInfo: (accessToken: string) => Promise<NormalizedUserInfo>;\n  refreshAccessToken: (refreshToken: string) => Promise<OAuthTokens>;\n  hasRequiredScopes: (grantedScopes: string) => boolean;\n}\n\ninterface OAuthProvidersConfig {\n  google: GoogleOAuthCredentials | null;\n  microsoft: MicrosoftOAuthCredentials | null;\n}\n\ninterface OAuthProviders {\n  getProvider: (providerId: string) => OAuthProvider | undefined;\n  isOAuthProvider: (providerId: string) => boolean;\n  validateState: (state: string) => Promise<ValidatedState | null>;\n  hasRequiredScopes: (providerId: string, grantedScopes: string) => boolean;\n}\n\nconst createOAuthProviders = (\n  config: OAuthProvidersConfig,\n  stateStore: OAuthStateStore,\n): OAuthProviders => {\n  const providers: Record<string, OAuthProvider> = {};\n\n  if (config.google) {\n    const googleService = createGoogleOAuthService(config.google, stateStore);\n    providers.google = {\n      exchangeCodeForTokens: googleService.exchangeCodeForTokens,\n      fetchUserInfo: async (accessToken): Promise<NormalizedUserInfo> => {\n        const info = await fetchGoogleUserInfo(accessToken);\n        return { email: info.email, id: info.id };\n      },\n      getAuthorizationUrl: googleService.getAuthorizationUrl,\n      hasRequiredScopes: hasRequiredGoogleScopes,\n      refreshAccessToken: googleService.refreshAccessToken,\n    };\n  }\n\n  if (config.microsoft) {\n    const microsoftService = createMicrosoftOAuthService(config.microsoft, stateStore);\n    providers.outlook = {\n      exchangeCodeForTokens: microsoftService.exchangeCodeForTokens,\n      fetchUserInfo: async (accessToken): Promise<NormalizedUserInfo> => {\n        const info = await fetchMicrosoftUserInfo(accessToken);\n        return { email: info.mail ?? info.userPrincipalName ?? \"\", id: info.id };\n      },\n      getAuthorizationUrl: microsoftService.getAuthorizationUrl,\n      hasRequiredScopes: hasRequiredMicrosoftScopes,\n      refreshAccessToken: microsoftService.refreshAccessToken,\n    };\n  }\n\n  const getProvider = (providerId: string): OAuthProvider | undefined => providers[providerId];\n\n  const isOAuthProvider = (providerId: string): boolean => providerId in providers;\n\n  const handleValidateState = (state: string): Promise<ValidatedState | null> =>\n    validateState(stateStore, state);\n\n  const hasRequiredScopes = (providerId: string, grantedScopes: string): boolean => {\n    const provider = providers[providerId];\n    if (!provider) {\n      return false;\n    }\n    return provider.hasRequiredScopes(grantedScopes);\n  };\n\n  return { getProvider, hasRequiredScopes, isOAuthProvider, validateState: handleValidateState };\n};\n\nexport { createOAuthProviders };\nexport type {\n  ValidatedState,\n  AuthorizationUrlOptions,\n  NormalizedUserInfo,\n  OAuthTokens,\n  OAuthProvider,\n  OAuthProvidersConfig,\n  OAuthProviders,\n  OAuthStateStore,\n};\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/refresh-coordinator.ts",
    "content": "interface CredentialRefreshResult {\n  access_token: string;\n  expires_in: number;\n  refresh_token?: string;\n}\n\ninterface RefreshLockStore {\n  tryAcquire(key: string, ttlSeconds: number): Promise<boolean>;\n  release(key: string): Promise<void>;\n}\n\nconst REFRESH_LOCK_PREFIX = \"oauth:refresh-lock:\";\nconst REFRESH_LOCK_TTL_SECONDS = 30;\n\nconst inFlightRefreshByCredentialId = new Map<string, Promise<CredentialRefreshResult>>();\n\nconst executeWithDistributedLock = async (\n  lockStore: RefreshLockStore | null,\n  lockKey: string,\n  runRefresh: () => Promise<CredentialRefreshResult>,\n): Promise<CredentialRefreshResult> => {\n  if (!lockStore) {\n    return runRefresh();\n  }\n\n  const acquired = await lockStore\n    .tryAcquire(lockKey, REFRESH_LOCK_TTL_SECONDS)\n    .catch(() => false);\n\n  if (!acquired) {\n    throw new Error(\"Token refresh already in progress on another instance\");\n  }\n\n  try {\n    return await runRefresh();\n  } finally {\n    await lockStore.release(lockKey).catch(() => {\n      // Lock release is best-effort; TTL ensures cleanup\n    });\n  }\n};\n\nconst runWithCredentialRefreshLock = (\n  oauthCredentialId: string,\n  runRefresh: () => Promise<CredentialRefreshResult>,\n  lockStore: RefreshLockStore | null = null,\n): Promise<CredentialRefreshResult> => {\n  const inFlight = inFlightRefreshByCredentialId.get(oauthCredentialId);\n  if (inFlight) {\n    return inFlight;\n  }\n\n  const lockKey = `${REFRESH_LOCK_PREFIX}${oauthCredentialId}`;\n  const refreshTask = executeWithDistributedLock(lockStore, lockKey, runRefresh).finally(() => {\n    if (inFlightRefreshByCredentialId.get(oauthCredentialId) === refreshTask) {\n      inFlightRefreshByCredentialId.delete(oauthCredentialId);\n    }\n  });\n\n  inFlightRefreshByCredentialId.set(oauthCredentialId, refreshTask);\n\n  return refreshTask;\n};\n\nexport { runWithCredentialRefreshLock };\nexport type { CredentialRefreshResult, RefreshLockStore };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/source-provider.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { TOKEN_REFRESH_BUFFER_MS } from \"@keeper.sh/constants\";\nimport { eq } from \"drizzle-orm\";\nimport type { OAuthSourceConfig, SourceEvent, SourceSyncResult } from \"../types\";\nimport type { OAuthTokenProvider } from \"./token-provider\";\nimport { isOAuthReauthRequiredError } from \"./error-classification\";\nimport { runWithCredentialRefreshLock } from \"./refresh-coordinator\";\n\nconst MS_PER_SECOND = 1000;\n\ninterface FetchEventsResult {\n  events: SourceEvent[];\n  nextSyncToken?: string;\n  fullSyncRequired?: boolean;\n  isDeltaSync?: boolean;\n  cancelledEventUids?: string[];\n}\n\ninterface ProcessEventsOptions {\n  nextSyncToken?: string;\n  isDeltaSync?: boolean;\n  cancelledEventUids?: string[];\n}\n\nabstract class OAuthSourceProvider<TConfig extends OAuthSourceConfig = OAuthSourceConfig> {\n  abstract readonly name: string;\n  abstract readonly providerId: string;\n\n  protected config: TConfig;\n  protected currentAccessToken: string;\n  protected abstract oauthProvider: OAuthTokenProvider;\n\n  constructor(config: TConfig) {\n    this.config = config;\n    this.currentAccessToken = config.accessToken;\n  }\n\n  abstract fetchEvents(syncToken: string | null): Promise<FetchEventsResult>;\n\n  async sync(): Promise<SourceSyncResult> {\n    await this.ensureValidToken();\n\n    const result = await this.fetchEvents(this.config.syncToken);\n\n    if (result.fullSyncRequired) {\n      await this.clearSyncToken();\n      const fullResult = await this.fetchEvents(null);\n      return this.processEvents(fullResult.events, {\n        cancelledEventUids: fullResult.cancelledEventUids,\n        isDeltaSync: fullResult.isDeltaSync,\n        nextSyncToken: fullResult.nextSyncToken,\n      });\n    }\n\n    const processResult = await this.processEvents(result.events, {\n      cancelledEventUids: result.cancelledEventUids,\n      isDeltaSync: result.isDeltaSync,\n      nextSyncToken: result.nextSyncToken,\n    });\n\n    if (processResult.fullSyncRequired) {\n      const fullResult = await this.fetchEvents(null);\n      return this.processEvents(fullResult.events, {\n        cancelledEventUids: fullResult.cancelledEventUids,\n        isDeltaSync: false,\n        nextSyncToken: fullResult.nextSyncToken,\n      });\n    }\n\n    return processResult;\n  }\n\n  protected abstract processEvents(\n    events: SourceEvent[],\n    options: ProcessEventsOptions,\n  ): Promise<SourceSyncResult>;\n\n  protected async clearSyncToken(): Promise<void> {\n    const { database, calendarId } = this.config;\n    await database\n      .update(calendarsTable)\n      .set({ syncToken: null })\n      .where(eq(calendarsTable.id, calendarId));\n  }\n\n  protected async updateSyncToken(syncToken: string): Promise<void> {\n    const { database, calendarId } = this.config;\n    await database\n      .update(calendarsTable)\n      .set({ syncToken })\n      .where(eq(calendarsTable.id, calendarId));\n  }\n\n  protected async markNeedsReauthentication(): Promise<void> {\n    const { database, calendarAccountId } = this.config;\n\n    await database\n      .update(calendarAccountsTable)\n      .set({ needsReauthentication: true })\n      .where(eq(calendarAccountsTable.id, calendarAccountId));\n  }\n\n  protected async ensureValidToken(): Promise<void> {\n    const {\n      database,\n      accessTokenExpiresAt,\n      refreshToken,\n      oauthCredentialId,\n    } = this.config;\n\n    if (accessTokenExpiresAt.getTime() > Date.now() + TOKEN_REFRESH_BUFFER_MS) {\n      return;\n    }\n\n    const tokenData = await runWithCredentialRefreshLock(oauthCredentialId, async () => {\n      try {\n        return await this.oauthProvider.refreshAccessToken(refreshToken);\n      } catch (error) {\n        if (isOAuthReauthRequiredError(error)) {\n          await this.markNeedsReauthentication();\n        }\n        throw error;\n      }\n    }, this.config.refreshLockStore ?? null);\n\n    const newExpiresAt = new Date(Date.now() + tokenData.expires_in * MS_PER_SECOND);\n\n    await database\n      .update(oauthCredentialsTable)\n      .set({\n        accessToken: tokenData.access_token,\n        expiresAt: newExpiresAt,\n        refreshToken: tokenData.refresh_token ?? refreshToken,\n      })\n      .where(eq(oauthCredentialsTable.id, oauthCredentialId));\n\n    this.currentAccessToken = tokenData.access_token;\n    this.config.accessTokenExpiresAt = newExpiresAt;\n  }\n\n  protected get headers(): Record<string, string> {\n    return {\n      Authorization: `Bearer ${this.currentAccessToken}`,\n      \"Content-Type\": \"application/json\",\n    };\n  }\n}\n\nexport { OAuthSourceProvider };\nexport type { FetchEventsResult, ProcessEventsOptions };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/state.ts",
    "content": "import { MS_PER_MINUTE } from \"@keeper.sh/constants\";\n\nconst STATE_EXPIRY_MINUTES = 10;\nconst STATE_PREFIX = \"oauth:state:\";\nconst MS_PER_SECOND = 1000;\n\ninterface PendingState {\n  userId: string;\n  destinationId: string | null;\n  sourceCredentialId: string | null;\n  expiresAt: number;\n}\n\ninterface ValidatedState {\n  userId: string;\n  destinationId: string | null;\n  sourceCredentialId: string | null;\n}\n\ninterface GenerateStateOptions {\n  destinationId?: string;\n  sourceCredentialId?: string;\n}\n\ninterface OAuthStateStore {\n  set(key: string, value: string, ttlSeconds: number): Promise<void>;\n  consume(key: string): Promise<string | null>;\n}\n\nconst getStateKey = (state: string): string => `${STATE_PREFIX}${state}`;\n\nconst STATE_EXPIRY_SECONDS = STATE_EXPIRY_MINUTES * MS_PER_MINUTE / MS_PER_SECOND;\n\nconst generateState = async (\n  store: OAuthStateStore,\n  userId: string,\n  options?: GenerateStateOptions,\n): Promise<string> => {\n  const state = crypto.randomUUID();\n  const pendingState: PendingState = {\n    destinationId: options?.destinationId ?? null,\n    expiresAt: Date.now() + STATE_EXPIRY_MINUTES * MS_PER_MINUTE,\n    sourceCredentialId: options?.sourceCredentialId ?? null,\n    userId,\n  };\n\n  await store.set(getStateKey(state), JSON.stringify(pendingState), STATE_EXPIRY_SECONDS);\n  return state;\n};\n\nconst validateState = async (\n  store: OAuthStateStore,\n  state: string,\n): Promise<ValidatedState | null> => {\n  const raw = await store.consume(getStateKey(state));\n  if (!raw) {\n    return null;\n  }\n\n  const entry: PendingState = JSON.parse(raw);\n\n  if (Date.now() > entry.expiresAt) {\n    return null;\n  }\n\n  return {\n    destinationId: entry.destinationId,\n    sourceCredentialId: entry.sourceCredentialId,\n    userId: entry.userId,\n  };\n};\n\nexport { generateState, validateState };\nexport type { ValidatedState, GenerateStateOptions, OAuthStateStore };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/sync-token.ts",
    "content": "const VERSIONED_SYNC_TOKEN_PREFIX = \"keeper:sync-token:\";\nconst LEGACY_SYNC_WINDOW_VERSION = 0;\n\ninterface DecodedSyncToken {\n  syncToken: string;\n  syncWindowVersion: number;\n}\n\ninterface ResolvedSyncToken {\n  syncToken: string | null;\n  requiresBackfill: boolean;\n}\n\nconst parseVersionNumber = (value: string): number => {\n  const parsed = Number.parseInt(value, 10);\n  if (!Number.isFinite(parsed) || parsed < LEGACY_SYNC_WINDOW_VERSION) {\n    return LEGACY_SYNC_WINDOW_VERSION;\n  }\n  return parsed;\n};\n\nconst decodeStoredSyncToken = (storedSyncToken: string): DecodedSyncToken => {\n  if (!storedSyncToken.startsWith(VERSIONED_SYNC_TOKEN_PREFIX)) {\n    return {\n      syncToken: storedSyncToken,\n      syncWindowVersion: LEGACY_SYNC_WINDOW_VERSION,\n    };\n  }\n\n  const serializedValue = storedSyncToken.slice(VERSIONED_SYNC_TOKEN_PREFIX.length);\n  const separatorIndex = serializedValue.indexOf(\":\");\n\n  if (separatorIndex <= 0 || separatorIndex === serializedValue.length - 1) {\n    return {\n      syncToken: storedSyncToken,\n      syncWindowVersion: LEGACY_SYNC_WINDOW_VERSION,\n    };\n  }\n\n  const versionValue = serializedValue.slice(0, separatorIndex);\n  const encodedTokenValue = serializedValue.slice(separatorIndex + 1);\n\n  try {\n    const decodedToken = Buffer.from(encodedTokenValue, \"base64url\").toString(\"utf8\");\n    if (decodedToken.length === 0) {\n      return {\n        syncToken: storedSyncToken,\n        syncWindowVersion: LEGACY_SYNC_WINDOW_VERSION,\n      };\n    }\n\n    return {\n      syncToken: decodedToken,\n      syncWindowVersion: parseVersionNumber(versionValue),\n    };\n  } catch {\n    return {\n      syncToken: storedSyncToken,\n      syncWindowVersion: LEGACY_SYNC_WINDOW_VERSION,\n    };\n  }\n};\n\nconst encodeStoredSyncToken = (\n  syncToken: string,\n  syncWindowVersion: number,\n): string => {\n  const encodedTokenValue = Buffer.from(syncToken, \"utf8\").toString(\"base64url\");\n  const normalizedVersion = parseVersionNumber(String(syncWindowVersion));\n  return `${VERSIONED_SYNC_TOKEN_PREFIX}${normalizedVersion}:${encodedTokenValue}`;\n};\n\nconst resolveSyncTokenForWindow = (\n  storedSyncToken: string | null,\n  requiredSyncWindowVersion: number,\n): ResolvedSyncToken => {\n  if (storedSyncToken === null) {\n    return {\n      requiresBackfill: false,\n      syncToken: null,\n    };\n  }\n\n  const decodedSyncToken = decodeStoredSyncToken(storedSyncToken);\n  if (decodedSyncToken.syncWindowVersion < requiredSyncWindowVersion) {\n    return {\n      requiresBackfill: true,\n      syncToken: null,\n    };\n  }\n\n  return {\n    requiresBackfill: false,\n    syncToken: decodedSyncToken.syncToken,\n  };\n};\n\nexport { decodeStoredSyncToken, encodeStoredSyncToken, resolveSyncTokenForWindow };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/sync-window.ts",
    "content": "import { MS_PER_DAY } from \"@keeper.sh/constants\";\n\nconst getStartOfToday = (): Date => {\n  const today = new Date();\n  today.setHours(0, 0, 0, 0);\n  return today;\n};\n\nconst OAUTH_SYNC_LOOKBACK_DAYS = 7;\nconst OAUTH_SYNC_WINDOW_VERSION = 3;\nconst OAUTH_SYNC_LOOKBACK_MS = OAUTH_SYNC_LOOKBACK_DAYS * MS_PER_DAY;\n\ninterface OAuthSyncWindow {\n  timeMin: Date;\n  timeMax: Date;\n}\n\nconst getOAuthSyncWindowStart = (startOfToday: Date = getStartOfToday()): Date =>\n  new Date(startOfToday.getTime() - OAUTH_SYNC_LOOKBACK_MS);\n\nconst getOAuthSyncWindow = (\n  yearsUntilFuture: number,\n  startOfToday: Date = getStartOfToday(),\n): OAuthSyncWindow => {\n  const timeMin = getOAuthSyncWindowStart(startOfToday);\n  const timeMax = new Date(startOfToday);\n  timeMax.setFullYear(timeMax.getFullYear() + yearsUntilFuture);\n  return { timeMax, timeMin };\n};\n\nexport { OAUTH_SYNC_WINDOW_VERSION, getOAuthSyncWindowStart, getOAuthSyncWindow };\n"
  },
  {
    "path": "packages/calendar/src/core/oauth/token-provider.ts",
    "content": "interface OAuthRefreshResult {\n  access_token: string;\n  refresh_token?: string;\n  expires_in: number;\n}\n\ninterface OAuthTokenProvider {\n  refreshAccessToken: (refreshToken: string) => Promise<OAuthRefreshResult>;\n}\n\nexport type { OAuthRefreshResult, OAuthTokenProvider };\n"
  },
  {
    "path": "packages/calendar/src/core/source/event-diff.ts",
    "content": "import type { SourceEvent } from \"../types\";\n\ninterface ExistingSourceEventState {\n  availability?: string | null;\n  id: string;\n  isAllDay?: boolean | null;\n  sourceEventType?: string | null;\n  sourceEventUid: string | null;\n  startTime: Date;\n  endTime: Date;\n}\n\ninterface SourceEventDiffOptions {\n  isDeltaSync?: boolean;\n  cancelledEventUids?: string[];\n}\n\ninterface SourceEventIdentityOptions {\n  normalizeMissingMetadata?: boolean;\n}\n\nconst normalizeIdentityIsAllDay = (\n  isAllDay: boolean | null | undefined,\n  options: SourceEventIdentityOptions,\n): string => {\n  if (options.normalizeMissingMetadata) {\n    return String(isAllDay ?? false);\n  }\n\n  return String(isAllDay);\n};\n\nconst buildSourceEventIdentityKey = (\n  sourceEventUid: string,\n  startTime: Date,\n  endTime: Date,\n  isAllDay?: boolean | null,\n  availability?: string | null,\n  sourceEventType?: string | null,\n  options: SourceEventIdentityOptions = {},\n): string =>\n  `${sourceEventUid}|${startTime.toISOString()}|${endTime.toISOString()}|${\n    normalizeIdentityIsAllDay(isAllDay, options)\n  }|${availability ?? \"\"}|${sourceEventType ?? \"default\"}`;\n\nconst buildSourceEventStorageIdentityKey = (\n  sourceEventUid: string,\n  startTime: Date,\n  endTime: Date,\n): string => `${sourceEventUid}|${startTime.toISOString()}|${endTime.toISOString()}`;\n\nconst deduplicateIncomingEvents = (incomingEvents: SourceEvent[]): SourceEvent[] => {\n  const dedupedByStorageIdentity = new Map<string, SourceEvent>();\n\n  for (const incomingEvent of incomingEvents) {\n    const storageIdentity = buildSourceEventStorageIdentityKey(\n      incomingEvent.uid,\n      incomingEvent.startTime,\n      incomingEvent.endTime,\n    );\n    dedupedByStorageIdentity.set(storageIdentity, incomingEvent);\n  }\n\n  return [...dedupedByStorageIdentity.values()];\n};\n\nconst buildExistingEventIdentitySet = (\n  existingEvents: ExistingSourceEventState[],\n  options: SourceEventIdentityOptions = {},\n): Set<string> => {\n  const identities = new Set<string>();\n\n  for (const existingEvent of existingEvents) {\n    if (existingEvent.sourceEventUid === null) {\n      continue;\n    }\n\n    identities.add(\n      buildSourceEventIdentityKey(\n        existingEvent.sourceEventUid,\n        existingEvent.startTime,\n        existingEvent.endTime,\n        existingEvent.isAllDay,\n        existingEvent.availability,\n        existingEvent.sourceEventType,\n        options,\n      ),\n    );\n  }\n\n  return identities;\n};\n\nconst buildSourceEventsToAdd = (\n  existingEvents: ExistingSourceEventState[],\n  incomingEvents: SourceEvent[],\n  options: SourceEventDiffOptions = {},\n): SourceEvent[] => {\n  const normalizedIncomingEvents = deduplicateIncomingEvents(incomingEvents);\n  const existingIdentities = buildExistingEventIdentitySet(existingEvents, {\n    normalizeMissingMetadata: options.isDeltaSync ?? false,\n  });\n\n  return normalizedIncomingEvents.filter(\n    (incomingEvent) =>\n      !existingIdentities.has(\n        buildSourceEventIdentityKey(\n          incomingEvent.uid,\n          incomingEvent.startTime,\n          incomingEvent.endTime,\n          incomingEvent.isAllDay,\n          incomingEvent.availability,\n          incomingEvent.sourceEventType,\n          { normalizeMissingMetadata: options.isDeltaSync ?? false },\n        ),\n      ),\n  );\n};\n\nconst buildSourceEventStateIdsToRemove = (\n  existingEvents: ExistingSourceEventState[],\n  incomingEvents: SourceEvent[],\n  options: SourceEventDiffOptions = {},\n): string[] => {\n  const normalizedIncomingEvents = deduplicateIncomingEvents(incomingEvents);\n  const { isDeltaSync = false, cancelledEventUids } = options;\n\n  if (isDeltaSync) {\n    if (!cancelledEventUids || cancelledEventUids.length === 0) {\n      return [];\n    }\n\n    const cancelledUidSet = new Set(cancelledEventUids);\n\n    return existingEvents\n      .filter(\n        (existingEvent) =>\n          existingEvent.sourceEventUid !== null\n          && cancelledUidSet.has(existingEvent.sourceEventUid),\n      )\n      .map((existingEvent) => existingEvent.id);\n  }\n\n  const incomingStorageIdentitySet = new Set(\n    normalizedIncomingEvents.map((incomingEvent) =>\n      buildSourceEventStorageIdentityKey(\n        incomingEvent.uid,\n        incomingEvent.startTime,\n        incomingEvent.endTime,\n      )),\n  );\n\n  return existingEvents\n    .filter((existingEvent) => {\n      if (existingEvent.sourceEventUid === null) {\n        return false;\n      }\n\n      const existingStorageIdentityKey = buildSourceEventStorageIdentityKey(\n        existingEvent.sourceEventUid,\n        existingEvent.startTime,\n        existingEvent.endTime,\n      );\n\n      return !incomingStorageIdentitySet.has(existingStorageIdentityKey);\n    })\n    .map((existingEvent) => existingEvent.id);\n};\n\nexport {\n  buildSourceEventIdentityKey,\n  buildSourceEventsToAdd,\n  buildSourceEventStateIdsToRemove,\n};\nexport type { ExistingSourceEventState, SourceEventDiffOptions };\n"
  },
  {
    "path": "packages/calendar/src/core/source/sync-diagnostics.ts",
    "content": "import type { SourceEvent } from \"../types\";\nimport type { ExistingSourceEventState } from \"./event-diff\";\n\ninterface OAuthSyncWindow {\n  timeMin: Date;\n  timeMax: Date;\n}\n\ninterface SourceEventsInWindowResult {\n  events: SourceEvent[];\n  filteredCount: number;\n}\n\ninterface SourceEventStoragePartition {\n  eventsToInsert: SourceEvent[];\n  eventsToUpdate: SourceEvent[];\n}\n\ninterface SourceSyncTokenAction {\n  nextSyncTokenToPersist?: string;\n  shouldResetSyncToken: boolean;\n}\n\nconst isSourceEventInWindow = (event: SourceEvent, syncWindow: OAuthSyncWindow): boolean =>\n  event.endTime >= syncWindow.timeMin && event.startTime <= syncWindow.timeMax;\n\nconst filterSourceEventsToSyncWindow = (\n  events: SourceEvent[],\n  syncWindow: OAuthSyncWindow,\n): SourceEventsInWindowResult => {\n  const eventsInWindow = events.filter((event) => isSourceEventInWindow(event, syncWindow));\n  return {\n    events: eventsInWindow,\n    filteredCount: events.length - eventsInWindow.length,\n  };\n};\n\nconst buildSourceEventStorageIdentityKey = (\n  uid: string,\n  startTime: Date,\n  endTime: Date,\n): string => `${uid}|${startTime.toISOString()}|${endTime.toISOString()}`;\n\nconst splitSourceEventsByStorageIdentity = (\n  existingEvents: ExistingSourceEventState[],\n  eventsToAdd: SourceEvent[],\n): SourceEventStoragePartition => {\n  const existingStorageIdentities = new Set(\n    existingEvents.flatMap((event) => {\n      if (event.sourceEventUid === null) {\n        return [];\n      }\n      return [\n        buildSourceEventStorageIdentityKey(\n          event.sourceEventUid,\n          event.startTime,\n          event.endTime,\n        ),\n      ];\n    }),\n  );\n\n  const eventsToInsert: SourceEvent[] = [];\n  const eventsToUpdate: SourceEvent[] = [];\n\n  for (const event of eventsToAdd) {\n    const storageIdentity = buildSourceEventStorageIdentityKey(\n      event.uid,\n      event.startTime,\n      event.endTime,\n    );\n\n    if (existingStorageIdentities.has(storageIdentity)) {\n      eventsToUpdate.push(event);\n      continue;\n    }\n\n    eventsToInsert.push(event);\n  }\n\n  return { eventsToInsert, eventsToUpdate };\n};\n\nconst resolveSourceSyncTokenAction = (\n  nextSyncToken: string | undefined,\n  isDeltaSync: boolean | undefined,\n): SourceSyncTokenAction => {\n  if (nextSyncToken) {\n    return { nextSyncTokenToPersist: nextSyncToken, shouldResetSyncToken: false };\n  }\n\n  if (isDeltaSync) {\n    return { shouldResetSyncToken: true };\n  }\n\n  return { shouldResetSyncToken: false };\n};\n\nexport {\n  filterSourceEventsToSyncWindow,\n  resolveSourceSyncTokenAction,\n  splitSourceEventsByStorageIdentity,\n};\nexport type {\n  OAuthSyncWindow,\n  SourceEventsInWindowResult,\n  SourceEventStoragePartition,\n  SourceSyncTokenAction,\n};\n"
  },
  {
    "path": "packages/calendar/src/core/source/write-event-states.ts",
    "content": "import { eventStatesTable } from \"@keeper.sh/database/schema\";\nimport { sql } from \"drizzle-orm\";\n\nconst EMPTY_ROW_COUNT = 0;\n\ntype EventStateInsertRow = typeof eventStatesTable.$inferInsert;\n\nconst EVENT_STATE_CONFLICT_TARGET: [\n  typeof eventStatesTable.calendarId,\n  typeof eventStatesTable.sourceEventUid,\n  typeof eventStatesTable.startTime,\n  typeof eventStatesTable.endTime,\n] = [\n  eventStatesTable.calendarId,\n  eventStatesTable.sourceEventUid,\n  eventStatesTable.startTime,\n  eventStatesTable.endTime,\n];\n\nconst excludedColumn = (columnName: string) => sql.raw(`excluded.\"${columnName}\"`);\n\nconst EVENT_STATE_CONFLICT_SET = {\n  availability: excludedColumn(eventStatesTable.availability.name),\n  description: excludedColumn(eventStatesTable.description.name),\n  exceptionDates: excludedColumn(eventStatesTable.exceptionDates.name),\n  isAllDay: excludedColumn(eventStatesTable.isAllDay.name),\n  location: excludedColumn(eventStatesTable.location.name),\n  recurrenceRule: excludedColumn(eventStatesTable.recurrenceRule.name),\n  sourceEventType: excludedColumn(eventStatesTable.sourceEventType.name),\n  startTimeZone: excludedColumn(eventStatesTable.startTimeZone.name),\n  title: excludedColumn(eventStatesTable.title.name),\n};\n\ninterface EventStateInsertClient {\n  insert: (table: typeof eventStatesTable) => {\n    values: (rows: EventStateInsertRow[]) => {\n      onConflictDoUpdate: (config: {\n        target: typeof EVENT_STATE_CONFLICT_TARGET;\n        set: typeof EVENT_STATE_CONFLICT_SET;\n      }) => Promise<unknown>;\n    };\n  };\n}\n\nconst insertEventStatesWithConflictResolution = async (\n  database: EventStateInsertClient,\n  rows: EventStateInsertRow[],\n): Promise<void> => {\n  if (rows.length === EMPTY_ROW_COUNT) {\n    return;\n  }\n\n  await database\n    .insert(eventStatesTable)\n    .values(rows)\n    .onConflictDoUpdate({\n      set: EVENT_STATE_CONFLICT_SET,\n      target: EVENT_STATE_CONFLICT_TARGET,\n    });\n};\n\nexport { insertEventStatesWithConflictResolution };\nexport type { EventStateInsertRow, EventStateInsertClient };\n"
  },
  {
    "path": "packages/calendar/src/core/sync/aggregate-runtime.ts",
    "content": "import { SYNC_TTL_SECONDS } from \"@keeper.sh/constants\";\nimport type Redis from \"ioredis\";\nimport type { DestinationSyncResult, SyncProgressUpdate } from \"./types\";\nimport { SyncAggregateTracker } from \"./aggregate-tracker\";\nimport type { SyncAggregateMessage, SyncAggregateSnapshot } from \"./aggregate-tracker\";\n\nconst SYNC_AGGREGATE_LATEST_KEY_PREFIX = \"sync:aggregate:latest:\";\nconst SYNC_AGGREGATE_SEQUENCE_KEY_PREFIX = \"sync:aggregate:seq:\";\n\ninterface SyncAggregateRuntimeConfig {\n  redis: Redis;\n  broadcast: (userId: string, eventName: string, data: unknown) => void;\n  persistSyncStatus: (result: DestinationSyncResult, syncedAt: Date) => Promise<void>;\n  tracker?: SyncAggregateTracker;\n}\n\ninterface SyncAggregateRuntime {\n  emitSyncAggregate: (userId: string, aggregate: SyncAggregateMessage) => Promise<void>;\n  onDestinationSync: (result: DestinationSyncResult) => Promise<void>;\n  onSyncProgress: (update: SyncProgressUpdate) => void;\n  holdSyncing: (userId: string) => void;\n  releaseSyncing: (userId: string) => Promise<void>;\n  getCurrentSyncAggregate: (\n    userId: string,\n    fallback?: Omit<SyncAggregateSnapshot, \"syncing\">,\n  ) => SyncAggregateMessage;\n  getCachedSyncAggregate: (userId: string) => Promise<SyncAggregateMessage | null>;\n}\n\nconst getSyncAggregateLatestKey = (userId: string): string =>\n  `${SYNC_AGGREGATE_LATEST_KEY_PREFIX}${userId}`;\n\nconst getSyncAggregateSequenceKey = (userId: string): string =>\n  `${SYNC_AGGREGATE_SEQUENCE_KEY_PREFIX}${userId}`;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst isNumberField = (value: unknown): value is number => typeof value === \"number\";\n\nconst isSyncAggregateMessage = (value: unknown): value is SyncAggregateMessage => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  if (\"lastSyncedAt\" in value) {\n    const { lastSyncedAt } = value;\n    if (lastSyncedAt !== null && typeof lastSyncedAt !== \"string\") {\n      return false;\n    }\n  }\n\n  return (\n    isNumberField(value.progressPercent) &&\n    isNumberField(value.seq) &&\n    isNumberField(value.syncEventsProcessed) &&\n    isNumberField(value.syncEventsRemaining) &&\n    isNumberField(value.syncEventsTotal) &&\n    typeof value.syncing === \"boolean\"\n  );\n};\n\nconst createSyncAggregateRuntime = (config: SyncAggregateRuntimeConfig): SyncAggregateRuntime => {\n  const tracker = config.tracker ?? new SyncAggregateTracker();\n\n  const emitSyncAggregate = async (\n    userId: string,\n    aggregate: SyncAggregateMessage,\n  ): Promise<void> => {\n    try {\n      const sequenceKey = getSyncAggregateSequenceKey(userId);\n      const sequence = await config.redis.incr(sequenceKey);\n      await config.redis.expire(sequenceKey, SYNC_TTL_SECONDS);\n\n      const payload: SyncAggregateMessage = { ...aggregate, seq: sequence };\n\n      const latestKey = getSyncAggregateLatestKey(userId);\n      await config.redis.set(latestKey, JSON.stringify(payload));\n      await config.redis.expire(latestKey, SYNC_TTL_SECONDS);\n\n      config.broadcast(userId, \"sync:aggregate\", payload);\n    } catch {\n      config.broadcast(userId, \"sync:aggregate\", aggregate);\n    }\n  };\n\n  const onDestinationSync = async (result: DestinationSyncResult): Promise<void> => {\n    if (result.broadcast === false) {\n      return;\n    }\n\n    const syncedAt = new Date();\n    await config.persistSyncStatus(result, syncedAt);\n\n    const aggregate = tracker.trackDestinationSync(result, syncedAt.toISOString());\n    if (aggregate) {\n      await emitSyncAggregate(result.userId, aggregate);\n    }\n  };\n\n  const onSyncProgress = (update: SyncProgressUpdate): void => {\n    const aggregate = tracker.trackProgress(update);\n    if (aggregate) {\n      // Error handling is internal to emitSyncAggregate\n      const _pending = emitSyncAggregate(update.userId, aggregate);\n    }\n  };\n\n  const getCurrentSyncAggregate = (\n    userId: string,\n    fallback?: Omit<SyncAggregateSnapshot, \"syncing\">,\n  ): SyncAggregateMessage => tracker.getCurrentAggregate(userId, fallback);\n\n  const getCachedSyncAggregate = async (\n    userId: string,\n  ): Promise<SyncAggregateMessage | null> => {\n    try {\n      const value = await config.redis.get(getSyncAggregateLatestKey(userId));\n      if (!value) {\n        return null;\n      }\n\n      const parsed: unknown = JSON.parse(value);\n      if (isSyncAggregateMessage(parsed)) {\n        return parsed;\n      }\n      return null;\n    } catch {\n      return null;\n    }\n  };\n\n  const holdSyncing = (userId: string): void => {\n    tracker.holdSyncing(userId);\n  };\n\n  const releaseSyncing = async (userId: string): Promise<void> => {\n    tracker.releaseSyncing(userId);\n\n    const aggregate = tracker.getCurrentAggregate(userId);\n    await emitSyncAggregate(userId, aggregate);\n  };\n\n  return {\n    emitSyncAggregate,\n    onDestinationSync,\n    onSyncProgress,\n    holdSyncing,\n    releaseSyncing,\n    getCurrentSyncAggregate,\n    getCachedSyncAggregate,\n  };\n};\n\nexport { createSyncAggregateRuntime };\nexport type { SyncAggregateRuntimeConfig, SyncAggregateRuntime };\n"
  },
  {
    "path": "packages/calendar/src/core/sync/aggregate-tracker.ts",
    "content": "import type { DestinationSyncResult, SyncProgressUpdate } from \"./types\";\n\ninterface CalendarOperationProgress {\n  processed: number;\n  status: \"syncing\" | \"idle\" | \"error\";\n  total: number;\n}\n\ninterface SyncAggregateSnapshot {\n  lastSyncedAt?: string | null;\n  progressPercent: number;\n  syncEventsProcessed: number;\n  syncEventsRemaining: number;\n  syncEventsTotal: number;\n  syncing: boolean;\n}\n\ninterface SyncAggregateMessage extends SyncAggregateSnapshot {\n  seq: number;\n}\n\ninterface SyncAggregateTrackerConfig {\n  progressThrottleMs?: number;\n}\n\nconst DEFAULT_PROGRESS_THROTTLE_MS = 350;\nconst INITIAL_COUNT = 0;\nconst INITIAL_SEQUENCE = 0;\nconst PERCENT_MULTIPLIER = 100;\n\nclass SyncAggregateTracker {\n  private readonly progressThrottleMs: number;\n  private readonly progressByUser = new Map<string, Map<string, CalendarOperationProgress>>();\n  private readonly lastProgressEmitAtByUser = new Map<string, number>();\n  private readonly lastPayloadKeyByUser = new Map<string, string>();\n  private readonly sequenceByUser = new Map<string, number>();\n  private readonly highWaterPercentByUser = new Map<string, number>();\n  private readonly syncingHeldByUser = new Set<string>();\n\n  constructor(config?: SyncAggregateTrackerConfig) {\n    this.progressThrottleMs = config?.progressThrottleMs ?? DEFAULT_PROGRESS_THROTTLE_MS;\n  }\n\n  private getUserProgress(userId: string): Map<string, CalendarOperationProgress> {\n    let progress = this.progressByUser.get(userId);\n    if (progress) {\n      return progress;\n    }\n\n    progress = new Map();\n    this.progressByUser.set(userId, progress);\n    return progress;\n  }\n\n  private static clampProgress(processed: number, total: number): number {\n    if (processed < INITIAL_COUNT) {\n      return INITIAL_COUNT;\n    }\n    if (processed > total) {\n      return total;\n    }\n    return processed;\n  }\n\n  private static calculatePercent(processed: number, total: number, syncing: boolean): number {\n    if (total === INITIAL_COUNT) {\n      if (syncing) {\n        return INITIAL_COUNT;\n      }\n      return PERCENT_MULTIPLIER;\n    }\n    return (processed / total) * PERCENT_MULTIPLIER;\n  }\n\n  private static mergeProgressEntry(\n    current: CalendarOperationProgress | undefined,\n    update: SyncProgressUpdate,\n  ): CalendarOperationProgress {\n    const currentProcessed = current?.processed ?? INITIAL_COUNT;\n    const currentTotal = current?.total ?? INITIAL_COUNT;\n\n    const nextTotal = update.progress?.total ?? currentTotal;\n    const nextProcessedRaw = update.progress?.current ?? currentProcessed;\n    const nextProcessed = SyncAggregateTracker.clampProgress(nextProcessedRaw, nextTotal);\n\n    if (update.status === \"error\") {\n      return {\n        processed: nextProcessed,\n        status: \"error\",\n        total: nextTotal,\n      };\n    }\n\n    return {\n      processed: nextProcessed,\n      status: \"syncing\",\n      total: nextTotal,\n    };\n  }\n\n  private static finalizeEntry(\n    current: CalendarOperationProgress | undefined,\n  ): CalendarOperationProgress {\n    const total = current?.total ?? INITIAL_COUNT;\n    let processed = current?.processed ?? INITIAL_COUNT;\n    if (total > INITIAL_COUNT) {\n      processed = total;\n    }\n\n    return {\n      processed,\n      status: \"idle\",\n      total,\n    };\n  }\n\n  private computeSnapshot(\n    userId: string,\n    options?: { fallback?: Omit<SyncAggregateSnapshot, \"syncing\">; lastSyncedAt?: string | null },\n  ): SyncAggregateSnapshot {\n    const progress = this.progressByUser.get(userId);\n\n    if (!progress || progress.size === INITIAL_COUNT) {\n      const fallback = options?.fallback ?? {\n        progressPercent: PERCENT_MULTIPLIER,\n        syncEventsProcessed: INITIAL_COUNT,\n        syncEventsRemaining: INITIAL_COUNT,\n        syncEventsTotal: INITIAL_COUNT,\n      };\n\n      return {\n        ...fallback,\n        syncing: false,\n      };\n    }\n\n    let syncEventsProcessed = INITIAL_COUNT;\n    let syncEventsTotal = INITIAL_COUNT;\n    let syncing = false;\n\n    for (const entry of progress.values()) {\n      syncEventsProcessed += entry.processed;\n      syncEventsTotal += entry.total;\n      if (entry.status === \"syncing\") {\n        syncing = true;\n      }\n    }\n\n    if (!syncing && this.syncingHeldByUser.has(userId)) {\n      syncing = true;\n    }\n\n    const syncEventsRemaining = Math.max(syncEventsTotal - syncEventsProcessed, INITIAL_COUNT);\n    let progressPercent = SyncAggregateTracker.calculatePercent(\n      syncEventsProcessed,\n      syncEventsTotal,\n      syncing,\n    );\n\n    if (syncing) {\n      const highWater = this.highWaterPercentByUser.get(userId) ?? INITIAL_COUNT;\n      if (progressPercent < highWater) {\n        progressPercent = highWater;\n      }\n    }\n\n    return {\n      ...(options && \"lastSyncedAt\" in options && { lastSyncedAt: options.lastSyncedAt }),\n      progressPercent,\n      syncEventsProcessed,\n      syncEventsRemaining,\n      syncEventsTotal,\n      syncing: syncing && syncEventsRemaining > INITIAL_COUNT,\n    };\n  }\n\n  private static toPayloadKey(payload: SyncAggregateSnapshot): string {\n    return JSON.stringify(payload);\n  }\n\n  private getCurrentSequence(userId: string): number {\n    return this.sequenceByUser.get(userId) ?? INITIAL_SEQUENCE;\n  }\n\n  private nextSequence(userId: string): number {\n    const next = this.getCurrentSequence(userId) + 1;\n    this.sequenceByUser.set(userId, next);\n    return next;\n  }\n\n  private maybeEmit(\n    userId: string,\n    payload: SyncAggregateSnapshot,\n    options?: { now?: number; throttleProgress?: boolean },\n  ): SyncAggregateMessage | null {\n    const payloadKey = SyncAggregateTracker.toPayloadKey(payload);\n    const previousPayloadKey = this.lastPayloadKeyByUser.get(userId);\n    if (payloadKey === previousPayloadKey) {\n      return null;\n    }\n\n    const now = options?.now ?? Date.now();\n    if (options?.throttleProgress) {\n      const lastEmitAt = this.lastProgressEmitAtByUser.get(userId) ?? INITIAL_COUNT;\n      if (now - lastEmitAt < this.progressThrottleMs) {\n        return null;\n      }\n      this.lastProgressEmitAtByUser.set(userId, now);\n    }\n\n    this.lastPayloadKeyByUser.set(userId, payloadKey);\n\n    if (payload.syncing) {\n      this.highWaterPercentByUser.set(userId, payload.progressPercent);\n    } else {\n      this.highWaterPercentByUser.delete(userId);\n    }\n\n    return {\n      ...payload,\n      seq: this.nextSequence(userId),\n    };\n  }\n\n  trackProgress(update: SyncProgressUpdate): SyncAggregateMessage | null {\n    const progress = this.getUserProgress(update.userId);\n\n    const current = progress.get(update.calendarId);\n    const next = SyncAggregateTracker.mergeProgressEntry(current, update);\n    progress.set(update.calendarId, next);\n\n    const payload = this.computeSnapshot(update.userId);\n\n    return this.maybeEmit(update.userId, payload, {\n      now: Date.now(),\n      throttleProgress: update.status === \"syncing\",\n    });\n  }\n\n  trackDestinationSync(\n    result: DestinationSyncResult,\n    lastSyncedAt: string,\n  ): SyncAggregateMessage | null {\n    const progress = this.getUserProgress(result.userId);\n    const current = progress.get(result.calendarId);\n    progress.set(result.calendarId, SyncAggregateTracker.finalizeEntry(current));\n\n    const payload = this.computeSnapshot(result.userId, { lastSyncedAt });\n    return this.maybeEmit(result.userId, payload);\n  }\n\n  holdSyncing(userId: string): void {\n    this.syncingHeldByUser.add(userId);\n  }\n\n  releaseSyncing(userId: string): void {\n    this.syncingHeldByUser.delete(userId);\n  }\n\n  getCurrentAggregate(\n    userId: string,\n    fallback?: Omit<SyncAggregateSnapshot, \"syncing\">,\n  ): SyncAggregateMessage {\n    const payload = this.computeSnapshot(userId, { fallback });\n\n    return {\n      ...payload,\n      seq: this.getCurrentSequence(userId),\n    };\n  }\n}\n\nexport { SyncAggregateTracker };\nexport type { SyncAggregateMessage, SyncAggregateSnapshot, SyncAggregateTrackerConfig };\n"
  },
  {
    "path": "packages/calendar/src/core/sync/operations.ts",
    "content": "import type { EventMapping } from \"../events/mappings\";\nimport type { RemoteEvent, SyncableEvent, SyncOperation } from \"../types\";\nimport { createSyncEventContentHash } from \"../events/content-hash\";\nimport { getOAuthSyncWindowStart } from \"../oauth/sync-window\";\n\ninterface RemoveOperationTimeBoundary {\n  now: Date;\n  syncWindowStart: Date;\n}\n\ninterface StaleMappingResult {\n  staleMappingIds: string[];\n  staleMappedEventIds: Set<string>;\n  staleRemoteMappings: EventMapping[];\n}\n\ninterface ComputeSyncOperationsResult {\n  operations: SyncOperation[];\n  staleMappingIds: string[];\n}\n\nconst getDefaultTimeBoundary = (): RemoveOperationTimeBoundary => ({\n  now: new Date(),\n  syncWindowStart: getOAuthSyncWindowStart(),\n});\n\nconst identifyStaleMappings = (\n  mappings: EventMapping[],\n  localEventIds: Set<string>,\n  remoteEventUids: Set<string>,\n  localEventHashes: Map<string, string>,\n): StaleMappingResult => {\n  const staleMappingIds: string[] = [];\n  const staleMappedEventIds = new Set<string>();\n  const staleRemoteMappings: EventMapping[] = [];\n\n  for (const mapping of mappings) {\n    const localEventExists = localEventIds.has(mapping.eventStateId);\n    const remoteEventExists = remoteEventUids.has(mapping.destinationEventUid);\n\n    if (localEventExists && !remoteEventExists) {\n      staleMappingIds.push(mapping.id);\n      staleMappedEventIds.add(mapping.eventStateId);\n      continue;\n    }\n\n    if (!localEventExists || !remoteEventExists) {\n      continue;\n    }\n\n    const localEventHash = localEventHashes.get(mapping.eventStateId);\n    if (!localEventHash) {\n      continue;\n    }\n\n    if (mapping.syncEventHash !== localEventHash) {\n      staleMappingIds.push(mapping.id);\n      staleRemoteMappings.push(mapping);\n    }\n  }\n\n  return { staleMappedEventIds, staleMappingIds, staleRemoteMappings };\n};\n\nconst buildAddOperations = (\n  localEvents: SyncableEvent[],\n  existingMappings: EventMapping[],\n  staleMappedEventIds: Set<string>,\n): SyncOperation[] => {\n  const operations: SyncOperation[] = [];\n\n  for (const event of localEvents) {\n    const hasMapping = existingMappings.some((mapping) => mapping.eventStateId === event.id);\n    const hasStaleMapping = staleMappedEventIds.has(event.id);\n\n    if (!hasMapping || hasStaleMapping) {\n      operations.push({ event, type: \"add\" });\n    }\n  }\n\n  return operations;\n};\n\nconst buildRemoveOperationsForMappings = (mappings: EventMapping[]): SyncOperation[] =>\n  mappings.map((mapping) => ({\n    deleteId: mapping.deleteIdentifier,\n    startTime: mapping.startTime,\n    type: \"remove\",\n    uid: mapping.destinationEventUid,\n  }));\n\nconst getOperationEventTime = (operation: SyncOperation): Date => {\n  if (operation.type === \"add\") {\n    return operation.event.startTime;\n  }\n  return operation.startTime;\n};\n\nconst getOperationTypePriority = (operation: SyncOperation): number => {\n  if (operation.type === \"remove\") {\n    return 0;\n  }\n  return 1;\n};\n\nconst sortOperationsByTime = (operations: SyncOperation[]): SyncOperation[] =>\n  operations.toSorted((first, second) => {\n    const timeDiff = getOperationEventTime(first).getTime() - getOperationEventTime(second).getTime();\n    if (timeDiff !== 0) {\n      return timeDiff;\n    }\n    return getOperationTypePriority(first) - getOperationTypePriority(second);\n  });\n\nconst buildRemoveOperations = (\n  existingMappings: EventMapping[],\n  remoteEvents: RemoteEvent[],\n  localEventIds: Set<string>,\n  mappedDestinationUids: Set<string>,\n  timeBoundary: RemoveOperationTimeBoundary = getDefaultTimeBoundary(),\n): SyncOperation[] => {\n  const operations: SyncOperation[] = [];\n\n  for (const mapping of existingMappings) {\n    if (mapping.startTime < timeBoundary.syncWindowStart) {\n      continue;\n    }\n\n    if (!localEventIds.has(mapping.eventStateId)) {\n      operations.push({\n        deleteId: mapping.deleteIdentifier,\n        startTime: mapping.startTime,\n        type: \"remove\",\n        uid: mapping.destinationEventUid,\n      });\n    }\n  }\n\n  for (const remoteEvent of remoteEvents) {\n    if (mappedDestinationUids.has(remoteEvent.uid)) {\n      continue;\n    }\n\n    const isOrphanedKeeperEvent = remoteEvent.isKeeperEvent;\n    const isPastEvent = remoteEvent.startTime <= timeBoundary.now;\n\n    if (!isOrphanedKeeperEvent && !isPastEvent) {\n      continue;\n    }\n\n    operations.push({\n      deleteId: remoteEvent.deleteId,\n      startTime: remoteEvent.startTime,\n      type: \"remove\",\n      uid: remoteEvent.uid,\n    });\n  }\n\n  return operations;\n};\n\nconst computeSyncOperations = (\n  localEvents: SyncableEvent[],\n  existingMappings: EventMapping[],\n  remoteEvents: RemoteEvent[],\n  timeBoundary: RemoveOperationTimeBoundary = getDefaultTimeBoundary(),\n): ComputeSyncOperationsResult => {\n  const localEventIds = new Set(localEvents.map((event) => event.id));\n  const localEventHashes = new Map(\n    localEvents.map((event) => [event.id, createSyncEventContentHash(event)]),\n  );\n  const remoteEventUids = new Set(remoteEvents.map((event) => event.uid));\n  const mappedDestinationUids = new Set(\n    existingMappings.map(({ destinationEventUid }) => destinationEventUid),\n  );\n\n  const { staleMappingIds, staleMappedEventIds, staleRemoteMappings } =\n    identifyStaleMappings(existingMappings, localEventIds, remoteEventUids, localEventHashes);\n\n  const addOperations = buildAddOperations(localEvents, existingMappings, staleMappedEventIds);\n\n  const removeOperations = buildRemoveOperations(\n    existingMappings,\n    remoteEvents,\n    localEventIds,\n    mappedDestinationUids,\n    timeBoundary,\n  );\n\n  const staleMappingRemoveOperations = buildRemoveOperationsForMappings(staleRemoteMappings);\n\n  return {\n    operations: sortOperationsByTime([\n      ...addOperations,\n      ...removeOperations,\n      ...staleMappingRemoveOperations,\n    ]),\n    staleMappingIds,\n  };\n};\n\nexport {\n  buildAddOperations,\n  buildRemoveOperations,\n  buildRemoveOperationsForMappings,\n  computeSyncOperations,\n  identifyStaleMappings,\n};\nexport type { ComputeSyncOperationsResult, RemoveOperationTimeBoundary, StaleMappingResult };\n"
  },
  {
    "path": "packages/calendar/src/core/sync/types.ts",
    "content": "interface DestinationSyncResult {\n  userId: string;\n  calendarId: string;\n  localEventCount: number;\n  remoteEventCount: number;\n  broadcast?: boolean;\n}\n\ntype SyncStage = \"fetching\" | \"comparing\" | \"processing\" | \"error\";\n\ninterface SyncProgressUpdate {\n  userId: string;\n  calendarId: string;\n  status: \"syncing\" | \"error\";\n  stage: SyncStage;\n  localEventCount: number;\n  remoteEventCount: number;\n  progress?: { current: number; total: number };\n  lastOperation?: { type: \"add\" | \"remove\"; eventTime: string };\n  inSync: false;\n  error?: string;\n}\n\nexport type { DestinationSyncResult, SyncStage, SyncProgressUpdate };\n"
  },
  {
    "path": "packages/calendar/src/core/sync-engine/flush.ts",
    "content": "import type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport { eventMappingsTable } from \"@keeper.sh/database/schema\";\nimport { inArray } from \"drizzle-orm\";\nimport type { PendingChanges } from \"./types\";\n\nconst FLUSH_BATCH_SIZE = 5000;\n\nconst chunk = <TItem>(items: TItem[], size: number): TItem[][] => {\n  const chunks: TItem[][] = [];\n  for (let offset = 0; offset < items.length; offset += size) {\n    chunks.push(items.slice(offset, offset + size));\n  }\n  return chunks;\n};\n\nconst createDatabaseFlush = (database: BunSQLDatabase): (changes: PendingChanges) => Promise<void> =>\n  async (changes: PendingChanges): Promise<void> => {\n    if (changes.inserts.length === 0 && changes.deletes.length === 0) {\n      return;\n    }\n\n    await database.transaction(async (transaction) => {\n      if (changes.deletes.length > 0) {\n        const deleteBatches = chunk(changes.deletes, FLUSH_BATCH_SIZE);\n        for (const batch of deleteBatches) {\n          await transaction\n            .delete(eventMappingsTable)\n            .where(inArray(eventMappingsTable.id, batch));\n        }\n      }\n\n      if (changes.inserts.length > 0) {\n        const insertBatches = chunk(changes.inserts, FLUSH_BATCH_SIZE);\n        for (const batch of insertBatches) {\n          await transaction.insert(eventMappingsTable).values(\n            batch.map((insert) => ({\n              eventStateId: insert.eventStateId,\n              calendarId: insert.calendarId,\n              destinationEventUid: insert.destinationEventUid,\n              deleteIdentifier: insert.deleteIdentifier,\n              syncEventHash: insert.syncEventHash,\n              startTime: insert.startTime,\n              endTime: insert.endTime,\n            })),\n          ).onConflictDoNothing();\n        }\n      }\n    });\n  };\n\nexport { createDatabaseFlush, FLUSH_BATCH_SIZE };\n"
  },
  {
    "path": "packages/calendar/src/core/sync-engine/generation.ts",
    "content": "interface GenerationStore {\n  incr: (key: string) => Promise<number>;\n  get: (key: string) => Promise<string | null>;\n  expire?: (key: string, seconds: number) => Promise<number>;\n}\n\nconst GENERATION_PREFIX = \"sync:gen:\";\nconst GENERATION_TTL_SECONDS = 86_400;\n\nconst createRedisGenerationCheck = async (\n  store: GenerationStore,\n  calendarId: string,\n): Promise<() => Promise<boolean>> => {\n  const key = `${GENERATION_PREFIX}${calendarId}`;\n  const generation = await store.incr(key);\n\n  if (store.expire) {\n    await store.expire(key, GENERATION_TTL_SECONDS);\n  }\n\n  return async () => {\n    const current = await store.get(key);\n    if (current === null) {\n      return false;\n    }\n    return Number(current) === generation;\n  };\n};\n\nexport { createRedisGenerationCheck, GENERATION_TTL_SECONDS };\nexport type { GenerationStore };\n"
  },
  {
    "path": "packages/calendar/src/core/sync-engine/index.ts",
    "content": "import type { SyncResult, SyncOperation, SyncableEvent, RemoteEvent, PushResult, DeleteResult } from \"../types\";\nimport type { EventMapping } from \"../events/mappings\";\nimport type { SyncProgressUpdate } from \"../sync/types\";\nimport { createSyncEventContentHash } from \"../events/content-hash\";\nimport { computeSyncOperations } from \"../sync/operations\";\nimport type { CalendarSyncProvider, PendingChanges } from \"./types\";\n\nconst resolveOutcome = (superseded: boolean, invalidated: boolean): string => {\n  if (invalidated) {\n    return \"invalidated\";\n  }\n  if (superseded) {\n    return \"superseded\";\n  }\n  return \"success\";\n};\n\ninterface OperationError {\n  type: \"add\" | \"remove\";\n  error: string;\n  statusCode?: number;\n}\n\nconst processAddResults = (\n  addOperations: Extract<SyncOperation, { type: \"add\" }>[],\n  pushResults: PushResult[],\n  calendarId: string,\n): { changes: PendingChanges; added: number; addFailed: number; conflictsResolved: number; errors: OperationError[] } => {\n  const changes: PendingChanges = { inserts: [], deletes: [] };\n  const errors: OperationError[] = [];\n  let added = 0;\n  let addFailed = 0;\n  let conflictsResolved = 0;\n\n  for (let index = 0; index < addOperations.length; index++) {\n    const operation = addOperations[index];\n    const pushResult = pushResults[index];\n\n    if (!operation || !pushResult?.success) {\n      addFailed += 1;\n      if (pushResult?.error) {\n        errors.push({ type: \"add\", error: pushResult.error });\n      }\n      continue;\n    }\n\n    if (!pushResult.remoteId) {\n      continue;\n    }\n\n    added += 1;\n    if (pushResult.conflictResolved) {\n      conflictsResolved += 1;\n    }\n    changes.inserts.push({\n      eventStateId: operation.event.id,\n      calendarId,\n      destinationEventUid: pushResult.remoteId,\n      deleteIdentifier: pushResult.deleteId ?? pushResult.remoteId,\n      syncEventHash: createSyncEventContentHash(operation.event),\n      startTime: operation.event.startTime,\n      endTime: operation.event.endTime,\n    });\n  }\n\n  return { changes, added, addFailed, conflictsResolved, errors };\n};\n\nconst processDeleteResults = (\n  removeOperations: Extract<SyncOperation, { type: \"remove\" }>[],\n  deleteResults: DeleteResult[],\n  mappingsByDestinationUid: Map<string, EventMapping>,\n): { deleteIds: string[]; removed: number; removeFailed: number; errors: OperationError[] } => {\n  const deleteIds: string[] = [];\n  const errors: OperationError[] = [];\n  let removed = 0;\n  let removeFailed = 0;\n\n  for (let index = 0; index < removeOperations.length; index++) {\n    const operation = removeOperations[index];\n    const deleteResult = deleteResults[index];\n\n    if (!operation || !deleteResult?.success) {\n      removeFailed += 1;\n      if (deleteResult?.error) {\n        errors.push({ type: \"remove\", error: deleteResult.error });\n      }\n      continue;\n    }\n\n    removed += 1;\n    const mapping = mappingsByDestinationUid.get(operation.uid);\n    if (mapping) {\n      deleteIds.push(mapping.id);\n    }\n  }\n\n  return { deleteIds, removed, removeFailed, errors };\n};\n\ninterface ExecuteRemoteResult {\n  changes: PendingChanges;\n  result: SyncResult;\n  conflictsResolved: number;\n  errors: OperationError[];\n  superseded: boolean;\n}\n\ninterface OperationRun {\n  type: \"add\" | \"remove\";\n  adds: Extract<SyncOperation, { type: \"add\" }>[];\n  removes: Extract<SyncOperation, { type: \"remove\" }>[];\n}\n\nconst groupOperationRuns = (operations: SyncOperation[]): OperationRun[] => {\n  const runs: OperationRun[] = [];\n  let currentRun: OperationRun | null = null;\n\n  for (const operation of operations) {\n    if (!currentRun || currentRun.type !== operation.type) {\n      currentRun = { type: operation.type, adds: [], removes: [] };\n      runs.push(currentRun);\n    }\n\n    if (operation.type === \"add\") {\n      currentRun.adds.push(operation);\n    } else {\n      currentRun.removes.push(operation);\n    }\n  }\n\n  return runs;\n};\n\ninterface RunResult {\n  changes: PendingChanges;\n  result: SyncResult;\n  conflictsResolved: number;\n  errors: OperationError[];\n}\n\nconst executeAddRun = async (\n  adds: Extract<SyncOperation, { type: \"add\" }>[],\n  calendarId: string,\n  provider: CalendarSyncProvider,\n): Promise<RunResult> => {\n  const addEvents = adds.map((op) => op.event);\n  const pushResults = await provider.pushEvents(addEvents);\n  const { added, addFailed, conflictsResolved, changes, errors } = processAddResults(adds, pushResults, calendarId);\n  return {\n    changes,\n    result: { added, addFailed, removed: 0, removeFailed: 0 },\n    conflictsResolved,\n    errors,\n  };\n};\n\nconst executeRemoveRun = async (\n  removes: Extract<SyncOperation, { type: \"remove\" }>[],\n  provider: CalendarSyncProvider,\n  mappingsByDestinationUid: Map<string, EventMapping>,\n): Promise<RunResult> => {\n  const idsToDelete = removes.map((op) => op.deleteId);\n  const deleteResults = await provider.deleteEvents(idsToDelete);\n  const { removed, removeFailed, deleteIds, errors } = processDeleteResults(removes, deleteResults, mappingsByDestinationUid);\n  return {\n    changes: { inserts: [], deletes: deleteIds },\n    result: { added: 0, addFailed: 0, removed, removeFailed },\n    conflictsResolved: 0,\n    errors,\n  };\n};\n\nconst mergeRunResult = (state: ChunkedExecutionState, runResult: RunResult): void => {\n  state.changes.inserts.push(...runResult.changes.inserts);\n  state.changes.deletes.push(...runResult.changes.deletes);\n  state.result = {\n    added: state.result.added + runResult.result.added,\n    addFailed: state.result.addFailed + runResult.result.addFailed,\n    removed: state.result.removed + runResult.result.removed,\n    removeFailed: state.result.removeFailed + runResult.result.removeFailed,\n  };\n  state.conflictsResolved += runResult.conflictsResolved;\n  state.errors.push(...runResult.errors);\n};\n\ntype ProgressCallback = (processed: number, total: number) => void;\n\nconst OPERATION_CHUNK_SIZE = 50;\n\nconst chunkOperations = <TOperation>(operations: TOperation[], size: number): TOperation[][] => {\n  const chunks: TOperation[][] = [];\n  for (let offset = 0; offset < operations.length; offset += size) {\n    chunks.push(operations.slice(offset, offset + size));\n  }\n  return chunks;\n};\n\ninterface ChunkedExecutionState {\n  changes: PendingChanges;\n  result: SyncResult;\n  conflictsResolved: number;\n  errors: OperationError[];\n  processed: number;\n  superseded: boolean;\n}\n\nconst checkSuperseded = async (\n  state: ChunkedExecutionState,\n  isCurrent?: () => Promise<boolean>,\n): Promise<boolean> => {\n  if (!isCurrent) {\n    return false;\n  }\n  const stillCurrent = await isCurrent();\n  if (!stillCurrent) {\n    state.superseded = true;\n    return true;\n  }\n  return false;\n};\n\nconst executeChunkedAdds = async (\n  adds: Extract<SyncOperation, { type: \"add\" }>[],\n  calendarId: string,\n  provider: CalendarSyncProvider,\n  state: ChunkedExecutionState,\n  totalOperations: number,\n  isCurrent?: () => Promise<boolean>,\n  onRunComplete?: ProgressCallback,\n): Promise<void> => {\n  const chunks = chunkOperations(adds, OPERATION_CHUNK_SIZE);\n  for (const chunk of chunks) {\n    if (state.superseded) {\n      return;\n    }\n    const runResult = await executeAddRun(chunk, calendarId, provider);\n    mergeRunResult(state, runResult);\n    state.processed += chunk.length;\n    onRunComplete?.(state.processed, totalOperations);\n    await checkSuperseded(state, isCurrent);\n  }\n};\n\nconst executeChunkedRemoves = async (\n  removes: Extract<SyncOperation, { type: \"remove\" }>[],\n  provider: CalendarSyncProvider,\n  mappingsByDestinationUid: Map<string, EventMapping>,\n  state: ChunkedExecutionState,\n  totalOperations: number,\n  isCurrent?: () => Promise<boolean>,\n  onRunComplete?: ProgressCallback,\n): Promise<void> => {\n  const chunks = chunkOperations(removes, OPERATION_CHUNK_SIZE);\n  for (const chunk of chunks) {\n    if (state.superseded) {\n      return;\n    }\n    const runResult = await executeRemoveRun(chunk, provider, mappingsByDestinationUid);\n    mergeRunResult(state, runResult);\n    state.processed += chunk.length;\n    onRunComplete?.(state.processed, totalOperations);\n    await checkSuperseded(state, isCurrent);\n  }\n};\n\nconst executeRemoteOperations = async (\n  operations: SyncOperation[],\n  existingMappings: EventMapping[],\n  calendarId: string,\n  provider: CalendarSyncProvider,\n  isCurrent?: () => Promise<boolean>,\n  onRunComplete?: ProgressCallback,\n): Promise<ExecuteRemoteResult> => {\n  const mappingsByDestinationUid = new Map<string, EventMapping>();\n  for (const mapping of existingMappings) {\n    mappingsByDestinationUid.set(mapping.destinationEventUid, mapping);\n  }\n\n  const runs = groupOperationRuns(operations);\n  const totalOperations = operations.length;\n  const state: ChunkedExecutionState = {\n    changes: { inserts: [], deletes: [] },\n    result: { added: 0, addFailed: 0, removed: 0, removeFailed: 0 },\n    conflictsResolved: 0,\n    errors: [],\n    processed: 0,\n    superseded: false,\n  };\n\n  for (const run of runs) {\n    if (state.superseded) {\n      break;\n    }\n\n    if (run.type === \"add\" && run.adds.length > 0) {\n      await executeChunkedAdds(run.adds, calendarId, provider, state, totalOperations, isCurrent, onRunComplete);\n    }\n\n    if (run.type === \"remove\" && run.removes.length > 0) {\n      await executeChunkedRemoves(run.removes, provider, mappingsByDestinationUid, state, totalOperations, isCurrent, onRunComplete);\n    }\n  }\n\n  return { changes: state.changes, result: state.result, conflictsResolved: state.conflictsResolved, errors: state.errors, superseded: state.superseded };\n};\n\ninterface SyncCalendarOptions {\n  userId: string;\n  calendarId: string;\n  provider: CalendarSyncProvider;\n  readState: () => Promise<{\n    localEvents: SyncableEvent[];\n    existingMappings: EventMapping[];\n    remoteEvents: RemoteEvent[];\n  }>;\n  isCurrent: () => Promise<boolean>;\n  isInvalidated?: () => Promise<boolean>;\n  flush: (changes: PendingChanges) => Promise<void>;\n  onSyncEvent?: (event: Record<string, unknown>) => void;\n  onProgress?: (update: SyncProgressUpdate) => void;\n}\n\ninterface SyncCalendarResult extends SyncResult {\n  conflictsResolved: number;\n  errors: string[];\n}\n\nconst EMPTY_RESULT: SyncCalendarResult = { added: 0, addFailed: 0, removed: 0, removeFailed: 0, conflictsResolved: 0, errors: [] };\n\nconst syncCalendar = async (options: SyncCalendarOptions): Promise<SyncCalendarResult> => {\n  const { userId, calendarId, provider, readState, isCurrent, isInvalidated, flush, onSyncEvent, onProgress } = options;\n\n  const wideEvent: Record<string, unknown> = {\n    \"calendar.id\": calendarId,\n    \"operation.name\": \"sync:calendar\",\n    \"operation.type\": \"sync\",\n  };\n\n  const startTime = Date.now();\n  let flushed = false;\n\n  const emitProgress = (stage: SyncProgressUpdate[\"stage\"], localEventCount: number, remoteEventCount: number, progress?: { current: number; total: number }): void => {\n    if (!onProgress) {\n      return;\n    }\n    onProgress({\n      userId,\n      calendarId,\n      status: \"syncing\",\n      stage,\n      localEventCount,\n      remoteEventCount,\n      progress,\n      inSync: false,\n    });\n  };\n\n  try {\n    emitProgress(\"fetching\", 0, 0);\n    const state = await readState();\n\n    wideEvent[\"local_events.count\"] = state.localEvents.length;\n    wideEvent[\"existing_mappings.count\"] = state.existingMappings.length;\n    wideEvent[\"remote_events.count\"] = state.remoteEvents.length;\n\n    const stillCurrent = await isCurrent();\n    if (!stillCurrent) {\n      wideEvent[\"outcome\"] = \"superseded\";\n      wideEvent[\"flushed\"] = false;\n      return EMPTY_RESULT;\n    }\n\n    emitProgress(\"comparing\", state.localEvents.length, state.remoteEvents.length);\n    const { operations, staleMappingIds } = computeSyncOperations(\n      state.localEvents,\n      state.existingMappings,\n      state.remoteEvents,\n    );\n\n    const addCount = operations.filter((op) => op.type === \"add\").length;\n    const removeCount = operations.filter((op) => op.type === \"remove\").length;\n\n    wideEvent[\"operations.add_count\"] = addCount;\n    wideEvent[\"operations.remove_count\"] = removeCount;\n    wideEvent[\"operations.total\"] = operations.length;\n    wideEvent[\"stale_mappings.count\"] = staleMappingIds.length;\n\n    if (operations.length === 0 && staleMappingIds.length === 0) {\n      wideEvent[\"outcome\"] = \"in-sync\";\n      wideEvent[\"flushed\"] = false;\n      wideEvent[\"events.added\"] = 0;\n      wideEvent[\"events.add_failed\"] = 0;\n      wideEvent[\"events.removed\"] = 0;\n      wideEvent[\"events.remove_failed\"] = 0;\n      return EMPTY_RESULT;\n    }\n\n    emitProgress(\"processing\", state.localEvents.length, state.remoteEvents.length, { current: 0, total: operations.length });\n\n    const outcome = await executeRemoteOperations(\n      operations,\n      state.existingMappings,\n      calendarId,\n      provider,\n      isCurrent,\n      (processed, total) => {\n        emitProgress(\"processing\", state.localEvents.length, state.remoteEvents.length, { current: processed, total });\n      },\n    );\n\n    wideEvent[\"events.added\"] = outcome.result.added;\n    wideEvent[\"events.add_failed\"] = outcome.result.addFailed;\n    wideEvent[\"events.removed\"] = outcome.result.removed;\n    wideEvent[\"events.remove_failed\"] = outcome.result.removeFailed;\n    wideEvent[\"events.conflicts_resolved\"] = outcome.conflictsResolved;\n    wideEvent[\"superseded\"] = outcome.superseded;\n\n    if (outcome.errors.length > 0) {\n      wideEvent[\"operation_errors\"] = outcome.errors;\n    }\n\n    outcome.changes.deletes.push(...staleMappingIds);\n\n    const invalidated = await isInvalidated?.() ?? false;\n    if (!invalidated) {\n      await flush(outcome.changes);\n      flushed = true;\n    }\n\n    wideEvent[\"invalidated\"] = invalidated;\n    wideEvent[\"outcome\"] = resolveOutcome(outcome.superseded, invalidated);\n    wideEvent[\"flushed\"] = flushed;\n    wideEvent[\"flush.inserts\"] = outcome.changes.inserts.length;\n    wideEvent[\"flush.deletes\"] = outcome.changes.deletes.length;\n\n    const errorMessages = outcome.errors.map((operationError) => operationError.error);\n    return { ...outcome.result, conflictsResolved: outcome.conflictsResolved, errors: errorMessages };\n  } catch (error) {\n    wideEvent[\"outcome\"] = \"error\";\n    wideEvent[\"flushed\"] = flushed;\n\n    if (error instanceof Error) {\n      wideEvent[\"error.message\"] = error.message;\n      wideEvent[\"error.type\"] = error.constructor.name;\n    }\n\n    throw error;\n  } finally {\n    wideEvent[\"duration_ms\"] = Date.now() - startTime;\n    onSyncEvent?.(wideEvent);\n  }\n};\n\nexport { executeRemoteOperations, syncCalendar };\nexport type { CalendarSyncProvider, PendingChanges, SyncCalendarOptions };\n"
  },
  {
    "path": "packages/calendar/src/core/sync-engine/ingest.ts",
    "content": "import type { SourceEvent } from \"../types\";\nimport { buildSourceEventsToAdd, buildSourceEventStateIdsToRemove } from \"../source/event-diff\";\n\ninterface ExistingEventState {\n  id: string;\n  sourceEventUid: string | null;\n  startTime: Date;\n  endTime: Date;\n  availability: string | null;\n  isAllDay: boolean | null;\n  sourceEventType: string | null;\n}\n\ninterface FetchEventsResult {\n  events: SourceEvent[];\n  nextSyncToken?: string;\n  cancelledEventUids?: string[];\n  isDeltaSync?: boolean;\n  fullSyncRequired?: boolean;\n  unchanged?: boolean;\n}\n\ninterface IngestionChanges {\n  inserts: SourceEvent[];\n  deletes: string[];\n  syncToken?: string | null;\n}\n\ninterface IngestSourceOptions {\n  calendarId: string;\n  fetchEvents: () => Promise<FetchEventsResult>;\n  readExistingEvents: () => Promise<ExistingEventState[]>;\n  flush: (changes: IngestionChanges) => Promise<void>;\n  onIngestEvent?: (event: Record<string, unknown>) => void;\n}\n\ninterface IngestionResult {\n  eventsAdded: number;\n  eventsRemoved: number;\n}\n\nconst EMPTY_RESULT: IngestionResult = { eventsAdded: 0, eventsRemoved: 0 };\n\nconst ingestSource = async (options: IngestSourceOptions): Promise<IngestionResult> => {\n  const { calendarId, fetchEvents, readExistingEvents, flush, onIngestEvent } = options;\n\n  const wideEvent: Record<string, unknown> = {\n    \"calendar.id\": calendarId,\n    \"operation.name\": \"ingest:source\",\n    \"operation.type\": \"ingest\",\n  };\n\n  const startTime = Date.now();\n  let flushed = false;\n\n  try {\n    const [fetchResult, existingEvents] = await Promise.all([\n      fetchEvents(),\n      readExistingEvents(),\n    ]);\n\n    wideEvent[\"source_events.count\"] = fetchResult.events.length;\n    wideEvent[\"existing_events.count\"] = existingEvents.length;\n\n    if (fetchResult.unchanged) {\n      wideEvent[\"outcome\"] = \"unchanged\";\n      wideEvent[\"flushed\"] = false;\n      return EMPTY_RESULT;\n    }\n\n    if (fetchResult.fullSyncRequired) {\n      wideEvent[\"outcome\"] = \"full-sync-required\";\n      wideEvent[\"flushed\"] = true;\n      await flush({ inserts: [], deletes: [], syncToken: null });\n      flushed = true;\n      return EMPTY_RESULT;\n    }\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, fetchResult.events, {\n      isDeltaSync: fetchResult.isDeltaSync ?? false,\n    });\n\n    const eventStateIdsToRemove = buildSourceEventStateIdsToRemove(\n      existingEvents,\n      fetchResult.events,\n      {\n        cancelledEventUids: fetchResult.cancelledEventUids,\n        isDeltaSync: fetchResult.isDeltaSync ?? false,\n      },\n    );\n\n    wideEvent[\"events.added\"] = eventsToAdd.length;\n    wideEvent[\"events.removed\"] = eventStateIdsToRemove.length;\n\n    if (eventsToAdd.length === 0 && eventStateIdsToRemove.length === 0) {\n      if (fetchResult.nextSyncToken) {\n        await flush({ inserts: [], deletes: [], syncToken: fetchResult.nextSyncToken });\n        flushed = true;\n        wideEvent[\"outcome\"] = \"in-sync\";\n        wideEvent[\"flushed\"] = true;\n        return EMPTY_RESULT;\n      }\n\n      wideEvent[\"outcome\"] = \"in-sync\";\n      wideEvent[\"flushed\"] = false;\n      return EMPTY_RESULT;\n    }\n\n    const changes: IngestionChanges = {\n      inserts: eventsToAdd,\n      deletes: eventStateIdsToRemove,\n    };\n\n    if (typeof fetchResult.nextSyncToken === \"string\") {\n      changes.syncToken = fetchResult.nextSyncToken;\n    }\n\n    await flush(changes);\n\n    flushed = true;\n    wideEvent[\"outcome\"] = \"success\";\n    wideEvent[\"flushed\"] = true;\n\n    return {\n      eventsAdded: eventsToAdd.length,\n      eventsRemoved: eventStateIdsToRemove.length,\n    };\n  } catch (error) {\n    wideEvent[\"outcome\"] = \"error\";\n    wideEvent[\"flushed\"] = flushed;\n\n    if (error instanceof Error) {\n      wideEvent[\"error.message\"] = error.message;\n      wideEvent[\"error.type\"] = error.constructor.name;\n    }\n\n    throw error;\n  } finally {\n    wideEvent[\"duration_ms\"] = Date.now() - startTime;\n    onIngestEvent?.(wideEvent);\n  }\n};\n\nexport { ingestSource };\nexport type { IngestSourceOptions, IngestionResult, IngestionChanges, ExistingEventState, FetchEventsResult };\n"
  },
  {
    "path": "packages/calendar/src/core/sync-engine/types.ts",
    "content": "import type { SyncableEvent, PushResult, DeleteResult, RemoteEvent } from \"../types\";\n\ninterface CalendarSyncProvider {\n  pushEvents: (events: SyncableEvent[]) => Promise<PushResult[]>;\n  deleteEvents: (eventIds: string[]) => Promise<DeleteResult[]>;\n  listRemoteEvents: () => Promise<RemoteEvent[]>;\n}\n\ninterface PendingInsert {\n  eventStateId: string;\n  calendarId: string;\n  destinationEventUid: string;\n  deleteIdentifier: string;\n  syncEventHash: string | null;\n  startTime: Date;\n  endTime: Date;\n}\n\ninterface PendingChanges {\n  inserts: PendingInsert[];\n  deletes: string[];\n}\n\nexport type { CalendarSyncProvider, PendingChanges, PendingInsert };\n"
  },
  {
    "path": "packages/calendar/src/core/types.ts",
    "content": "import type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { RefreshLockStore } from \"./oauth/refresh-coordinator\";\n\ntype AuthType = \"oauth\" | \"caldav\" | \"none\";\ntype EventAvailability = \"busy\" | \"free\" | \"oof\" | \"workingElsewhere\";\ntype SourceEventType = \"default\" | \"focusTime\" | \"outOfOffice\" | \"workingLocation\";\n\ninterface SourcePreferenceOption {\n  id: string;\n  label: string;\n  description?: string;\n  defaultValue: boolean;\n  disabled?: boolean;\n}\n\ninterface SourcePreferencesConfig {\n  label: string;\n  description?: string;\n  options: SourcePreferenceOption[];\n}\n\ninterface CalDAVProviderConfig {\n  serverUrl: string;\n  usernameLabel: string;\n  usernameHelp: string;\n  passwordLabel: string;\n  passwordHelp: string;\n}\n\ninterface ProviderCapabilities {\n  canRead: boolean;\n  canWrite: boolean;\n}\n\ninterface ProviderDefinition {\n  id: string;\n  name: string;\n  authType: AuthType;\n  icon?: string;\n  comingSoon?: boolean;\n  caldav?: CalDAVProviderConfig;\n  sourcePreferences?: SourcePreferencesConfig;\n  capabilities: ProviderCapabilities;\n}\n\ninterface SyncableEvent {\n  id: string;\n  sourceEventUid: string;\n  startTime: Date;\n  endTime: Date;\n  availability?: EventAvailability;\n  isAllDay?: boolean;\n  startTimeZone?: string;\n  recurrenceRule?: object;\n  exceptionDates?: object;\n  summary: string;\n  description?: string;\n  location?: string;\n  calendarId: string;\n  calendarName: string | null;\n  calendarUrl: string | null;\n}\n\ninterface PushResult {\n  success: boolean;\n  remoteId?: string;\n  deleteId?: string;\n  error?: string;\n  shouldContinue?: boolean;\n  conflictResolved?: boolean;\n}\n\ninterface DeleteResult {\n  success: boolean;\n  error?: string;\n  shouldContinue?: boolean;\n}\n\ninterface SyncResult {\n  added: number;\n  addFailed: number;\n  removed: number;\n  removeFailed: number;\n}\n\ninterface RemoteEvent {\n  uid: string;\n  deleteId: string;\n  startTime: Date;\n  endTime: Date;\n  isKeeperEvent: boolean;\n}\n\ntype SyncOperation =\n  | { type: \"add\"; event: SyncableEvent }\n  | { type: \"remove\"; uid: string; deleteId: string; startTime: Date };\n\ninterface ListRemoteEventsOptions {\n  until: Date;\n}\n\ntype BroadcastSyncStatus = (\n  userId: string,\n  calendarId: string,\n  data: { needsReauthentication: boolean },\n) => void;\n\ninterface ProviderConfig {\n  database: BunSQLDatabase;\n  userId: string;\n  calendarId: string;\n  broadcastSyncStatus?: BroadcastSyncStatus;\n}\n\ninterface OAuthProviderConfig extends ProviderConfig {\n  accountId: string;\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  refreshLockStore?: RefreshLockStore | null;\n}\n\ninterface GoogleCalendarConfig extends OAuthProviderConfig {\n  externalCalendarId: string;\n}\n\ntype OutlookCalendarConfig = OAuthProviderConfig;\n\ninterface CalDAVConfig extends ProviderConfig {\n  serverUrl: string;\n  username: string;\n  calendarUrl: string;\n}\n\ninterface SourceEvent {\n  uid: string;\n  startTime: Date;\n  endTime: Date;\n  sourceEventType?: SourceEventType;\n  availability?: EventAvailability;\n  isAllDay?: boolean;\n  startTimeZone?: string;\n  recurrenceRule?: object;\n  exceptionDates?: object;\n  title?: string;\n  description?: string;\n  location?: string;\n}\n\ninterface SourceSyncResult {\n  eventsAdded: number;\n  eventsRemoved: number;\n  eventsInserted?: number;\n  eventsUpdated?: number;\n  eventsFilteredOutOfWindow?: number;\n  syncTokenResetCount?: number;\n  syncToken?: string;\n  fullSyncRequired?: boolean;\n  errors?: Error[];\n}\n\ninterface OAuthSourceConfig {\n  database: BunSQLDatabase;\n  userId: string;\n  calendarId: string;\n  externalCalendarId: string;\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  syncToken: string | null;\n  calendarAccountId: string;\n  oauthCredentialId: string;\n  refreshLockStore?: RefreshLockStore | null;\n}\n\nexport type {\n  AuthType,\n  EventAvailability,\n  SourceEventType,\n  CalDAVProviderConfig,\n  ProviderCapabilities,\n  ProviderDefinition,\n  SourcePreferenceOption,\n  SourcePreferencesConfig,\n  SyncableEvent,\n  PushResult,\n  DeleteResult,\n  SyncResult,\n  RemoteEvent,\n  SyncOperation,\n  ListRemoteEventsOptions,\n  BroadcastSyncStatus,\n  ProviderConfig,\n  OAuthProviderConfig,\n  GoogleCalendarConfig,\n  OutlookCalendarConfig,\n  CalDAVConfig,\n  SourceEvent,\n  SourceSyncResult,\n  OAuthSourceConfig,\n};\n"
  },
  {
    "path": "packages/calendar/src/core/utils/concurrency.ts",
    "content": "const DEFAULT_CONCURRENCY = 5;\n\ninterface AllSettledWithConcurrencyOptions {\n  concurrency?: number;\n}\n\n/**\n * Like Promise.allSettled, but limits how many promises run concurrently.\n * Prevents unbounded parallelism from exhausting DB connections or API limits.\n */\nconst allSettledWithConcurrency = async <TResult>(\n  tasks: (() => Promise<TResult>)[],\n  options: AllSettledWithConcurrencyOptions = {},\n): Promise<PromiseSettledResult<TResult>[]> => {\n  const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n  const results: PromiseSettledResult<TResult>[] = Array.from({ length: tasks.length });\n  let nextIndex = 0;\n\n  const runNext = async (): Promise<void> => {\n    while (nextIndex < tasks.length) {\n      const index = nextIndex;\n      nextIndex++;\n\n      const task = tasks[index];\n      if (!task) {\n        continue;\n      }\n\n      try {\n        const value = await task();\n        results[index] = { status: \"fulfilled\", value };\n      } catch (error) {\n        results[index] = { status: \"rejected\", reason: error };\n      }\n    }\n  };\n\n  const workerCount = Math.min(concurrency, tasks.length);\n  const workers: Promise<void>[] = [];\n  for (let workerIndex = 0; workerIndex < workerCount; workerIndex++) {\n    workers.push(runNext());\n  }\n\n  await Promise.all(workers);\n\n  return results;\n};\n\nexport { allSettledWithConcurrency };\nexport type { AllSettledWithConcurrencyOptions };\n"
  },
  {
    "path": "packages/calendar/src/core/utils/error.ts",
    "content": "export const getErrorMessage = (error: unknown): string => {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return String(error);\n};\n"
  },
  {
    "path": "packages/calendar/src/core/utils/rate-limiter.ts",
    "content": "type QueuedTask = () => Promise<void>;\n\nconst INITIAL_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 60_000;\nconst BACKOFF_MULTIPLIER = 2;\nconst DEFAULT_CONCURRENCY = 5;\nconst DEFAULT_REQUESTS_PER_MINUTE = 600;\nconst MS_PER_MINUTE = 60_000;\nconst INITIAL_ACTIVE_COUNT = 0;\nconst INITIAL_BACKOFF_UNTIL = 0;\nconst EMPTY_QUEUE_LENGTH = 0;\nconst MIN_DELAY = 0;\nconst FIRST_TIMESTAMP_INDEX = 0;\n\ninterface RateLimiterConfig {\n  concurrency?: number;\n  requestsPerMinute?: number;\n}\n\nclass RateLimiter {\n  private readonly concurrency: number;\n  private readonly requestsPerMinute: number;\n  private activeCount = INITIAL_ACTIVE_COUNT;\n  private queue: QueuedTask[] = [];\n  private backoffUntil = INITIAL_BACKOFF_UNTIL;\n  private backoffMs: number;\n  private requestTimestamps: number[] = [];\n\n  private readonly initialBackoffMs = INITIAL_BACKOFF_MS;\n  private readonly maxBackoffMs = MAX_BACKOFF_MS;\n  private readonly backoffMultiplier = BACKOFF_MULTIPLIER;\n\n  constructor(config: RateLimiterConfig = {}) {\n    this.concurrency = config.concurrency ?? DEFAULT_CONCURRENCY;\n    this.requestsPerMinute = config.requestsPerMinute ?? DEFAULT_REQUESTS_PER_MINUTE;\n    this.backoffMs = this.initialBackoffMs;\n  }\n\n  execute<TResult>(operation: () => Promise<TResult>): Promise<TResult> {\n    const { promise, resolve, reject } = Promise.withResolvers<TResult>();\n\n    const task: QueuedTask = async (): Promise<void> => {\n      try {\n        const result = await operation();\n        this.resetBackoff();\n        resolve(result);\n      } catch (error) {\n        reject(error);\n      }\n    };\n\n    this.queue.push(task);\n    this.processQueue();\n\n    return promise;\n  }\n\n  reportRateLimit(): void {\n    this.backoffUntil = Date.now() + this.backoffMs;\n    this.backoffMs = Math.min(this.backoffMs * this.backoffMultiplier, this.maxBackoffMs);\n    this.scheduleQueueProcessing();\n  }\n\n  private resetBackoff(): void {\n    if (this.backoffMs !== this.initialBackoffMs) {\n      this.backoffMs = this.initialBackoffMs;\n    }\n  }\n\n  private getFirstTimestamp(): number | null {\n    if (this.requestTimestamps.length === EMPTY_QUEUE_LENGTH) {\n      return null;\n    }\n    return this.requestTimestamps[FIRST_TIMESTAMP_INDEX] ?? null;\n  }\n\n  private pruneOldTimestamps(): void {\n    const cutoff = Date.now() - MS_PER_MINUTE;\n    let firstTimestamp = this.getFirstTimestamp();\n    while (firstTimestamp !== null && firstTimestamp < cutoff) {\n      this.requestTimestamps.shift();\n      firstTimestamp = this.getFirstTimestamp();\n    }\n  }\n\n  private canMakeRequest(): boolean {\n    this.pruneOldTimestamps();\n    return this.requestTimestamps.length < this.requestsPerMinute;\n  }\n\n  private getDelayUntilNextSlot(): number {\n    if (this.requestTimestamps.length < this.requestsPerMinute) {\n      return MIN_DELAY;\n    }\n    const oldestTimestamp = this.getFirstTimestamp();\n    if (oldestTimestamp === null) {\n      return MIN_DELAY;\n    }\n    return oldestTimestamp + MS_PER_MINUTE - Date.now();\n  }\n\n  private recordRequest(): void {\n    this.requestTimestamps.push(Date.now());\n  }\n\n  private scheduleQueueProcessing(): void {\n    const backoffDelay = Math.max(MIN_DELAY, this.backoffUntil - Date.now());\n    const rateLimitDelay = this.getDelayUntilNextSlot();\n    const delay = Math.max(backoffDelay, rateLimitDelay);\n\n    if (delay > MIN_DELAY) {\n      setTimeout(() => this.processQueue(), delay);\n    }\n  }\n\n  private processQueue(): void {\n    if (this.queue.length === EMPTY_QUEUE_LENGTH) {\n      return;\n    }\n\n    const now = Date.now();\n    if (now < this.backoffUntil) {\n      this.scheduleQueueProcessing();\n      return;\n    }\n\n    if (!this.canMakeRequest()) {\n      this.scheduleQueueProcessing();\n      return;\n    }\n\n    while (\n      this.activeCount < this.concurrency &&\n      this.queue.length > EMPTY_QUEUE_LENGTH &&\n      this.canMakeRequest()\n    ) {\n      const task = this.queue.shift();\n      if (!task) {\n        break;\n      }\n\n      this.activeCount++;\n      this.recordRequest();\n      this.executeTask(task);\n    }\n\n    if (this.queue.length > EMPTY_QUEUE_LENGTH) {\n      this.scheduleQueueProcessing();\n    }\n  }\n\n  private async executeTask(task: QueuedTask): Promise<void> {\n    try {\n      await task();\n    } finally {\n      this.activeCount--;\n      this.processQueue();\n    }\n  }\n}\n\nexport { RateLimiter };\nexport type { RateLimiterConfig };\n"
  },
  {
    "path": "packages/calendar/src/core/utils/redis-rate-limiter.ts",
    "content": "import type Redis from \"ioredis\";\n\nconst MS_PER_MINUTE = 60_000;\nconst RETRY_POLL_MS = 100;\n\ninterface RedisRateLimiter {\n  acquire(count: number): Promise<void>;\n}\n\ninterface RedisRateLimiterConfig {\n  requestsPerMinute: number;\n}\n\n/**\n * Lua script for atomic sliding window rate limiting.\n *\n * KEYS[1] = sorted set key\n * ARGV[1] = window start (now - 60s) in ms\n * ARGV[2] = current time in ms\n * ARGV[3] = count of slots to acquire\n * ARGV[4] = max requests per minute\n *\n * Returns:\n *   0 = acquired successfully\n *   N > 0 = wait time in ms before retrying\n */\nconst ACQUIRE_SCRIPT = `\n  redis.call('ZREMRANGEBYSCORE', KEYS[1], '-inf', ARGV[1])\n  local current = redis.call('ZCARD', KEYS[1])\n  local count = tonumber(ARGV[3])\n  local limit = tonumber(ARGV[4])\n  local now = tonumber(ARGV[2])\n\n  if current + count <= limit then\n    for i = 1, count do\n      redis.call('ZADD', KEYS[1], now, now .. ':' .. i .. ':' .. math.random(1000000))\n    end\n    redis.call('PEXPIRE', KEYS[1], 60000)\n    return 0\n  end\n\n  local oldest = redis.call('ZRANGE', KEYS[1], 0, 0, 'WITHSCORES')\n  if #oldest >= 2 then\n    local oldestScore = tonumber(oldest[2])\n    return oldestScore + 60000 - now\n  end\n\n  return 1000\n`;\n\nconst createRedisRateLimiter = (\n  redis: Redis,\n  key: string,\n  config: RedisRateLimiterConfig,\n): RedisRateLimiter => {\n  const { requestsPerMinute } = config;\n\n  const acquire = async (count: number): Promise<void> => {\n    while (true) {\n      const now = Date.now();\n      const windowStart = now - MS_PER_MINUTE;\n\n      const waitTime = Number((await redis.eval(\n        ACQUIRE_SCRIPT,\n        1,\n        key,\n        String(windowStart),\n        String(now),\n        String(count),\n        String(requestsPerMinute),\n      )));\n\n      if (waitTime <= 0) {\n        return;\n      }\n\n      const sleepMs = Math.max(RETRY_POLL_MS, Math.min(waitTime, MS_PER_MINUTE));\n      await Bun.sleep(sleepMs);\n    }\n  };\n\n  return { acquire };\n};\n\nexport { createRedisRateLimiter };\nexport type { RedisRateLimiter, RedisRateLimiterConfig };\n"
  },
  {
    "path": "packages/calendar/src/ics/index.ts",
    "content": "export * from \"./types\";\nexport { pullRemoteCalendar, CalendarFetchError } from \"./utils/pull-remote-calendar\";\nexport { parseIcsEvents } from \"./utils/parse-ics-events\";\nexport { parseIcsCalendar } from \"./utils/parse-ics-calendar\";\nexport { diffEvents } from \"./utils/diff-events\";\nexport { createSnapshot } from \"./utils/create-snapshot\";\nexport { createIcsSourceFetcher } from \"./utils/fetch-adapter\";\nexport type { IcsSourceFetcherConfig, IcsSourceFetcher } from \"./utils/fetch-adapter\";\n"
  },
  {
    "path": "packages/calendar/src/ics/types.ts",
    "content": "export type {\n  EventAvailability,\n  EventTimeSlot,\n  StoredEventTimeSlot,\n  EventDiff,\n  SerializedIcsCalendar,\n} from \"./utils/types\";\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/create-snapshot.ts",
    "content": "import { calendarSnapshotsTable, calendarsTable } from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\nconst computeContentHash = async (content: string): Promise<string> => {\n  const encoded = new TextEncoder().encode(content);\n  const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encoded);\n  const hashArray = new Uint8Array(hashBuffer);\n\n  const hexParts: string[] = [];\n  for (const byte of hashArray) {\n    hexParts.push(byte.toString(16).padStart(2, \"0\"));\n  }\n\n  return hexParts.join(\"\");\n};\n\ninterface CreateSnapshotResult {\n  changed: boolean;\n}\n\nconst createSnapshot = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n  ical: string,\n): Promise<CreateSnapshotResult> => {\n  const [calendar] = await database\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(eq(calendarsTable.id, calendarId));\n\n  if (!calendar) {\n    return { changed: false };\n  }\n\n  const contentHash = await computeContentHash(ical);\n\n  const [existing] = await database\n    .select({ contentHash: calendarSnapshotsTable.contentHash })\n    .from(calendarSnapshotsTable)\n    .where(eq(calendarSnapshotsTable.calendarId, calendarId));\n\n  if (existing && existing.contentHash === contentHash) {\n    return { changed: false };\n  }\n\n  await database\n    .insert(calendarSnapshotsTable)\n    .values({ ical, calendarId, contentHash })\n    .onConflictDoUpdate({\n      target: calendarSnapshotsTable.calendarId,\n      set: { ical, contentHash, createdAt: new Date() },\n    });\n\n  return { changed: true };\n};\n\nexport { createSnapshot };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/diff-events.ts",
    "content": "import type { EventDiff, EventTimeSlot, StoredEventTimeSlot } from \"./types\";\n\nconst normalizeTimeZone = (timeZone: string | null | undefined): string => timeZone ?? \"\";\nconst EMPTY_SERIALIZED_VALUE = \"\";\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value);\n\nconst toStableComparableValue = (value: unknown): unknown => {\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((entry) => toStableComparableValue(entry));\n  }\n\n  if (isRecord(value)) {\n    const entries = Object.entries(value)\n      .toSorted(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))\n      .map(([key, nestedValue]) => [key, toStableComparableValue(nestedValue)]);\n\n    return Object.fromEntries(entries);\n  }\n\n  return value;\n};\n\nconst serializeOptionalValue = (value: unknown): string => {\n  if (value === null || value === globalThis.undefined) {\n    return EMPTY_SERIALIZED_VALUE;\n  }\n\n  return JSON.stringify(toStableComparableValue(value));\n};\n\nconst isMidnightUtc = (value: Date): boolean =>\n  value.getUTCHours() === 0\n  && value.getUTCMinutes() === 0\n  && value.getUTCSeconds() === 0\n  && value.getUTCMilliseconds() === 0;\n\nconst resolveIsAllDay = (event: Pick<EventTimeSlot, \"startTime\" | \"endTime\" | \"isAllDay\">): boolean => {\n  if (typeof event.isAllDay === \"boolean\") {\n    return event.isAllDay;\n  }\n\n  const durationMs = event.endTime.getTime() - event.startTime.getTime();\n  if (durationMs <= 0 || durationMs % MS_PER_DAY !== 0) {\n    return false;\n  }\n\n  return isMidnightUtc(event.startTime) && isMidnightUtc(event.endTime);\n};\n\nconst eventIdentityKey = (event: EventTimeSlot): string =>\n  [\n    event.uid,\n    String(event.startTime.getTime()),\n    String(event.endTime.getTime()),\n    String(resolveIsAllDay(event)),\n    event.availability ?? \"\",\n    normalizeTimeZone(event.startTimeZone),\n    serializeOptionalValue(event.recurrenceRule),\n    serializeOptionalValue(event.exceptionDates),\n  ].join(\":\");\n\nconst diffEvents = (remote: EventTimeSlot[], stored: StoredEventTimeSlot[]): EventDiff => {\n  const remoteByKey = new Map<string, EventTimeSlot>();\n  for (const event of remote) {\n    remoteByKey.set(eventIdentityKey(event), event);\n  }\n\n  const storedByKey = new Map<string, StoredEventTimeSlot>();\n  for (const event of stored) {\n    storedByKey.set(eventIdentityKey(event), event);\n  }\n\n  const toAdd: EventTimeSlot[] = [];\n  const toRemove: StoredEventTimeSlot[] = [];\n\n  for (const [key, event] of remoteByKey) {\n    if (!storedByKey.has(key)) {\n      toAdd.push(event);\n    }\n  }\n\n  for (const [key, event] of storedByKey) {\n    if (!remoteByKey.has(key)) {\n      toRemove.push(event);\n    }\n  }\n\n  return { toAdd, toRemove };\n};\n\nexport { diffEvents };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/fetch-adapter.ts",
    "content": "import type { SourceEvent } from \"../../core/types\";\nimport type { FetchEventsResult } from \"../../core/sync-engine/ingest\";\nimport type { SafeFetchOptions } from \"../../utils/safe-fetch\";\nimport { pullRemoteCalendar } from \"./pull-remote-calendar\";\nimport { parseIcsCalendar } from \"./parse-ics-calendar\";\nimport { parseIcsEvents } from \"./parse-ics-events\";\nimport { createSnapshot } from \"./create-snapshot\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\ninterface IcsSourceFetcherConfig {\n  calendarId: string;\n  url: string;\n  database: BunSQLDatabase;\n  safeFetchOptions?: SafeFetchOptions;\n}\n\ninterface IcsSourceFetcher {\n  fetchEvents: () => Promise<FetchEventsResult>;\n}\n\nconst createIcsSourceFetcher = (config: IcsSourceFetcherConfig): IcsSourceFetcher => {\n  const fetchRemoteIcal = async (): Promise<string | null> => {\n    try {\n      const { ical } = await pullRemoteCalendar(\"ical\", config.url, config.safeFetchOptions);\n      return ical;\n    } catch {\n      return null;\n    }\n  };\n\n  const fetchEvents = async (): Promise<FetchEventsResult> => {\n    const ical = await fetchRemoteIcal();\n\n    if (!ical) {\n      return { events: [] };\n    }\n\n    const { changed } = await createSnapshot(config.database, config.calendarId, ical);\n\n    if (!changed) {\n      return { events: [], unchanged: true };\n    }\n\n    const calendar = parseIcsCalendar({ icsString: ical });\n    const parsed = parseIcsEvents(calendar);\n\n    const events: SourceEvent[] = parsed.map((event) => ({\n      availability: event.availability,\n      description: event.description,\n      endTime: event.endTime,\n      exceptionDates: event.exceptionDates,\n      isAllDay: event.isAllDay,\n      location: event.location,\n      recurrenceRule: event.recurrenceRule,\n      startTime: event.startTime,\n      startTimeZone: event.startTimeZone,\n      title: event.title,\n      uid: event.uid,\n    }));\n\n    return { events };\n  };\n\n  return { fetchEvents };\n};\n\nexport { createIcsSourceFetcher };\nexport type { IcsSourceFetcherConfig, IcsSourceFetcher };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/normalize-timezone.ts",
    "content": "/**\n * Mapping of Windows/Microsoft timezone identifiers to IANA timezone identifiers.\n *\n * Microsoft Exchange and Outlook use non-standard timezone names in exported\n * .ics files (e.g. \"Eastern Standard Time\" instead of \"America/New_York\").\n * These are rejected by providers like Google Calendar that require IANA IDs.\n *\n * @see https://github.com/unicode-org/cldr/blob/main/common/supplemental/windowsZones.xml\n */\nconst WINDOWS_TO_IANA: Record<string, string> = {\n  \"AUS Central Standard Time\": \"Australia/Darwin\",\n  \"AUS Eastern Standard Time\": \"Australia/Sydney\",\n  \"Afghanistan Standard Time\": \"Asia/Kabul\",\n  \"Alaskan Standard Time\": \"America/Anchorage\",\n  \"Aleutian Standard Time\": \"America/Adak\",\n  \"Altai Standard Time\": \"Asia/Barnaul\",\n  \"Arab Standard Time\": \"Asia/Riyadh\",\n  \"Arabian Standard Time\": \"Asia/Dubai\",\n  \"Arabic Standard Time\": \"Asia/Baghdad\",\n  \"Argentina Standard Time\": \"America/Buenos_Aires\",\n  \"Astrakhan Standard Time\": \"Europe/Astrakhan\",\n  \"Atlantic Standard Time\": \"America/Halifax\",\n  \"Aus Central W. Standard Time\": \"Australia/Eucla\",\n  \"Azerbaijan Standard Time\": \"Asia/Baku\",\n  \"Azores Standard Time\": \"Atlantic/Azores\",\n  \"Bahia Standard Time\": \"America/Bahia\",\n  \"Bangladesh Standard Time\": \"Asia/Dhaka\",\n  \"Belarus Standard Time\": \"Europe/Minsk\",\n  \"Bougainville Standard Time\": \"Pacific/Bougainville\",\n  \"Canada Central Standard Time\": \"America/Regina\",\n  \"Cape Verde Standard Time\": \"Atlantic/Cape_Verde\",\n  \"Caucasus Standard Time\": \"Asia/Yerevan\",\n  \"Cen. Australia Standard Time\": \"Australia/Adelaide\",\n  \"Central America Standard Time\": \"America/Guatemala\",\n  \"Central Asia Standard Time\": \"Asia/Bishkek\",\n  \"Central Brazilian Standard Time\": \"America/Cuiaba\",\n  \"Central Europe Standard Time\": \"Europe/Budapest\",\n  \"Central European Standard Time\": \"Europe/Warsaw\",\n  \"Central Pacific Standard Time\": \"Pacific/Guadalcanal\",\n  \"Central Standard Time\": \"America/Chicago\",\n  \"Central Standard Time (Mexico)\": \"America/Mexico_City\",\n  \"Chatham Islands Standard Time\": \"Pacific/Chatham\",\n  \"China Standard Time\": \"Asia/Shanghai\",\n  \"Cuba Standard Time\": \"America/Havana\",\n  \"Dateline Standard Time\": \"Etc/GMT+12\",\n  \"E. Africa Standard Time\": \"Africa/Nairobi\",\n  \"E. Australia Standard Time\": \"Australia/Brisbane\",\n  \"E. Europe Standard Time\": \"Europe/Chisinau\",\n  \"E. South America Standard Time\": \"America/Sao_Paulo\",\n  \"Easter Island Standard Time\": \"Pacific/Easter\",\n  \"Eastern Standard Time\": \"America/New_York\",\n  \"Eastern Standard Time (Mexico)\": \"America/Cancun\",\n  \"Egypt Standard Time\": \"Africa/Cairo\",\n  \"Ekaterinburg Standard Time\": \"Asia/Yekaterinburg\",\n  \"FLE Standard Time\": \"Europe/Kiev\",\n  \"Fiji Standard Time\": \"Pacific/Fiji\",\n  \"GMT Standard Time\": \"Europe/London\",\n  \"GTB Standard Time\": \"Europe/Bucharest\",\n  \"Georgian Standard Time\": \"Asia/Tbilisi\",\n  \"Greenland Standard Time\": \"America/Godthab\",\n  \"Greenwich Standard Time\": \"Atlantic/Reykjavik\",\n  \"Haiti Standard Time\": \"America/Port-au-Prince\",\n  \"Hawaiian Standard Time\": \"Pacific/Honolulu\",\n  \"India Standard Time\": \"Asia/Calcutta\",\n  \"Iran Standard Time\": \"Asia/Tehran\",\n  \"Israel Standard Time\": \"Asia/Jerusalem\",\n  \"Jordan Standard Time\": \"Asia/Amman\",\n  \"Kaliningrad Standard Time\": \"Europe/Kaliningrad\",\n  \"Korea Standard Time\": \"Asia/Seoul\",\n  \"Libya Standard Time\": \"Africa/Tripoli\",\n  \"Line Islands Standard Time\": \"Pacific/Kiritimati\",\n  \"Lord Howe Standard Time\": \"Australia/Lord_Howe\",\n  \"Magadan Standard Time\": \"Asia/Magadan\",\n  \"Magallanes Standard Time\": \"America/Punta_Arenas\",\n  \"Marquesas Standard Time\": \"Pacific/Marquesas\",\n  \"Mauritius Standard Time\": \"Indian/Mauritius\",\n  \"Middle East Standard Time\": \"Asia/Beirut\",\n  \"Montevideo Standard Time\": \"America/Montevideo\",\n  \"Morocco Standard Time\": \"Africa/Casablanca\",\n  \"Mountain Standard Time\": \"America/Denver\",\n  \"Mountain Standard Time (Mexico)\": \"America/Mazatlan\",\n  \"Myanmar Standard Time\": \"Asia/Rangoon\",\n  \"N. Central Asia Standard Time\": \"Asia/Novosibirsk\",\n  \"Namibia Standard Time\": \"Africa/Windhoek\",\n  \"Nepal Standard Time\": \"Asia/Katmandu\",\n  \"New Zealand Standard Time\": \"Pacific/Auckland\",\n  \"Newfoundland Standard Time\": \"America/St_Johns\",\n  \"Norfolk Standard Time\": \"Pacific/Norfolk\",\n  \"North Asia East Standard Time\": \"Asia/Irkutsk\",\n  \"North Asia Standard Time\": \"Asia/Krasnoyarsk\",\n  \"North Korea Standard Time\": \"Asia/Pyongyang\",\n  \"Omsk Standard Time\": \"Asia/Omsk\",\n  \"Pacific SA Standard Time\": \"America/Santiago\",\n  \"Pacific Standard Time\": \"America/Los_Angeles\",\n  \"Pacific Standard Time (Mexico)\": \"America/Tijuana\",\n  \"Pakistan Standard Time\": \"Asia/Karachi\",\n  \"Paraguay Standard Time\": \"America/Asuncion\",\n  \"Qyzylorda Standard Time\": \"Asia/Qyzylorda\",\n  \"Romance Standard Time\": \"Europe/Paris\",\n  \"Russia Time Zone 10\": \"Asia/Srednekolymsk\",\n  \"Russia Time Zone 11\": \"Asia/Kamchatka\",\n  \"Russia Time Zone 3\": \"Europe/Samara\",\n  \"Russian Standard Time\": \"Europe/Moscow\",\n  \"SA Eastern Standard Time\": \"America/Cayenne\",\n  \"SA Pacific Standard Time\": \"America/Bogota\",\n  \"SA Western Standard Time\": \"America/La_Paz\",\n  \"SE Asia Standard Time\": \"Asia/Bangkok\",\n  \"Saint Pierre Standard Time\": \"America/Miquelon\",\n  \"Sakhalin Standard Time\": \"Asia/Sakhalin\",\n  \"Samoa Standard Time\": \"Pacific/Apia\",\n  \"Sao Tome Standard Time\": \"Africa/Sao_Tome\",\n  \"Saratov Standard Time\": \"Europe/Saratov\",\n  \"Singapore Standard Time\": \"Asia/Singapore\",\n  \"South Africa Standard Time\": \"Africa/Johannesburg\",\n  \"South Sudan Standard Time\": \"Africa/Juba\",\n  \"Sri Lanka Standard Time\": \"Asia/Colombo\",\n  \"Sudan Standard Time\": \"Africa/Khartoum\",\n  \"Syria Standard Time\": \"Asia/Damascus\",\n  \"Taipei Standard Time\": \"Asia/Taipei\",\n  \"Tasmania Standard Time\": \"Australia/Hobart\",\n  \"Tocantins Standard Time\": \"America/Araguaina\",\n  \"Tokyo Standard Time\": \"Asia/Tokyo\",\n  \"Tomsk Standard Time\": \"Asia/Tomsk\",\n  \"Tonga Standard Time\": \"Pacific/Tongatapu\",\n  \"Transbaikal Standard Time\": \"Asia/Chita\",\n  \"Turkey Standard Time\": \"Europe/Istanbul\",\n  \"Turks And Caicos Standard Time\": \"America/Grand_Turk\",\n  \"US Eastern Standard Time\": \"America/Indianapolis\",\n  \"US Mountain Standard Time\": \"America/Phoenix\",\n  \"UTC\": \"Etc/UTC\",\n  \"UTC+12\": \"Etc/GMT-12\",\n  \"UTC+13\": \"Etc/GMT-13\",\n  \"UTC-02\": \"Etc/GMT+2\",\n  \"UTC-08\": \"Etc/GMT+8\",\n  \"UTC-09\": \"Etc/GMT+9\",\n  \"UTC-11\": \"Etc/GMT+11\",\n  \"Ulaanbaatar Standard Time\": \"Asia/Ulaanbaatar\",\n  \"Venezuela Standard Time\": \"America/Caracas\",\n  \"Vladivostok Standard Time\": \"Asia/Vladivostok\",\n  \"Volgograd Standard Time\": \"Europe/Volgograd\",\n  \"W. Australia Standard Time\": \"Australia/Perth\",\n  \"W. Central Africa Standard Time\": \"Africa/Lagos\",\n  \"W. Europe Standard Time\": \"Europe/Berlin\",\n  \"W. Mongolia Standard Time\": \"Asia/Hovd\",\n  \"West Asia Standard Time\": \"Asia/Tashkent\",\n  \"West Bank Standard Time\": \"Asia/Hebron\",\n  \"West Pacific Standard Time\": \"Pacific/Port_Moresby\",\n  \"Yakutsk Standard Time\": \"Asia/Yakutsk\",\n  \"Yukon Standard Time\": \"America/Whitehorse\",\n};\n\nconst normalizeTimezone = (timezone: string | undefined): string | undefined => {\n  if (!timezone) {\n    return;\n  }\n\n  return WINDOWS_TO_IANA[timezone] ?? timezone;\n};\n\nexport { normalizeTimezone };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/parse-ics-calendar.ts",
    "content": "import { convertIcsCalendar } from \"ts-ics\";\n\ninterface ParseIcsCalendarOptions {\n  icsString: string;\n}\n\nconst parseIcsCalendar = (options: ParseIcsCalendarOptions) =>\n  convertIcsCalendar(globalThis.undefined, options.icsString);\n\nexport { parseIcsCalendar };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/parse-ics-events.ts",
    "content": "import type { IcsCalendar, IcsDuration, IcsEvent } from \"ts-ics\";\nimport type { EventTimeSlot } from \"./types\";\nimport {\n  KEEPER_EVENT_SUFFIX,\n  MS_PER_DAY,\n  MS_PER_HOUR,\n  MS_PER_MINUTE,\n  MS_PER_SECOND,\n  MS_PER_WEEK,\n} from \"@keeper.sh/constants\";\nimport { normalizeTimezone } from \"./normalize-timezone\";\n\nconst DEFAULT_DURATION_VALUE = 0;\n\nconst durationToMs = (duration: IcsDuration): number => {\n  const {\n    weeks = DEFAULT_DURATION_VALUE,\n    days = DEFAULT_DURATION_VALUE,\n    hours = DEFAULT_DURATION_VALUE,\n    minutes = DEFAULT_DURATION_VALUE,\n    seconds = DEFAULT_DURATION_VALUE,\n  } = duration;\n  return (\n    weeks * MS_PER_WEEK +\n    days * MS_PER_DAY +\n    hours * MS_PER_HOUR +\n    minutes * MS_PER_MINUTE +\n    seconds * MS_PER_SECOND\n  );\n};\n\nconst getEventEndTime = (event: IcsEvent, startTime: Date): Date => {\n  if (\"end\" in event && event.end) {\n    return event.end.date;\n  }\n\n  if (\"duration\" in event && event.duration) {\n    return new Date(startTime.getTime() + durationToMs(event.duration));\n  }\n\n  return startTime;\n};\n\nconst isKeeperEvent = (uid: string | undefined): boolean =>\n  uid?.endsWith(KEEPER_EVENT_SUFFIX) ?? false;\n\nconst getEventStartTimeZone = (event: IcsEvent): string | undefined =>\n  normalizeTimezone(event.start.local?.timezone);\n\nconst getEventAvailability = (event: IcsEvent) => {\n  if (event.timeTransparent === \"TRANSPARENT\") {\n    return \"free\";\n  }\n\n  if (event.timeTransparent === \"OPAQUE\") {\n    return \"busy\";\n  }\n\n  return null;\n};\n\nconst parseIcsEvents = (calendar: IcsCalendar): EventTimeSlot[] => {\n  const result: EventTimeSlot[] = [];\n\n  for (const event of calendar.events ?? []) {\n    if (isKeeperEvent(event.uid)) {\n      continue;\n    }\n    if (!event.uid) {\n      continue;\n    }\n\n    const startTime = event.start.date;\n    const availability = getEventAvailability(event);\n\n    result.push({\n      ...availability && { availability },\n      description: event.description,\n      endTime: getEventEndTime(event, startTime),\n      exceptionDates: event.exceptionDates,\n      isAllDay: event.start.type === \"DATE\",\n      location: event.location,\n      recurrenceRule: event.recurrenceRule,\n      startTime,\n      startTimeZone: getEventStartTimeZone(event),\n      title: event.summary,\n      uid: event.uid,\n    });\n  }\n\n  return result;\n};\n\nexport { parseIcsEvents };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/pull-remote-calendar.ts",
    "content": "import { createSafeFetch } from \"../../utils/safe-fetch\";\nimport type { SafeFetchOptions } from \"../../utils/safe-fetch\";\nimport { parseIcsCalendar } from \"./parse-ics-calendar\";\nimport { HTTP_STATUS } from \"@keeper.sh/constants\";\n\nconst normalizeCalendarUrl = (url: string): string => {\n  if (url.startsWith(\"webcal://\")) {\n    return url.replace(\"webcal://\", \"https://\");\n  }\n\n  return url;\n};\n\nclass CalendarFetchError extends Error {\n  public readonly statusCode?: number;\n  public readonly authRequired: boolean;\n\n  constructor(\n    message: string,\n    statusCode?: number,\n  ) {\n    super(message);\n    this.name = \"CalendarFetchError\";\n    this.statusCode = statusCode;\n    this.authRequired =\n      statusCode === HTTP_STATUS.UNAUTHORIZED || statusCode === HTTP_STATUS.FORBIDDEN;\n  }\n}\n\ninterface ParsedUrl {\n  url: string;\n  headers: Record<string, string>;\n}\n\nconst parseUrlWithCredentials = (url: string): ParsedUrl => {\n  const parsed = new URL(url);\n  const headers: Record<string, string> = {};\n\n  if (parsed.username || parsed.password) {\n    const credentials = `${decodeURIComponent(parsed.username)}:${decodeURIComponent(parsed.password)}`;\n    headers[\"Authorization\"] = `Basic ${Buffer.from(credentials).toString(\"base64\")}`;\n    parsed.username = \"\";\n    parsed.password = \"\";\n  }\n\n  return { headers, url: parsed.toString() };\n};\n\nconst ICS_USER_AGENT = \"Keeper/1.0 (+https://www.keeper.sh)\";\n\nconst fetchRemoteText = async (url: string, options?: SafeFetchOptions): Promise<string> => {\n  const { url: cleanUrl, headers } = parseUrlWithCredentials(url);\n  const safeFetch = createSafeFetch(options);\n  const response = await safeFetch(cleanUrl, {\n    headers: { \"User-Agent\": ICS_USER_AGENT, ...headers },\n  });\n\n  if (!response.ok) {\n    if (response.status === HTTP_STATUS.UNAUTHORIZED || response.status === HTTP_STATUS.FORBIDDEN) {\n      throw new CalendarFetchError(\n        \"Calendar requires authentication. Use a public URL or include credentials in the URL (https://user:pass@host/path).\",\n        response.status,\n      );\n    }\n\n    if (response.status === HTTP_STATUS.NOT_FOUND) {\n      throw new CalendarFetchError(\n        \"Calendar not found. Check that the URL is correct.\",\n        response.status,\n      );\n    }\n\n    throw new CalendarFetchError(\n      `Failed to fetch calendar (HTTP ${response.status})`,\n      response.status,\n    );\n  }\n\n  return response.text();\n};\n\ntype ParsedCalendarResult = ReturnType<typeof parseIcsCalendar>;\n\ntype OutputICal = \"ical\" | [\"ical\"];\ntype OutputJSON = \"json\" | [\"json\"];\ntype OutputICALOrJSON = [\"ical\", \"json\"] | [\"json\", \"ical\"];\n\ninterface JustICal {\n  ical: string;\n  json?: never;\n}\ninterface JustJSON {\n  json: ParsedCalendarResult;\n  ical?: never;\n}\ntype ICalOrJSON = Omit<JustICal, \"json\"> & Omit<JustJSON, \"ical\">;\n\nconst normalizeOutputToArray = (output: OutputJSON | OutputICal | OutputICALOrJSON): string[] => {\n  if (typeof output === \"string\") {\n    return [output];\n  }\n  return output;\n};\n\nasync function pullRemoteCalendar(output: OutputICal, url: string, options?: SafeFetchOptions): Promise<JustICal>;\n\nasync function pullRemoteCalendar(output: OutputJSON, url: string, options?: SafeFetchOptions): Promise<JustJSON>;\n\nasync function pullRemoteCalendar(output: OutputICALOrJSON, url: string, options?: SafeFetchOptions): Promise<ICalOrJSON>;\n\n/**\n * @throws\n */\nasync function pullRemoteCalendar(\n  output: OutputJSON | OutputICal | OutputICALOrJSON,\n  url: string,\n  options?: SafeFetchOptions,\n): Promise<JustICal | JustJSON | ICalOrJSON> {\n  const outputs = normalizeOutputToArray(output);\n  const normalizedUrl = normalizeCalendarUrl(url);\n  const ical = await fetchRemoteText(normalizedUrl, options);\n  const json = parseIcsCalendar({ icsString: ical });\n\n  if (!json.version || !json.prodId) {\n    throw new CalendarFetchError(\n      \"URL does not return a valid iCal file. Make sure the URL points directly to an .ics file.\",\n    );\n  }\n\n  if (!outputs.includes(\"json\")) {\n    return { ical };\n  }\n\n  if (!outputs.includes(\"ical\")) {\n    return { json };\n  }\n\n  return { ical, json };\n}\n\nexport { CalendarFetchError, pullRemoteCalendar };\n"
  },
  {
    "path": "packages/calendar/src/ics/utils/types.ts",
    "content": "type EventAvailability = \"busy\" | \"free\" | \"oof\" | \"workingElsewhere\";\n\ninterface EventTimeSlot {\n  uid: string;\n  startTime: Date;\n  endTime: Date;\n  availability?: EventAvailability;\n  isAllDay?: boolean;\n  startTimeZone?: string;\n  recurrenceRule?: object;\n  exceptionDates?: object;\n  title?: string;\n  description?: string;\n  location?: string;\n}\n\ntype StoredEventTimeSlot = EventTimeSlot & {\n  id: string;\n};\n\ninterface EventDiff {\n  toAdd: EventTimeSlot[];\n  toRemove: StoredEventTimeSlot[];\n}\n\ninterface SerializedIcsCalendar {\n  version: string;\n  events?: {\n    uid?: string;\n    start: { date: string };\n    end?: { date: string };\n    duration?: {\n      weeks?: number;\n      days?: number;\n      hours?: number;\n      minutes?: number;\n      seconds?: number;\n    };\n  }[];\n}\n\nexport type {\n  EventAvailability,\n  EventTimeSlot,\n  StoredEventTimeSlot,\n  EventDiff,\n  SerializedIcsCalendar,\n};\n"
  },
  {
    "path": "packages/calendar/src/index.ts",
    "content": "export {\n  createOAuthProviders,\n  type ValidatedState,\n  type AuthorizationUrlOptions,\n  type NormalizedUserInfo,\n  type OAuthTokens,\n  type OAuthProvider,\n  type OAuthProvidersConfig,\n  type OAuthProviders,\n  type OAuthStateStore,\n} from \"./core/oauth/providers\";\nexport {\n  buildOAuthConfigs,\n  type OAuthCredentials,\n  type OAuthEnv,\n  type OAuthConfigs,\n} from \"./core/oauth/config\";\nexport {\n  type OAuthRefreshResult,\n  type OAuthTokenProvider,\n} from \"./core/oauth/token-provider\";\nexport {\n  ensureValidToken,\n  type TokenState,\n  type TokenRefresher,\n} from \"./core/oauth/ensure-valid-token\";\nexport {\n  runWithCredentialRefreshLock,\n  type RefreshLockStore,\n} from \"./core/oauth/refresh-coordinator\";\nexport { isOAuthReauthRequiredError } from \"./core/oauth/error-classification\";\nexport {\n  createCoordinatedRefresher,\n  type CoordinatedRefresherOptions,\n} from \"./core/oauth/coordinated-refresher\";\nexport {\n  OAuthSourceProvider,\n  type FetchEventsResult,\n  type ProcessEventsOptions,\n} from \"./core/oauth/source-provider\";\nexport {\n  OAUTH_SYNC_WINDOW_VERSION,\n  getOAuthSyncWindow,\n  getOAuthSyncWindowStart,\n} from \"./core/oauth/sync-window\";\nexport {\n  decodeStoredSyncToken,\n  encodeStoredSyncToken,\n  resolveSyncTokenForWindow,\n} from \"./core/oauth/sync-token\";\nexport {\n  createOAuthSourceProvider,\n  type CreateOAuthSourceProviderOptions,\n  type OAuthSourceAccount,\n  type SourceProvider,\n} from \"./core/oauth/create-source-provider\";\nexport { generateDeterministicEventUid, isKeeperEvent } from \"./core/events/identity\";\nexport { inferAllDayEvent, resolveIsAllDayEvent } from \"./core/events/all-day\";\nexport { RateLimiter, type RateLimiterConfig } from \"./core/utils/rate-limiter\";\nexport { createRedisRateLimiter, type RedisRateLimiter, type RedisRateLimiterConfig } from \"./core/utils/redis-rate-limiter\";\nexport { allSettledWithConcurrency, type AllSettledWithConcurrencyOptions } from \"./core/utils/concurrency\";\nexport { getErrorMessage } from \"./core/utils/error\";\nexport { getEventsForDestination } from \"./core/events/events\";\nexport {\n  buildSourceEventIdentityKey,\n  buildSourceEventsToAdd,\n  buildSourceEventStateIdsToRemove,\n  type ExistingSourceEventState,\n  type SourceEventDiffOptions,\n} from \"./core/source/event-diff\";\nexport {\n  filterSourceEventsToSyncWindow,\n  resolveSourceSyncTokenAction,\n  splitSourceEventsByStorageIdentity,\n  type OAuthSyncWindow,\n  type SourceEventsInWindowResult,\n  type SourceEventStoragePartition,\n  type SourceSyncTokenAction,\n} from \"./core/source/sync-diagnostics\";\nexport {\n  insertEventStatesWithConflictResolution,\n  type EventStateInsertRow,\n  type EventStateInsertClient,\n} from \"./core/source/write-event-states\";\nexport { computeSyncOperations } from \"./core/sync/operations\";\nexport {\n  type DestinationSyncResult,\n  type SyncProgressUpdate,\n  type SyncStage,\n} from \"./core/sync/types\";\nexport {\n  SyncAggregateTracker,\n  type SyncAggregateSnapshot,\n  type SyncAggregateMessage,\n  type SyncAggregateTrackerConfig,\n} from \"./core/sync/aggregate-tracker\";\nexport {\n  createSyncAggregateRuntime,\n  type SyncAggregateRuntimeConfig,\n  type SyncAggregateRuntime,\n} from \"./core/sync/aggregate-runtime\";\nexport {\n  getEventMappingsForDestination,\n  createEventMapping,\n  deleteEventMapping,\n  type EventMapping,\n} from \"./core/events/mappings\";\nexport {\n  getOAuthAccountsByPlan,\n  getOAuthAccountsForUser,\n  getUserEventsForSync,\n  type OAuthAccount,\n} from \"./core/oauth/accounts\";\nexport {\n  createGoogleOAuthService,\n  createGoogleTokenRefresher,\n  type GoogleOAuthCredentials,\n  type GoogleOAuthService,\n} from \"./core/oauth/google\";\nexport {\n  createMicrosoftOAuthService,\n  createMicrosoftTokenRefresher,\n  type MicrosoftOAuthCredentials,\n  type MicrosoftOAuthService,\n} from \"./core/oauth/microsoft\";\nexport {\n  generateState,\n  validateState,\n} from \"./core/oauth/state\";\nexport type {\n  AuthType,\n  CalDAVProviderConfig,\n  ProviderCapabilities,\n  ProviderDefinition,\n  SourcePreferenceOption,\n  SourcePreferencesConfig,\n  SyncableEvent,\n  PushResult,\n  DeleteResult,\n  SyncResult,\n  RemoteEvent,\n  EventAvailability,\n  ProviderConfig,\n  OAuthProviderConfig,\n  GoogleCalendarConfig,\n  OutlookCalendarConfig,\n  CalDAVConfig,\n  ListRemoteEventsOptions,\n  BroadcastSyncStatus,\n  SourceEvent,\n  SourceSyncResult,\n  OAuthSourceConfig,\n  SyncOperation,\n} from \"./core/types\";\n\nexport {\n  PROVIDER_DEFINITIONS,\n  getProvider,\n  getProvidersByAuthType,\n  getOAuthProviders,\n  getCalDAVProviders,\n  isCalDAVProvider,\n  isOAuthProvider,\n  isProviderId,\n  getActiveProviders,\n} from \"./utils/registry/registry\";\nexport type {\n  ProviderId,\n  OAuthProviderId,\n  CalDAVProviderId,\n  OAuthProviderDefinition,\n  CalDAVProviderDefinition,\n} from \"./utils/registry/registry\";\n\nexport {\n  getSourceProvider,\n  type SourceProvidersConfig,\n} from \"./utils/registry/server\";\n\nexport {\n  executeRemoteOperations,\n  syncCalendar,\n} from \"./core/sync-engine\";\nexport type {\n  CalendarSyncProvider,\n  PendingChanges,\n  SyncCalendarOptions,\n} from \"./core/sync-engine\";\nexport { createRedisGenerationCheck } from \"./core/sync-engine/generation\";\nexport type { GenerationStore } from \"./core/sync-engine/generation\";\nexport { createDatabaseFlush } from \"./core/sync-engine/flush\";\nexport { ingestSource } from \"./core/sync-engine/ingest\";\nexport type {\n  IngestSourceOptions,\n  IngestionResult,\n  IngestionChanges,\n  ExistingEventState,\n  FetchEventsResult as IngestionFetchEventsResult,\n} from \"./core/sync-engine/ingest\";\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/destination/provider.ts",
    "content": "import { RateLimiter } from \"../../../core/utils/rate-limiter\";\nimport { generateDeterministicEventUid, isKeeperEvent } from \"../../../core/events/identity\";\nimport { getErrorMessage } from \"../../../core/utils/error\";\nimport type { DeleteResult, PushResult, RemoteEvent, SyncableEvent } from \"../../../core/types\";\nimport { CalDAVClient } from \"../shared/client\";\nimport { eventToICalString, parseICalToRemoteEvents } from \"../shared/ics\";\nimport { getCalDAVSyncWindow } from \"../shared/sync-window\";\n\nconst CALDAV_RATE_LIMIT_CONCURRENCY = 5;\nconst YEARS_UNTIL_FUTURE = 2;\n\ninterface CalDAVSyncProviderConfig {\n  authMethod?: \"basic\" | \"digest\";\n  calendarUrl: string;\n  serverUrl: string;\n  username: string;\n  password: string;\n}\n\nconst createCalDAVSyncProvider = (config: CalDAVSyncProviderConfig) => {\n  const client = new CalDAVClient({\n    authMethod: config.authMethod,\n    credentials: { password: config.password, username: config.username },\n    serverUrl: config.serverUrl,\n  });\n\n  const rateLimiter = new RateLimiter({ concurrency: CALDAV_RATE_LIMIT_CONCURRENCY });\n\n  const pushEvents = (events: SyncableEvent[]): Promise<PushResult[]> =>\n    Promise.all(\n      events.map((event) =>\n        rateLimiter.execute(async (): Promise<PushResult> => {\n          try {\n            const uid = generateDeterministicEventUid(event.id);\n            const iCalString = eventToICalString(event, uid);\n\n            await client.createCalendarObject({\n              calendarUrl: config.calendarUrl,\n              filename: `${uid}.ics`,\n              iCalString,\n            });\n\n            return { remoteId: uid, success: true };\n          } catch (error) {\n            return { error: getErrorMessage(error), success: false };\n          }\n        }),\n      ),\n    );\n\n  const deleteEvents = (eventIds: string[]): Promise<DeleteResult[]> =>\n    Promise.all(\n      eventIds.map((uid) =>\n        rateLimiter.execute(async (): Promise<DeleteResult> => {\n          try {\n            await client.deleteCalendarObject({\n              calendarUrl: config.calendarUrl,\n              filename: `${uid}.ics`,\n            });\n            return { success: true };\n          } catch (error) {\n            const notFound = error instanceof Error && error.message.includes(\"404\");\n            if (notFound) {\n              return { success: true };\n            }\n            return { error: getErrorMessage(error), success: false };\n          }\n        }),\n      ),\n    );\n\n  const listRemoteEvents = async (): Promise<RemoteEvent[]> => {\n    const syncWindow = getCalDAVSyncWindow(YEARS_UNTIL_FUTURE);\n    const calendarUrl = await client.resolveCalendarUrl(config.calendarUrl);\n\n    const objects = await client.fetchCalendarObjects({\n      calendarUrl,\n      timeRange: {\n        end: syncWindow.end.toISOString(),\n        start: syncWindow.start.toISOString(),\n      },\n    });\n\n    const remoteEvents: RemoteEvent[] = [];\n\n    for (const { data } of objects) {\n      if (!data) {\n        continue;\n      }\n\n      for (const parsed of parseICalToRemoteEvents(data)) {\n        if (!isKeeperEvent(parsed.uid) || parsed.endTime < syncWindow.start) {\n          continue;\n        }\n\n        remoteEvents.push(parsed);\n      }\n    }\n\n    return remoteEvents;\n  };\n\n  return { pushEvents, deleteEvents, listRemoteEvents };\n};\n\nexport { createCalDAVSyncProvider };\nexport type { CalDAVSyncProviderConfig };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/index.ts",
    "content": "export { createCalDAVSourceFetcher, type CalDAVSourceFetcherConfig } from \"./source/fetch-adapter\";\nexport { isCalDAVAuthenticationError } from \"./source/auth-error-classification\";\nexport { createCalDAVSyncProvider, type CalDAVSyncProviderConfig } from \"./destination/provider\";\n\nexport { createCalDAVSourceProvider } from \"./source/provider\";\nexport { createCalDAVSourceService } from \"./source/sync\";\n\nexport { CalDAVClient, createCalDAVClient } from \"./shared/client\";\nexport { eventToICalString, parseICalToRemoteEvent, parseICalToRemoteEvents } from \"./shared/ics\";\n\nexport type {\n  CalDAVProviderOptions,\n  CalDAVProviderConfig,\n  CalDAVAccount,\n  CalDAVServiceConfig,\n  CalDAVService,\n  CalDAVClientConfig,\n  CalendarInfo,\n  CalDAVSourceAccount,\n  CalDAVSourceConfig,\n  CalDAVSourceProviderConfig,\n  CalDAVSourceSyncResult,\n} from \"./types\";\n\nexport type { CalDAVSourceProvider } from \"./source/provider\";\nexport type { CalDAVSourceService } from \"./source/sync\";\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/shared/client.ts",
    "content": "import { createDAVClient } from \"tsdav\";\nimport { createSafeFetch } from \"../../../utils/safe-fetch\";\nimport { createDigestAwareFetch } from \"./digest-fetch\";\nimport type { CalDAVAuthMethod } from \"./digest-fetch\";\nimport type { SafeFetchOptions } from \"../../../utils/safe-fetch\";\nimport type { CalDAVClientConfig, CalendarInfo } from \"../types\";\n\ninterface CalendarObject {\n  url: string;\n  etag?: string;\n  data?: string;\n}\n\ntype DAVClientInstance = Awaited<ReturnType<typeof createDAVClient>>;\n\nconst getDisplayName = (name: unknown): string => {\n  if (typeof name === \"string\") {\n    return name;\n  }\n  return \"Unnamed Calendar\";\n};\n\nclass CalDAVClient {\n  private client: DAVClientInstance | null = null;\n  private config: CalDAVClientConfig;\n  private safeFetchOptions?: SafeFetchOptions;\n  private resolvedAuthMethod: (() => CalDAVAuthMethod | null) | null = null;\n\n  constructor(config: CalDAVClientConfig, safeFetchOptions?: SafeFetchOptions) {\n    this.config = config;\n    this.safeFetchOptions = safeFetchOptions;\n  }\n\n  getResolvedAuthMethod(): CalDAVAuthMethod | null {\n    return this.resolvedAuthMethod?.() ?? null;\n  }\n\n  private async getClient(): Promise<DAVClientInstance> {\n    if (!this.client) {\n      const safeFetch = createSafeFetch(this.safeFetchOptions);\n      const { fetch: digestAwareFetch, getResolvedMethod } = createDigestAwareFetch({\n        credentials: this.config.credentials,\n        baseFetch: safeFetch,\n        knownAuthMethod: this.config.authMethod,\n      });\n      this.resolvedAuthMethod = getResolvedMethod;\n      this.client = await createDAVClient({\n        authMethod: \"Custom\",\n        authFunction: () => Promise.resolve({}),\n        credentials: this.config.credentials,\n        defaultAccountType: \"caldav\",\n        fetch: digestAwareFetch,\n        serverUrl: this.config.serverUrl,\n      });\n    }\n    return this.client;\n  }\n\n  async discoverCalendars(): Promise<CalendarInfo[]> {\n    const client = await this.getClient();\n    const calendars = await client.fetchCalendars();\n\n    return calendars\n      .filter(({ components }) => components?.includes(\"VEVENT\"))\n      .map(({ url, displayName, ctag }) => ({\n        ctag,\n        displayName: getDisplayName(displayName),\n        url,\n      }));\n  }\n\n  async fetchCalendarDisplayName(calendarUrl: string): Promise<string | null> {\n    const calendars = await this.discoverCalendars();\n    const storedPath = new URL(calendarUrl).pathname;\n\n    const matchingCalendar = calendars.find(\n      (calendar) => new URL(calendar.url).pathname === storedPath,\n    );\n\n    return matchingCalendar?.displayName ?? null;\n  }\n\n  async resolveCalendarUrl(storedUrl: string): Promise<string> {\n    const calendars = await this.discoverCalendars();\n    const storedPath = new URL(storedUrl).pathname;\n\n    const matchingCalendar = calendars.find(\n      (calendar) => new URL(calendar.url).pathname === storedPath,\n    );\n\n    return matchingCalendar?.url ?? storedUrl;\n  }\n\n  async createCalendarObject(params: {\n    calendarUrl: string;\n    filename: string;\n    iCalString: string;\n  }): Promise<void> {\n    const client = await this.getClient();\n\n    const response = await client.createCalendarObject({\n      calendar: { url: params.calendarUrl },\n      filename: params.filename,\n      iCalString: params.iCalString,\n    });\n\n    await response.body?.cancel?.();\n  }\n\n  async deleteCalendarObject(params: { calendarUrl: string; filename: string }): Promise<void> {\n    const client = await this.getClient();\n    const objectUrl = CalDAVClient.normalizeUrl(params.calendarUrl, params.filename);\n\n    const response = await client.deleteCalendarObject({\n      calendarObject: { url: objectUrl },\n    });\n\n    await response.body?.cancel?.();\n  }\n\n  async fetchCalendarObjects(params: {\n    calendarUrl: string;\n    timeRange?: { start: string; end: string };\n  }): Promise<CalendarObject[]> {\n    const client = await this.getClient();\n\n    const objects = await client.fetchCalendarObjects({\n      calendar: { url: params.calendarUrl },\n      ...(params.timeRange && { timeRange: params.timeRange }),\n    });\n\n    return objects;\n  }\n\n  private static ensureTrailingSlash(url: string): string {\n    if (url.endsWith(\"/\")) {\n      return url;\n    }\n\n    return `${url}/`;\n  }\n\n  private static normalizeUrl(calendarUrl: string, filename: string): string {\n    const base = CalDAVClient.ensureTrailingSlash(calendarUrl);\n    return `${base}${filename}`;\n  }\n}\n\nconst createCalDAVClient = (config: CalDAVClientConfig, safeFetchOptions?: SafeFetchOptions): CalDAVClient =>\n  new CalDAVClient(config, safeFetchOptions);\n\nexport { CalDAVClient, createCalDAVClient };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/shared/digest-fetch.ts",
    "content": "import { createDigestClient } from \"@keeper.sh/digest-fetch\";\n\ntype FetchFunction = (input: string | Request | URL, init?: RequestInit) => Promise<Response>;\n\ntype AuthMethod = \"unknown\" | \"basic\" | \"digest\";\n\nconst HTTP_UNAUTHORIZED = 401;\n\ninterface DigestFetchCredentials {\n  username: string;\n  password: string;\n}\n\nconst encodeBasicCredentials = (username: string, password: string): string => {\n  const encoded = Buffer.from(`${username}:${password}`).toString(\"base64\");\n  return `Basic ${encoded}`;\n};\n\nconst mergeHeaders = (\n  init: RequestInit | undefined,\n  extra: Record<string, string>,\n): Record<string, string> => {\n  const merged: Record<string, string> = {};\n  const existing = new Headers(init?.headers);\n  for (const [key, value] of existing.entries()) {\n    merged[key] = value;\n  }\n  for (const [key, value] of Object.entries(extra)) {\n    merged[key] = value;\n  }\n  return merged;\n};\n\nconst isDigestChallenge = (response: Response): boolean => {\n  const header = response.headers.get(\"www-authenticate\");\n  if (!header) {\n    return false;\n  }\n  return /^Digest\\s/i.test(header);\n};\n\ninterface DigestAwareFetchOptions {\n  credentials: DigestFetchCredentials;\n  baseFetch: FetchFunction;\n  knownAuthMethod?: \"basic\" | \"digest\";\n}\n\ninterface DigestAwareFetchResult {\n  fetch: FetchFunction;\n  getResolvedMethod: () => CalDAVAuthMethod | null;\n}\n\nconst createDigestAwareFetch = (options: DigestAwareFetchOptions): DigestAwareFetchResult => {\n  const { credentials, baseFetch, knownAuthMethod } = options;\n  const basicAuth = encodeBasicCredentials(credentials.username, credentials.password);\n  const digestClient = createDigestClient({\n    user: credentials.username,\n    password: credentials.password,\n    fetch: baseFetch,\n  });\n\n  const state: { method: AuthMethod } = { method: knownAuthMethod ?? \"unknown\" };\n\n  const performFetch: FetchFunction = async (input, init) => {\n    if (state.method === \"digest\") {\n      return digestClient.fetch(input, init);\n    }\n\n    const headers = mergeHeaders(init, { authorization: basicAuth });\n    const response = await baseFetch(input, { ...init, headers });\n\n    if (state.method === \"basic\") {\n      return response;\n    }\n\n    if (response.status !== HTTP_UNAUTHORIZED) {\n      if (state.method === \"unknown\" && response.ok) {\n        state.method = \"basic\";\n      }\n      return response;\n    }\n\n    if (!isDigestChallenge(response)) {\n      return response;\n    }\n\n    await response.body?.cancel();\n    state.method = \"digest\";\n    return digestClient.fetch(input, init);\n  };\n\n  const getResolvedMethod = (): CalDAVAuthMethod | null => {\n    if (state.method === \"unknown\") {\n      return null;\n    }\n    return state.method;\n  };\n\n  return { fetch: performFetch, getResolvedMethod };\n};\n\ntype CalDAVAuthMethod = \"basic\" | \"digest\";\n\nconst resolveAuthMethod = (value: string): CalDAVAuthMethod => {\n  if (value === \"digest\") {\n    return \"digest\";\n  }\n  return \"basic\";\n};\n\nexport { createDigestAwareFetch, resolveAuthMethod };\nexport type { CalDAVAuthMethod };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/shared/ics.ts",
    "content": "import { generateIcsCalendar } from \"ts-ics\";\nimport { parseIcsCalendar } from \"../../../ics\";\nimport type { IcsCalendar, IcsDuration, IcsEvent } from \"ts-ics\";\nimport type { SyncableEvent } from \"../../../core/types\";\nimport { isKeeperEvent } from \"../../../core/events/identity\";\nimport { resolveIsAllDayEvent } from \"../../../core/events/all-day\";\nimport {\n  MS_PER_DAY,\n  MS_PER_HOUR,\n  MS_PER_MINUTE,\n  MS_PER_SECOND,\n  MS_PER_WEEK,\n} from \"@keeper.sh/constants\";\n\nconst DEFAULT_DURATION_VALUE = 0;\n\nconst durationToMs = (duration: IcsDuration): number => {\n  const {\n    weeks = DEFAULT_DURATION_VALUE,\n    days = DEFAULT_DURATION_VALUE,\n    hours = DEFAULT_DURATION_VALUE,\n    minutes = DEFAULT_DURATION_VALUE,\n    seconds = DEFAULT_DURATION_VALUE,\n  } = duration;\n\n  return (\n    weeks * MS_PER_WEEK\n    + days * MS_PER_DAY\n    + hours * MS_PER_HOUR\n    + minutes * MS_PER_MINUTE\n    + seconds * MS_PER_SECOND\n  );\n};\n\nconst getEventEndTime = (event: IcsEvent, startTime: Date): Date => {\n  if (\"end\" in event && event.end) {\n    return event.end.date;\n  }\n\n  if (\"duration\" in event && event.duration) {\n    return new Date(startTime.getTime() + durationToMs(event.duration));\n  }\n\n  return startTime;\n};\n\nconst eventToICalString = (event: SyncableEvent, uid: string): string => {\n  const isAllDay = resolveIsAllDayEvent(event);\n  const icsEvent: IcsEvent = {\n    description: event.description,\n    end: { date: event.endTime, ...(isAllDay && { type: \"DATE\" }) },\n    location: event.location,\n    stamp: { date: new Date() },\n    start: { date: event.startTime, ...(isAllDay && { type: \"DATE\" }) },\n    summary: event.summary,\n    ...(event.availability === \"free\" && { timeTransparent: \"TRANSPARENT\" }),\n    uid,\n  };\n\n  const calendar: IcsCalendar = {\n    events: [icsEvent],\n    prodId: \"-//Keeper//Keeper Calendar//EN\",\n    version: \"2.0\",\n  };\n\n  return generateIcsCalendar(calendar);\n};\n\ninterface ParsedCalendarEvent {\n  availability?: SyncableEvent[\"availability\"];\n  deleteId: string;\n  endTime: Date;\n  isKeeperEvent: boolean;\n  isAllDay?: boolean;\n  startTime: Date;\n  uid: string;\n  title?: string;\n  description?: string;\n  location?: string;\n  startTimeZone?: string;\n  recurrenceRule?: object;\n  exceptionDates?: object;\n}\n\nconst mapAvailability = (transparency: \"TRANSPARENT\" | \"OPAQUE\" | undefined) => {\n  if (transparency === \"TRANSPARENT\") {\n    return \"free\";\n  }\n  return \"busy\";\n};\n\nconst mapIcsEventToParsedEvent = (event: IcsEvent): ParsedCalendarEvent | null => {\n  if (!event.uid || !event.start?.date) {\n    return null;\n  }\n\n  const startTime = event.start.date;\n  const endTime = getEventEndTime(event, startTime);\n\n  return {\n    availability: mapAvailability(event.timeTransparent),\n    deleteId: event.uid,\n    description: event.description,\n    endTime,\n    exceptionDates: event.exceptionDates,\n    isKeeperEvent: isKeeperEvent(event.uid),\n    isAllDay: event.start.type === \"DATE\",\n    location: event.location,\n    recurrenceRule: event.recurrenceRule,\n    startTime,\n    startTimeZone: event.start.local?.timezone,\n    title: event.summary,\n    uid: event.uid,\n  };\n};\n\nconst parseICalToRemoteEvents = (icsString: string): ParsedCalendarEvent[] => {\n  const calendar = parseIcsCalendar({ icsString });\n  const events = calendar.events ?? [];\n  const parsed: ParsedCalendarEvent[] = [];\n\n  for (const event of events) {\n    const result = mapIcsEventToParsedEvent(event);\n    if (result) {\n      parsed.push(result);\n    }\n  }\n\n  return parsed;\n};\n\nconst parseICalToRemoteEvent = (icsString: string): ParsedCalendarEvent | null => {\n  const [event] = parseICalToRemoteEvents(icsString);\n  return event ?? null;\n};\n\nexport { eventToICalString, parseICalToRemoteEvent, parseICalToRemoteEvents };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/shared/sync-window.ts",
    "content": "import { getOAuthSyncWindow } from \"../../../core/oauth/sync-window\";\n\ninterface CalDAVSyncWindow {\n  start: Date;\n  end: Date;\n}\n\nconst getCalDAVSyncWindow = (\n  yearsUntilFuture: number,\n  startOfToday?: Date,\n): CalDAVSyncWindow => {\n  const oauthSyncWindow = getOAuthSyncWindow(yearsUntilFuture, startOfToday);\n  return {\n    end: oauthSyncWindow.timeMax,\n    start: oauthSyncWindow.timeMin,\n  };\n};\n\nexport { getCalDAVSyncWindow };\nexport type { CalDAVSyncWindow };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/source/auth-error-classification.ts",
    "content": "const AUTH_ERROR_STATUS_CODES = new Set([401]);\n\nconst AUTH_ERROR_PATTERNS = [\n  /\\binvalid credentials\\b/i,\n  /\\b(?:401|authentication)\\s+unauthorized\\b/i,\n  /\\bauthentication required\\b/i,\n  /\\bauthentication failed\\b/i,\n  /\\bnot authenticated\\b/i,\n];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst toStatusCode = (value: unknown): number | null => {\n  if (typeof value === \"number\" && Number.isInteger(value)) {\n    return value;\n  }\n\n  if (typeof value === \"string\") {\n    const parsed = Number(value.trim());\n    if (Number.isInteger(parsed)) {\n      return parsed;\n    }\n  }\n\n  return null;\n};\n\nconst hasAuthStatusCode = (value: unknown): boolean => {\n  const statusCode = toStatusCode(value);\n  if (statusCode === null) {\n    return false;\n  }\n  return AUTH_ERROR_STATUS_CODES.has(statusCode);\n};\n\nconst hasAuthMessage = (message: string): boolean =>\n  AUTH_ERROR_PATTERNS.some((pattern) => pattern.test(message));\n\nconst collectNestedCandidates = (value: Record<string, unknown>): unknown[] => {\n  const candidates: unknown[] = [];\n\n  if (\"cause\" in value) {\n    candidates.push(value.cause);\n  }\n\n  if (\"error\" in value) {\n    candidates.push(value.error);\n  }\n\n  if (\"errors\" in value && Array.isArray(value.errors)) {\n    candidates.push(...value.errors);\n  }\n\n  if (\"Error\" in value) {\n    candidates.push(value.Error);\n  }\n\n  if (\"messages\" in value && Array.isArray(value.messages)) {\n    candidates.push(...value.messages);\n  }\n\n  return candidates;\n};\n\nconst isCalDAVAuthenticationError = (error: unknown): boolean => {\n  const queue: unknown[] = [error];\n  const visited = new Set<unknown>();\n\n  while (queue.length > 0) {\n    const candidate = queue.shift();\n    if (!candidate) {\n      continue;\n    }\n\n    if (typeof candidate === \"string\") {\n      if (hasAuthMessage(candidate)) {\n        return true;\n      }\n      continue;\n    }\n\n    if (isRecord(candidate)) {\n      if (visited.has(candidate)) {\n        continue;\n      }\n      visited.add(candidate);\n\n      if (\"status\" in candidate && hasAuthStatusCode(candidate.status)) {\n        return true;\n      }\n\n      if (\"statusCode\" in candidate && hasAuthStatusCode(candidate.statusCode)) {\n        return true;\n      }\n\n      if (\"message\" in candidate && typeof candidate.message === \"string\" && hasAuthMessage(candidate.message)) {\n        return true;\n      }\n\n      queue.push(...collectNestedCandidates(candidate));\n      continue;\n    }\n\n    if (candidate instanceof Error && hasAuthMessage(candidate.message)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nexport { isCalDAVAuthenticationError };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/source/fetch-adapter.ts",
    "content": "import type { SourceEvent } from \"../../../core/types\";\nimport type { FetchEventsResult } from \"../../../core/sync-engine/ingest\";\nimport type { SafeFetchOptions } from \"../../../utils/safe-fetch\";\nimport { isKeeperEvent } from \"../../../core/events/identity\";\nimport { CalDAVClient } from \"../shared/client\";\nimport { parseICalToRemoteEvents } from \"../shared/ics\";\nimport { getCalDAVSyncWindow } from \"../shared/sync-window\";\n\nconst YEARS_UNTIL_FUTURE = 2;\n\ninterface CalDAVSourceFetcherConfig {\n  authMethod?: \"basic\" | \"digest\";\n  calendarUrl: string;\n  serverUrl: string;\n  username: string;\n  password: string;\n  safeFetchOptions?: SafeFetchOptions;\n}\n\ninterface CalDAVSourceFetcher {\n  fetchEvents: () => Promise<FetchEventsResult>;\n}\n\nconst createCalDAVSourceFetcher = (config: CalDAVSourceFetcherConfig): CalDAVSourceFetcher => {\n  const client = new CalDAVClient({\n    authMethod: config.authMethod,\n    credentials: { password: config.password, username: config.username },\n    serverUrl: config.serverUrl,\n  }, config.safeFetchOptions);\n\n  const fetchEvents = async (): Promise<FetchEventsResult> => {\n    const syncWindow = getCalDAVSyncWindow(YEARS_UNTIL_FUTURE);\n    const calendarUrl = await client.resolveCalendarUrl(config.calendarUrl);\n\n    const objects = await client.fetchCalendarObjects({\n      calendarUrl,\n      timeRange: {\n        end: syncWindow.end.toISOString(),\n        start: syncWindow.start.toISOString(),\n      },\n    });\n\n    const events: SourceEvent[] = [];\n\n    for (const { data } of objects) {\n      if (!data) {\n        continue;\n      }\n\n      for (const parsed of parseICalToRemoteEvents(data)) {\n        if (isKeeperEvent(parsed.uid) || parsed.endTime < syncWindow.start) {\n          continue;\n        }\n\n        events.push({\n          availability: parsed.availability,\n          description: parsed.description,\n          endTime: parsed.endTime,\n          exceptionDates: parsed.exceptionDates,\n          isAllDay: parsed.isAllDay,\n          location: parsed.location,\n          recurrenceRule: parsed.recurrenceRule,\n          startTime: parsed.startTime,\n          startTimeZone: parsed.startTimeZone,\n          title: parsed.title,\n          uid: parsed.uid,\n        });\n      }\n    }\n\n    return { events };\n  };\n\n  return { fetchEvents };\n};\n\nexport { createCalDAVSourceFetcher };\nexport type { CalDAVSourceFetcherConfig, CalDAVSourceFetcher };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/source/provider.ts",
    "content": "import { buildSourceEventStateIdsToRemove, buildSourceEventsToAdd } from \"../../../core/source/event-diff\";\nimport { insertEventStatesWithConflictResolution } from \"../../../core/source/write-event-states\";\nimport { isKeeperEvent } from \"../../../core/events/identity\";\nimport type { SourceEvent } from \"../../../core/types\";\nimport { calendarAccountsTable, calendarsTable, eventStatesTable } from \"@keeper.sh/database/schema\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport { CalDAVClient } from \"../shared/client\";\nimport { resolveAuthMethod } from \"../shared/digest-fetch\";\nimport { parseICalToRemoteEvents } from \"../shared/ics\";\nimport { isCalDAVAuthenticationError } from \"./auth-error-classification\";\nimport { createCalDAVSourceService } from \"./sync\";\nimport { getCalDAVSyncWindow } from \"./sync-window\";\nimport type {\n  CalDAVProviderOptions,\n  CalDAVSourceAccount,\n  CalDAVSourceProviderConfig,\n  CalDAVSourceSyncResult,\n} from \"../types\";\n\nconst stringifyIfPresent = (value: unknown) => {\n  if (!value) {\n    return;\n  }\n  return JSON.stringify(value);\n};\n\nconst EMPTY_COUNT = 0;\nconst YEARS_UNTIL_FUTURE = 2;\n\nconst DEFAULT_CALDAV_OPTIONS: CalDAVProviderOptions = {\n  providerId: \"caldav\",\n  providerName: \"CalDAV\",\n};\n\ninterface CalDAVSourceProvider {\n  syncAllSources: () => Promise<CalDAVSourceSyncResult>;\n  syncSource: (sourceId: string) => Promise<CalDAVSourceSyncResult>;\n  syncSourcesForUser: (userId: string) => Promise<CalDAVSourceSyncResult>;\n}\n\nconst createCalDAVSourceProvider = (\n  config: CalDAVSourceProviderConfig,\n  options: CalDAVProviderOptions = DEFAULT_CALDAV_OPTIONS,\n): CalDAVSourceProvider => {\n  const { database } = config;\n  const sourceService = createCalDAVSourceService(config);\n\n  const fetchEventsFromCalDAV = async (account: CalDAVSourceAccount): Promise<SourceEvent[]> => {\n    const password = sourceService.getDecryptedPassword(account.encryptedPassword);\n    const client = new CalDAVClient({\n      authMethod: resolveAuthMethod(account.authMethod),\n      credentials: {\n        password,\n        username: account.username,\n      },\n      serverUrl: account.serverUrl,\n    });\n\n    const syncWindow = getCalDAVSyncWindow(YEARS_UNTIL_FUTURE);\n\n    const calendarUrl = await client.resolveCalendarUrl(account.calendarUrl);\n\n    const objects = await client.fetchCalendarObjects({\n      calendarUrl,\n      timeRange: {\n        end: syncWindow.end.toISOString(),\n        start: syncWindow.start.toISOString(),\n      },\n    });\n\n    const events: SourceEvent[] = [];\n\n    for (const { data } of objects) {\n      if (!data) {\n        continue;\n      }\n\n      for (const parsed of parseICalToRemoteEvents(data)) {\n        if (isKeeperEvent(parsed.uid)) {\n          continue;\n        }\n\n        if (parsed.endTime < syncWindow.start) {\n          continue;\n        }\n\n        events.push({\n          availability: parsed.availability,\n          description: parsed.description,\n          endTime: parsed.endTime,\n          exceptionDates: parsed.exceptionDates,\n          isAllDay: parsed.isAllDay,\n          location: parsed.location,\n          recurrenceRule: parsed.recurrenceRule,\n          startTime: parsed.startTime,\n          startTimeZone: parsed.startTimeZone,\n          title: parsed.title,\n          uid: parsed.uid,\n        });\n      }\n    }\n\n    return events;\n  };\n\n  const processEvents = async (\n    calendarId: string,\n    events: SourceEvent[],\n  ): Promise<CalDAVSourceSyncResult> => {\n    const existingEvents = await database\n      .select({\n        availability: eventStatesTable.availability,\n        endTime: eventStatesTable.endTime,\n        id: eventStatesTable.id,\n        isAllDay: eventStatesTable.isAllDay,\n        sourceEventType: eventStatesTable.sourceEventType,\n        sourceEventUid: eventStatesTable.sourceEventUid,\n        startTime: eventStatesTable.startTime,\n      })\n      .from(eventStatesTable)\n      .where(eq(eventStatesTable.calendarId, calendarId));\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, events, { isDeltaSync: false });\n    const eventStateIdsToRemove = buildSourceEventStateIdsToRemove(existingEvents, events);\n\n    if (eventStateIdsToRemove.length > EMPTY_COUNT) {\n      await database\n        .delete(eventStatesTable)\n        .where(\n          and(\n            eq(eventStatesTable.calendarId, calendarId),\n            inArray(eventStatesTable.id, eventStateIdsToRemove),\n          ),\n        );\n    }\n\n    if (eventsToAdd.length > EMPTY_COUNT) {\n      await insertEventStatesWithConflictResolution(\n        database,\n        eventsToAdd.map((event) => ({\n          availability: event.availability,\n          calendarId,\n          description: event.description,\n          endTime: event.endTime,\n          exceptionDates: stringifyIfPresent(event.exceptionDates),\n          isAllDay: event.isAllDay,\n          location: event.location,\n          recurrenceRule: stringifyIfPresent(event.recurrenceRule),\n          sourceEventType: event.sourceEventType ?? \"default\",\n          sourceEventUid: event.uid,\n          startTime: event.startTime,\n          startTimeZone: event.startTimeZone,\n          title: event.title,\n        })),\n      );\n    }\n\n    return {\n      eventsAdded: eventsToAdd.length,\n      eventsRemoved: eventStateIdsToRemove.length,\n      syncToken: null,\n    };\n  };\n\n  const refreshOriginalName = async (account: CalDAVSourceAccount): Promise<void> => {\n    if (account.originalName !== null) {\n      return;\n    }\n\n    const password = sourceService.getDecryptedPassword(account.encryptedPassword);\n    const client = new CalDAVClient({\n      authMethod: resolveAuthMethod(account.authMethod),\n      credentials: { password, username: account.username },\n      serverUrl: account.serverUrl,\n    });\n\n    const displayName = await client.fetchCalendarDisplayName(account.calendarUrl);\n\n    if (!displayName) {\n      return;\n    }\n\n    await database\n      .update(calendarsTable)\n      .set({ originalName: displayName })\n      .where(eq(calendarsTable.id, account.calendarId));\n  };\n\n  const syncSingleSource = async (\n    account: CalDAVSourceAccount,\n  ): Promise<CalDAVSourceSyncResult> => {\n    try {\n      await refreshOriginalName(account);\n      const events = await fetchEventsFromCalDAV(account);\n      return processEvents(account.calendarId, events);\n    } catch (error) {\n      if (isCalDAVAuthenticationError(error)) {\n        await database\n          .update(calendarAccountsTable)\n          .set({ needsReauthentication: true })\n          .where(eq(calendarAccountsTable.id, account.calendarAccountId));\n      }\n\n      return {\n        eventsAdded: EMPTY_COUNT,\n        eventsRemoved: EMPTY_COUNT,\n        syncToken: null,\n      };\n    }\n  };\n\n  const getSourcesToSync = (): Promise<CalDAVSourceAccount[]> => {\n    if (options.providerId === \"caldav\") {\n      return sourceService.getAllCalDAVSources();\n    }\n    return sourceService.getCalDAVSourcesByProvider(options.providerId);\n  };\n\n  const combineResults = (results: CalDAVSourceSyncResult[]): CalDAVSourceSyncResult => {\n    let eventsAdded = EMPTY_COUNT;\n    let eventsRemoved = EMPTY_COUNT;\n    for (const result of results) {\n      eventsAdded += result.eventsAdded;\n      eventsRemoved += result.eventsRemoved;\n    }\n    return { eventsAdded, eventsRemoved, syncToken: null };\n  };\n\n  const syncAllSources = async (): Promise<CalDAVSourceSyncResult> => {\n    const sources = await getSourcesToSync();\n    const results = await Promise.all(sources.map((source) => syncSingleSource(source)));\n    return combineResults(results);\n  };\n\n  const syncSource = async (calendarId: string): Promise<CalDAVSourceSyncResult> => {\n    const sources = await sourceService.getAllCalDAVSources();\n    const source = sources.find(({ calendarId: sourceCalendarId }) => sourceCalendarId === calendarId);\n\n    if (!source) {\n      return { eventsAdded: EMPTY_COUNT, eventsRemoved: EMPTY_COUNT, syncToken: null };\n    }\n\n    return syncSingleSource(source);\n  };\n\n  const filterSourcesByProvider = (sources: CalDAVSourceAccount[]): CalDAVSourceAccount[] => {\n    if (options.providerId === \"caldav\") {\n      return sources;\n    }\n    return sources.filter((source) => source.provider === options.providerId);\n  };\n\n  const syncSourcesForUser = async (userId: string): Promise<CalDAVSourceSyncResult> => {\n    const sources = await sourceService.getCalDAVSourcesForUser(userId);\n    const filteredSources = filterSourcesByProvider(sources);\n    const results = await Promise.all(filteredSources.map((source) => syncSingleSource(source)));\n    return combineResults(results);\n  };\n\n  return {\n    syncAllSources,\n    syncSource,\n    syncSourcesForUser,\n  };\n};\n\nexport { createCalDAVSourceProvider };\nexport type { CalDAVSourceProvider };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/source/sync-window.ts",
    "content": "export { getCalDAVSyncWindow } from \"../shared/sync-window\";\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/source/sync.ts",
    "content": "import { calendarAccountsTable, caldavCredentialsTable, calendarsTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { decryptPassword } from \"@keeper.sh/database\";\nimport type { CalDAVSourceAccount, CalDAVSourceProviderConfig } from \"../types\";\n\nconst CALDAV_CALENDAR_TYPE = \"caldav\";\n\ninterface CalDAVSourceService {\n  getAllCalDAVSources: () => Promise<CalDAVSourceAccount[]>;\n  getCalDAVSourcesByProvider: (provider: string) => Promise<CalDAVSourceAccount[]>;\n  getCalDAVSourcesForUser: (userId: string) => Promise<CalDAVSourceAccount[]>;\n  getDecryptedPassword: (encryptedPassword: string) => string;\n  updateSyncToken: (calendarId: string, syncToken: string | null) => Promise<void>;\n}\n\nconst mapSourceToAccount = (source: {\n  authMethod: string;\n  calendarAccountId: string;\n  calendarUrl: string | null;\n  encryptedPassword: string;\n  name: string;\n  originalName: string | null;\n  provider: string;\n  serverUrl: string;\n  calendarId: string;\n  syncToken: string | null;\n  userId: string;\n  username: string;\n}): CalDAVSourceAccount => {\n  if (!source.calendarUrl) {\n    throw new Error(`CalDAV source ${source.calendarId} is missing calendarUrl`);\n  }\n  return {\n    ...source,\n    calendarUrl: source.calendarUrl,\n    provider: source.provider,\n  };\n};\n\nconst createCalDAVSourceService = (config: CalDAVSourceProviderConfig): CalDAVSourceService => {\n  const { database, encryptionKey } = config;\n\n  const getAllCalDAVSources = async (): Promise<CalDAVSourceAccount[]> => {\n    const sources = await database\n      .select({\n        authMethod: caldavCredentialsTable.authMethod,\n        calendarAccountId: calendarAccountsTable.id,\n        calendarId: calendarsTable.id,\n        calendarUrl: calendarsTable.calendarUrl,\n        encryptedPassword: caldavCredentialsTable.encryptedPassword,\n        name: calendarsTable.name,\n        originalName: calendarsTable.originalName,\n        provider: calendarAccountsTable.provider,\n        serverUrl: caldavCredentialsTable.serverUrl,\n        syncToken: calendarsTable.syncToken,\n        userId: calendarsTable.userId,\n        username: caldavCredentialsTable.username,\n      })\n      .from(calendarsTable)\n      .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .innerJoin(\n        caldavCredentialsTable,\n        eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id),\n      )\n      .where(\n        and(\n          eq(calendarsTable.calendarType, CALDAV_CALENDAR_TYPE),\n          eq(calendarAccountsTable.needsReauthentication, false),\n        ),\n      );\n\n    return sources.map((source) => mapSourceToAccount(source));\n  };\n\n  const getCalDAVSourcesByProvider = async (provider: string): Promise<CalDAVSourceAccount[]> => {\n    const sources = await database\n      .select({\n        authMethod: caldavCredentialsTable.authMethod,\n        calendarAccountId: calendarAccountsTable.id,\n        calendarId: calendarsTable.id,\n        calendarUrl: calendarsTable.calendarUrl,\n        encryptedPassword: caldavCredentialsTable.encryptedPassword,\n        name: calendarsTable.name,\n        originalName: calendarsTable.originalName,\n        provider: calendarAccountsTable.provider,\n        serverUrl: caldavCredentialsTable.serverUrl,\n        syncToken: calendarsTable.syncToken,\n        userId: calendarsTable.userId,\n        username: caldavCredentialsTable.username,\n      })\n      .from(calendarsTable)\n      .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .innerJoin(\n        caldavCredentialsTable,\n        eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id),\n      )\n      .where(\n        and(\n          eq(calendarsTable.calendarType, CALDAV_CALENDAR_TYPE),\n          eq(calendarAccountsTable.provider, provider),\n          eq(calendarAccountsTable.needsReauthentication, false),\n        ),\n      );\n\n    return sources.map((source) => mapSourceToAccount(source));\n  };\n\n  const getCalDAVSourcesForUser = async (userId: string): Promise<CalDAVSourceAccount[]> => {\n    const sources = await database\n      .select({\n        authMethod: caldavCredentialsTable.authMethod,\n        calendarAccountId: calendarAccountsTable.id,\n        calendarId: calendarsTable.id,\n        calendarUrl: calendarsTable.calendarUrl,\n        encryptedPassword: caldavCredentialsTable.encryptedPassword,\n        name: calendarsTable.name,\n        originalName: calendarsTable.originalName,\n        provider: calendarAccountsTable.provider,\n        serverUrl: caldavCredentialsTable.serverUrl,\n        syncToken: calendarsTable.syncToken,\n        userId: calendarsTable.userId,\n        username: caldavCredentialsTable.username,\n      })\n      .from(calendarsTable)\n      .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .innerJoin(\n        caldavCredentialsTable,\n        eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id),\n      )\n      .where(\n        and(\n          eq(calendarsTable.calendarType, CALDAV_CALENDAR_TYPE),\n          eq(calendarsTable.userId, userId),\n          eq(calendarAccountsTable.needsReauthentication, false),\n        ),\n      );\n\n    return sources.map((source) => mapSourceToAccount(source));\n  };\n\n  const getDecryptedPassword = (encryptedPassword: string): string =>\n    decryptPassword(encryptedPassword, encryptionKey);\n\n  const updateSyncToken = async (calendarId: string, syncToken: string | null): Promise<void> => {\n    await database\n      .update(calendarsTable)\n      .set({ syncToken })\n      .where(eq(calendarsTable.id, calendarId));\n  };\n\n  return {\n    getAllCalDAVSources,\n    getCalDAVSourcesByProvider,\n    getCalDAVSourcesForUser,\n    getDecryptedPassword,\n    updateSyncToken,\n  };\n};\n\nexport { createCalDAVSourceService };\nexport type { CalDAVSourceService };\n"
  },
  {
    "path": "packages/calendar/src/providers/caldav/types.ts",
    "content": "import type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { SyncableEvent } from \"../../core/types\";\n\ninterface CalDAVProviderOptions {\n  providerId: string;\n  providerName: string;\n}\n\ninterface CalDAVProviderConfig {\n  database: BunSQLDatabase;\n  encryptionKey: string;\n}\n\ninterface CalDAVAccount {\n  calendarId: string;\n  userId: string;\n  provider: string;\n  accountId: string | null;\n  email: string | null;\n  serverUrl: string;\n  calendarUrl: string;\n  username: string;\n  encryptedPassword: string;\n}\n\ninterface CalDAVSourceAccount {\n  authMethod: string;\n  calendarAccountId: string;\n  calendarId: string;\n  userId: string;\n  provider: string;\n  serverUrl: string;\n  calendarUrl: string;\n  name: string;\n  originalName: string | null;\n  username: string;\n  encryptedPassword: string;\n  syncToken: string | null;\n}\n\ninterface CalDAVSourceConfig {\n  database: BunSQLDatabase;\n  calendarId: string;\n  userId: string;\n  calendarUrl: string;\n  serverUrl: string;\n  syncToken: string | null;\n}\n\ninterface CalDAVSourceProviderConfig {\n  database: BunSQLDatabase;\n  encryptionKey: string;\n}\n\ninterface CalDAVSourceSyncResult {\n  eventsAdded: number;\n  eventsRemoved: number;\n  syncToken: string | null;\n}\n\ninterface CalDAVServiceConfig {\n  database: BunSQLDatabase;\n  encryptionKey: string;\n}\n\ninterface CalDAVService {\n  getCalDAVAccountsForUser: (userId: string, providerFilter?: string) => Promise<CalDAVAccount[]>;\n  getCalDAVAccountsByProvider: (provider: string) => Promise<CalDAVAccount[]>;\n  getDecryptedPassword: (encryptedPassword: string) => string;\n  getUserEvents: (userId: string) => Promise<SyncableEvent[]>;\n}\n\ninterface CalDAVClientConfig {\n  serverUrl: string;\n  credentials: {\n    username: string;\n    password: string;\n  };\n  authMethod?: \"basic\" | \"digest\";\n}\n\ninterface CalendarInfo {\n  url: string;\n  displayName: string;\n  ctag?: string;\n}\n\nexport type {\n  CalDAVProviderOptions,\n  CalDAVProviderConfig,\n  CalDAVAccount,\n  CalDAVServiceConfig,\n  CalDAVService,\n  CalDAVClientConfig,\n  CalendarInfo,\n  CalDAVSourceAccount,\n  CalDAVSourceConfig,\n  CalDAVSourceProviderConfig,\n  CalDAVSourceSyncResult,\n};\n"
  },
  {
    "path": "packages/calendar/src/providers/fastmail/destination/provider.ts",
    "content": "const FASTMAIL_SERVER_URL = \"https://caldav.fastmail.com/\";\n\nexport { FASTMAIL_SERVER_URL };\n"
  },
  {
    "path": "packages/calendar/src/providers/fastmail/index.ts",
    "content": "export { FASTMAIL_SERVER_URL } from \"./destination/provider\";\nexport { createFastMailSourceProvider } from \"./source/provider\";\n"
  },
  {
    "path": "packages/calendar/src/providers/fastmail/source/provider.ts",
    "content": "import { createCalDAVSourceProvider } from \"../../caldav\";\nimport type { CalDAVSourceProviderConfig } from \"../../caldav\";\n\nconst PROVIDER_OPTIONS = {\n  providerId: \"fastmail\",\n  providerName: \"Fastmail\",\n};\n\nconst createFastMailSourceProvider = (config: CalDAVSourceProviderConfig) =>\n  createCalDAVSourceProvider(config, PROVIDER_OPTIONS);\n\nexport { createFastMailSourceProvider };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/destination/provider.ts",
    "content": "import { generateDeterministicEventUid, isKeeperEvent } from \"../../../core/events/identity\";\nimport { getOAuthSyncWindowStart } from \"../../../core/oauth/sync-window\";\nimport { ensureValidToken } from \"../../../core/oauth/ensure-valid-token\";\nimport type { TokenState, TokenRefresher } from \"../../../core/oauth/ensure-valid-token\";\nimport type { RedisRateLimiter } from \"../../../core/utils/redis-rate-limiter\";\nimport type { DeleteResult, PushResult, RemoteEvent, SyncableEvent } from \"../../../core/types\";\nimport { googleApiErrorSchema, googleEventListSchema } from \"@keeper.sh/data-schemas\";\nimport { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { GOOGLE_CALENDAR_API, GOOGLE_CALENDAR_MAX_RESULTS } from \"../shared/api\";\nimport { withBackoff } from \"../shared/backoff\";\nimport { executeBatchChunked } from \"../shared/batch\";\nimport { isRateLimitApiError, parseGoogleApiError } from \"../shared/errors\";\nimport type { BatchSubRequest } from \"../shared/batch\";\nimport { parseEventTime } from \"../shared/date-time\";\nimport { serializeGoogleEvent } from \"./serialize-event\";\n\ninterface GoogleSyncProviderConfig {\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  externalCalendarId: string;\n  calendarId: string;\n  userId: string;\n  refreshAccessToken?: TokenRefresher;\n  rateLimiter?: RedisRateLimiter;\n  signal?: AbortSignal;\n}\n\nclass GoogleCalendarApiError extends Error {\n  public readonly status: number;\n  public readonly apiError: ReturnType<typeof parseGoogleApiError>;\n  constructor(status: number, body: string) {\n    super(`Google Calendar API ${status}: ${body}`);\n    this.name = \"GoogleCalendarApiError\";\n    this.status = status;\n    this.apiError = parseGoogleApiError(body);\n  }\n}\n\nconst isDirectEventId = (identifier: string): boolean => !identifier.includes(\"@\");\n\nconst extractBatchErrorMessage = (body: unknown, fallbackStatus: number): string => {\n  const fallback = `Batch sub-request failed with status ${fallbackStatus}`;\n  if (!googleApiErrorSchema.allows(body)) {\n    return fallback;\n  }\n  return googleApiErrorSchema.assert(body).error?.message ?? fallback;\n};\n\nconst extractEventIdFromLookup = (body: unknown): string | undefined => {\n  if (!googleEventListSchema.allows(body)) {\n    return;\n  }\n  const firstItem = googleEventListSchema.assert(body).items?.[0];\n  if (!firstItem) {\n    return;\n  }\n  return firstItem.id;\n};\n\nconst createGoogleSyncProvider = (config: GoogleSyncProviderConfig) => {\n  const tokenState: TokenState = {\n    accessToken: config.accessToken,\n    accessTokenExpiresAt: config.accessTokenExpiresAt,\n    refreshToken: config.refreshToken,\n  };\n\n  const refreshIfNeeded = async (): Promise<void> => {\n    if (config.refreshAccessToken) {\n      await ensureValidToken(tokenState, config.refreshAccessToken);\n    }\n  };\n\n  const eventsPath = `/calendar/v3/calendars/${encodeURIComponent(config.externalCalendarId)}/events`;\n\n  const buildPushRequest = (event: SyncableEvent): { uid: string; request: BatchSubRequest } | null => {\n    const uid = generateDeterministicEventUid(`${event.id}:${config.externalCalendarId}`);\n    const resource = serializeGoogleEvent(event, uid);\n    if (!resource) {\n      return null;\n    }\n    return {\n      uid,\n      request: {\n        method: \"POST\",\n        path: eventsPath,\n        headers: { \"Content-Type\": \"application/json\" },\n        body: resource,\n      },\n    };\n  };\n\n  interface ConflictEntry { index: number; uid: string; event: SyncableEvent }\n\n  const lookupConflictingEvents = async (\n    conflicts: ConflictEntry[],\n    results: PushResult[],\n    batchOptions: { rateLimiter?: RedisRateLimiter; signal?: AbortSignal },\n  ): Promise<{ conflict: ConflictEntry; googleEventId: string }[]> => {\n    const lookupResponses = await executeBatchChunked(\n      conflicts.map((conflict) => ({\n        method: \"GET\",\n        path: `${eventsPath}?iCalUID=${encodeURIComponent(conflict.uid)}&showDeleted=true`,\n      })),\n      tokenState.accessToken,\n      batchOptions,\n    );\n\n    const found: { conflict: ConflictEntry; googleEventId: string }[] = [];\n\n    for (const [index, conflict] of conflicts.entries()) {\n      const response = lookupResponses[index];\n      if (!response || response.statusCode !== 200) {\n        results[conflict.index] = { error: \"Conflict resolution failed: could not find existing event\", success: false };\n        continue;\n      }\n\n      const googleEventId = extractEventIdFromLookup(response.body);\n      if (!googleEventId) {\n        results[conflict.index] = { error: \"Conflict resolution failed: could not find existing event\", success: false };\n        continue;\n      }\n\n      found.push({ conflict, googleEventId });\n    }\n\n    return found;\n  };\n\n  const isSuccessOrNotFound = (statusCode: number): boolean =>\n    (statusCode >= 200 && statusCode < 300) || statusCode === HTTP_STATUS.NOT_FOUND;\n\n  const deleteConflictingEvents = async (\n    deletable: { conflict: ConflictEntry; googleEventId: string }[],\n    results: PushResult[],\n    batchOptions: { rateLimiter?: RedisRateLimiter; signal?: AbortSignal },\n  ): Promise<{ conflict: ConflictEntry; request: BatchSubRequest }[]> => {\n    const deleteResponses = await executeBatchChunked(\n      deletable.map(({ googleEventId }) => ({\n        method: \"DELETE\",\n        path: `${eventsPath}/${encodeURIComponent(googleEventId)}`,\n      })),\n      tokenState.accessToken,\n      batchOptions,\n    );\n\n    const retryable: { conflict: ConflictEntry; request: BatchSubRequest }[] = [];\n\n    for (const [index, { conflict }] of deletable.entries()) {\n      const deleteResponse = deleteResponses[index];\n      if (!deleteResponse || !isSuccessOrNotFound(deleteResponse.statusCode)) {\n        results[conflict.index] = { error: \"Conflict resolution failed: could not delete existing event\", success: false };\n        continue;\n      }\n\n      const built = buildPushRequest(conflict.event);\n      if (!built) {\n        results[conflict.index] = { success: true };\n        continue;\n      }\n\n      retryable.push({ conflict, request: built.request });\n    }\n\n    return retryable;\n  };\n\n  const retryConflictPushes = async (\n    retryable: { conflict: ConflictEntry; request: BatchSubRequest }[],\n    results: PushResult[],\n    batchOptions: { rateLimiter?: RedisRateLimiter; signal?: AbortSignal },\n  ): Promise<void> => {\n    const retryResponses = await executeBatchChunked(\n      retryable.map(({ request }) => request),\n      tokenState.accessToken,\n      batchOptions,\n    );\n\n    for (const [index, { conflict }] of retryable.entries()) {\n      const response = retryResponses[index];\n      if (!response) {\n        results[conflict.index] = { error: \"Conflict resolution failed: missing retry response\", success: false };\n        continue;\n      }\n\n      if (response.statusCode < 200 || response.statusCode >= 300) {\n        results[conflict.index] = { error: `Conflict resolution failed: ${extractBatchErrorMessage(response.body, response.statusCode)}`, success: false };\n        continue;\n      }\n\n      results[conflict.index] = { remoteId: conflict.uid, success: true, conflictResolved: true };\n    }\n  };\n\n  const resolveConflicts = async (conflicts: ConflictEntry[], results: PushResult[]): Promise<void> => {\n    const batchOptions = { rateLimiter: config.rateLimiter, signal: config.signal };\n\n    const deletable = await lookupConflictingEvents(conflicts, results, batchOptions);\n    if (deletable.length === 0) {\n      return;\n    }\n\n    const retryable = await deleteConflictingEvents(deletable, results, batchOptions);\n    if (retryable.length === 0) {\n      return;\n    }\n\n    await retryConflictPushes(retryable, results, batchOptions);\n  };\n\n  const pushEvents = async (events: SyncableEvent[]): Promise<PushResult[]> => {\n    await refreshIfNeeded();\n\n    const results: PushResult[] = Array.from({ length: events.length });\n    const pending: { index: number; uid: string; batchIndex: number }[] = [];\n    const requests: BatchSubRequest[] = [];\n\n    for (let index = 0; index < events.length; index++) {\n      const event = events[index];\n      if (!event) {\n        results[index] = { success: true };\n        continue;\n      }\n\n      const built = buildPushRequest(event);\n      if (!built) {\n        results[index] = { success: true };\n        continue;\n      }\n\n      pending.push({ index, uid: built.uid, batchIndex: requests.length });\n      requests.push(built.request);\n    }\n\n    if (requests.length === 0) {\n      return results;\n    }\n\n    const responses = await executeBatchChunked(requests, tokenState.accessToken, { rateLimiter: config.rateLimiter, signal: config.signal });\n    const conflicts: { index: number; uid: string; event: SyncableEvent }[] = [];\n\n    for (const entry of pending) {\n      const response = responses[entry.batchIndex];\n      const event = events[entry.index];\n\n      if (!response) {\n        results[entry.index] = { error: \"Missing batch response\", success: false };\n      } else if (response.statusCode >= 200 && response.statusCode < 300) {\n        results[entry.index] = { remoteId: entry.uid, success: true };\n      } else if (response.statusCode === 409 && event) {\n        conflicts.push({ index: entry.index, uid: entry.uid, event });\n      } else {\n        results[entry.index] = { error: extractBatchErrorMessage(response.body, response.statusCode), success: false };\n      }\n    }\n\n    if (conflicts.length > 0) {\n      await resolveConflicts(conflicts, results);\n    }\n\n    return results;\n  };\n\n  const resolveDeleteRequests = async (\n    eventIds: string[],\n    results: DeleteResult[],\n  ): Promise<{ subRequests: BatchSubRequest[]; indexMap: number[] }> => {\n    const directSubRequests: BatchSubRequest[] = [];\n    const directIndexMap: number[] = [];\n    const lookupIds: string[] = [];\n    const lookupOriginalIndices: number[] = [];\n\n    for (let index = 0; index < eventIds.length; index++) {\n      const identifier = eventIds[index];\n      if (!identifier) {\n        results[index] = { success: true };\n        continue;\n      }\n\n      if (isDirectEventId(identifier)) {\n        directIndexMap.push(index);\n        directSubRequests.push({\n          method: \"DELETE\",\n          path: `${eventsPath}/${encodeURIComponent(identifier)}`,\n        });\n      } else {\n        lookupIds.push(identifier);\n        lookupOriginalIndices.push(index);\n      }\n    }\n\n    if (lookupIds.length === 0) {\n      return { subRequests: directSubRequests, indexMap: directIndexMap };\n    }\n\n    const findSubRequests: BatchSubRequest[] = lookupIds.map((uid) => ({\n      method: \"GET\",\n      path: `${eventsPath}?iCalUID=${encodeURIComponent(uid)}`,\n    }));\n\n    const findResponses = await executeBatchChunked(findSubRequests, tokenState.accessToken, { rateLimiter: config.rateLimiter, signal: config.signal });\n\n    for (let findIndex = 0; findIndex < lookupIds.length; findIndex++) {\n      const originalIndex = lookupOriginalIndices[findIndex];\n      if (typeof originalIndex !== \"number\") {\n        continue;\n      }\n\n      const findResponse = findResponses[findIndex];\n      if (!findResponse || findResponse.statusCode !== 200) {\n        results[originalIndex] = { success: true };\n        continue;\n      }\n\n      const eventId = extractEventIdFromLookup(findResponse.body);\n      if (!eventId) {\n        results[originalIndex] = { success: true };\n        continue;\n      }\n\n      directIndexMap.push(originalIndex);\n      directSubRequests.push({\n        method: \"DELETE\",\n        path: `${eventsPath}/${encodeURIComponent(eventId)}`,\n      });\n    }\n\n    return { subRequests: directSubRequests, indexMap: directIndexMap };\n  };\n\n  const deleteEvents = async (eventIds: string[]): Promise<DeleteResult[]> => {\n    await refreshIfNeeded();\n\n    if (eventIds.length === 0) {\n      return [];\n    }\n\n    const results: DeleteResult[] = Array.from({ length: eventIds.length });\n    const { subRequests, indexMap } = await resolveDeleteRequests(eventIds, results);\n\n    if (subRequests.length === 0) {\n      return results;\n    }\n\n    const deleteResponses = await executeBatchChunked(subRequests, tokenState.accessToken, { rateLimiter: config.rateLimiter, signal: config.signal });\n\n    for (let deleteIndex = 0; deleteIndex < deleteResponses.length; deleteIndex++) {\n      const originalIndex = indexMap[deleteIndex];\n      if (typeof originalIndex !== \"number\") {\n        continue;\n      }\n\n      const deleteResponse = deleteResponses[deleteIndex];\n      if (!deleteResponse) {\n        results[originalIndex] = { error: \"Missing batch response\", success: false };\n        continue;\n      }\n\n      if (deleteResponse.statusCode >= 200 && deleteResponse.statusCode < 300) {\n        results[originalIndex] = { success: true };\n      } else if (deleteResponse.statusCode === HTTP_STATUS.NOT_FOUND) {\n        results[originalIndex] = { success: true };\n      } else {\n        const errorMessage = extractBatchErrorMessage(deleteResponse.body, deleteResponse.statusCode);\n        results[originalIndex] = { error: errorMessage, success: false };\n      }\n    }\n\n    return results;\n  };\n\n  const fetchRemoteEventsPage = async (pageToken: string | null): Promise<{\n    items: RemoteEvent[];\n    nextPageToken: string | null;\n  }> => {\n    if (config.rateLimiter) {\n      await config.rateLimiter.acquire(1);\n    }\n\n    const url = new URL(\n      `calendars/${encodeURIComponent(config.externalCalendarId)}/events`,\n      GOOGLE_CALENDAR_API,\n    );\n    url.searchParams.set(\"maxResults\", String(GOOGLE_CALENDAR_MAX_RESULTS));\n    url.searchParams.set(\"timeMin\", getOAuthSyncWindowStart().toISOString());\n    const futureDate = new Date();\n    futureDate.setFullYear(futureDate.getFullYear() + 2);\n    url.searchParams.set(\"timeMax\", futureDate.toISOString());\n    if (pageToken) {\n      url.searchParams.set(\"pageToken\", pageToken);\n    }\n\n    const response = await fetch(url, {\n      headers: { Authorization: `Bearer ${tokenState.accessToken}` },\n      method: \"GET\",\n    });\n\n    if (!response.ok) {\n      const errorBody = await response.text();\n      throw new GoogleCalendarApiError(response.status, errorBody);\n    }\n\n    const body = await response.json();\n    const data = googleEventListSchema.assert(body);\n\n    const items: RemoteEvent[] = [];\n    for (const event of data.items ?? []) {\n      if (!event.iCalUID || !isKeeperEvent(event.iCalUID)) {\n        continue;\n      }\n      const startTime = parseEventTime(event.start);\n      const endTime = parseEventTime(event.end);\n      if (!startTime || !endTime) {\n        continue;\n      }\n      items.push({\n        deleteId: event.id ?? event.iCalUID,\n        endTime,\n        isKeeperEvent: true,\n        startTime,\n        uid: event.iCalUID,\n      });\n    }\n\n    return { items, nextPageToken: data.nextPageToken ?? null };\n  };\n\n  const listRemoteEvents = async (): Promise<RemoteEvent[]> => {\n    await refreshIfNeeded();\n    const remoteEvents: RemoteEvent[] = [];\n    let pageToken: string | null = null;\n\n    do {\n      const currentPageToken: string | null = pageToken;\n      const page: { items: RemoteEvent[]; nextPageToken: string | null } = await withBackoff(\n        () => fetchRemoteEventsPage(currentPageToken),\n        {\n          signal: config.signal,\n          shouldRetry: (error) =>\n            error instanceof GoogleCalendarApiError && isRateLimitApiError(error.status, error.apiError),\n        },\n      );\n      remoteEvents.push(...page.items);\n      pageToken = page.nextPageToken;\n    } while (pageToken);\n\n    return remoteEvents;\n  };\n\n  return { pushEvents, deleteEvents, listRemoteEvents };\n};\n\nexport { createGoogleSyncProvider };\nexport type { GoogleSyncProviderConfig };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/destination/serialize-event.ts",
    "content": "import type { GoogleEvent } from \"@keeper.sh/data-schemas\";\nimport type { SyncableEvent } from \"../../../core/types\";\nimport { resolveIsAllDayEvent } from \"../../../core/events/all-day\";\n\nconst formatDateOnly = (value: Date): string => value.toISOString().slice(0, 10);\n\nconst buildDateField = (\n  time: Date,\n  isAllDay: boolean,\n  startTimeZone: string | undefined,\n  recurrenceRule: string | null | undefined,\n): NonNullable<GoogleEvent[\"start\"]> => {\n  if (isAllDay) {\n    return { date: formatDateOnly(time) };\n  }\n\n  const timeZone = startTimeZone ?? \"UTC\";\n  return {\n    dateTime: time.toISOString(),\n    ...(recurrenceRule && { timeZone }),\n  };\n};\n\nconst canSerializeGoogleEvent = (event: SyncableEvent): boolean => {\n  if (event.availability === \"workingElsewhere\") {\n    return false;\n  }\n\n  return true;\n};\n\nconst serializeGoogleEvent = (\n  event: SyncableEvent,\n  uid: string,\n  recurrenceRule?: string | null,\n): GoogleEvent | null => {\n  if (!canSerializeGoogleEvent(event)) {\n    return null;\n  }\n\n  const isAllDay = resolveIsAllDayEvent(event);\n\n  return {\n    description: event.description,\n    end: buildDateField(event.endTime, isAllDay, event.startTimeZone, recurrenceRule),\n    iCalUID: uid,\n    location: event.location,\n    start: buildDateField(event.startTime, isAllDay, event.startTimeZone, recurrenceRule),\n    summary: event.summary,\n    ...(event.availability === \"free\" && { transparency: \"transparent\" }),\n    ...(recurrenceRule && { recurrence: [`RRULE:${recurrenceRule}`] }),\n  };\n};\n\nexport { canSerializeGoogleEvent, serializeGoogleEvent };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/destination/sync.ts",
    "content": "import { getOAuthAccountsByPlan, getOAuthAccountsForUser, getUserEventsForSync } from \"../../../core/oauth/accounts\";\nimport type { OAuthAccount } from \"../../../core/oauth/accounts\";\nimport type { SyncableEvent } from \"../../../core/types\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\nconst PROVIDER = \"google\";\n\ntype GoogleAccount = OAuthAccount;\n\nconst getGoogleAccountsByPlan = (\n  database: BunSQLDatabase,\n  targetPlan: Plan,\n): Promise<GoogleAccount[]> => getOAuthAccountsByPlan(database, PROVIDER, targetPlan);\n\nconst getGoogleAccountsForUser = (\n  database: BunSQLDatabase,\n  userId: string,\n): Promise<GoogleAccount[]> => getOAuthAccountsForUser(database, PROVIDER, userId);\n\nconst getUserEvents = (database: BunSQLDatabase, userId: string): Promise<SyncableEvent[]> =>\n  getUserEventsForSync(database, userId);\n\nexport { getGoogleAccountsByPlan, getGoogleAccountsForUser, getUserEvents };\nexport type { GoogleAccount };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/index.ts",
    "content": "export { createGoogleSourceFetcher, type GoogleSourceFetcherConfig } from \"./source/fetch-adapter\";\nexport { listUserCalendars, CalendarListError } from \"./source/utils/list-calendars\";\nexport {\n  fetchCalendarEvents,\n  parseGoogleEvents,\n  EventsFetchError,\n} from \"./source/utils/fetch-events\";\nexport {\n  createGoogleCalendarSourceProvider,\n  GoogleCalendarSourceProvider,\n  type CreateGoogleSourceProviderConfig,\n  type GoogleSourceAccount,\n  type GoogleSourceConfig,\n} from \"./source/provider\";\nexport type {\n  GoogleCalendarListEntry,\n  GoogleCalendarListResponse,\n  GoogleEventDateTime,\n  GoogleCalendarEvent,\n  GoogleEventsListResponse,\n  FetchEventsOptions,\n  FetchEventsResult,\n  EventTimeSlot,\n} from \"./source/types\";\n\nexport {\n  createGoogleSyncProvider,\n  type GoogleSyncProviderConfig,\n} from \"./destination/provider\";\nexport {\n  getGoogleAccountsByPlan,\n  getGoogleAccountsForUser,\n  getUserEvents,\n  type GoogleAccount,\n} from \"./destination/sync\";\n\nexport {\n  GOOGLE_CALENDAR_API,\n  GOOGLE_CALENDAR_EVENTS_URL,\n  GOOGLE_CALENDAR_LIST_URL,\n  GOOGLE_CALENDAR_MAX_RESULTS,\n  GONE_STATUS,\n} from \"./shared/api\";\nexport { hasRateLimitMessage, isAuthError, isSimpleAuthError } from \"./shared/errors\";\nexport { parseEventDateTime, parseEventTime } from \"./shared/date-time\";\nexport type { GoogleDateTime, PartialGoogleDateTime, GoogleApiError } from \"./types\";\n"
  },
  {
    "path": "packages/calendar/src/providers/google/shared/api.ts",
    "content": "const GOOGLE_CALENDAR_API = \"https://www.googleapis.com/calendar/v3/\";\nconst GOOGLE_CALENDAR_EVENTS_URL = \"https://www.googleapis.com/calendar/v3/calendars\";\nconst GOOGLE_CALENDAR_LIST_URL = \"https://www.googleapis.com/calendar/v3/users/me/calendarList\";\nconst GOOGLE_CALENDAR_MAX_RESULTS = 250;\nconst GONE_STATUS = 410;\nconst GOOGLE_BATCH_API = \"https://www.googleapis.com/batch/calendar/v3\";\nconst GOOGLE_BATCH_MAX_SIZE = 50;\n\nexport {\n  GOOGLE_BATCH_API,\n  GOOGLE_BATCH_MAX_SIZE,\n  GOOGLE_CALENDAR_API,\n  GOOGLE_CALENDAR_EVENTS_URL,\n  GOOGLE_CALENDAR_LIST_URL,\n  GOOGLE_CALENDAR_MAX_RESULTS,\n  GONE_STATUS,\n};\n"
  },
  {
    "path": "packages/calendar/src/providers/google/shared/backoff.ts",
    "content": "const MAX_JITTER_MS = 1000;\nconst MAX_BACKOFF_MS = 64_000;\nconst DEFAULT_MAX_RETRIES = 5;\nconst BACKOFF_MULTIPLIER = 2;\n\nconst computeDelay = (attempt: number): number => {\n  const baseDelay = BACKOFF_MULTIPLIER ** attempt * 1000;\n  const jitter = Math.random() * MAX_JITTER_MS;\n  return Math.min(baseDelay + jitter, MAX_BACKOFF_MS);\n};\n\nconst createAbortableTimer = (\n  delayMs: number,\n  signal: AbortSignal,\n  resolve: () => void,\n  reject: (reason: unknown) => void,\n): void => {\n  const controller = new AbortController();\n\n  const onAbort = () => {\n    controller.abort();\n    reject(signal.reason);\n  };\n\n  const onTimeout = () => {\n    signal.removeEventListener(\"abort\", onAbort);\n    resolve();\n  };\n\n  signal.addEventListener(\"abort\", onAbort, { once: true });\n  const timer = setTimeout(onTimeout, delayMs);\n  controller.signal.addEventListener(\"abort\", () => clearTimeout(timer), { once: true });\n};\n\nconst abortableSleep = (delayMs: number, signal?: AbortSignal): Promise<void> => {\n  if (signal?.aborted) {\n    return Promise.reject(signal.reason);\n  }\n  if (!signal) {\n    return Bun.sleep(delayMs);\n  }\n  return new Promise((resolve, reject) => {\n    createAbortableTimer(delayMs, signal, resolve, reject);\n  });\n};\n\ninterface BackoffOptions {\n  maxRetries?: number;\n  signal?: AbortSignal;\n  shouldRetry: (error: unknown) => boolean;\n}\n\nconst withBackoff = async <TResult>(\n  operation: () => Promise<TResult>,\n  options: BackoffOptions,\n): Promise<TResult> => {\n  const maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    try {\n      return await operation();\n    } catch (error) {\n      const isLastAttempt = attempt === maxRetries;\n      if (isLastAttempt || !options.shouldRetry(error)) {\n        throw error;\n      }\n      await abortableSleep(computeDelay(attempt), options.signal);\n    }\n  }\n\n  throw new Error(\"Unreachable: backoff loop exited without returning or throwing\");\n};\n\nexport { withBackoff, abortableSleep, computeDelay, DEFAULT_MAX_RETRIES };\nexport type { BackoffOptions };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/shared/batch.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport type { RedisRateLimiter } from \"../../../core/utils/redis-rate-limiter\";\nimport { GOOGLE_BATCH_API, GOOGLE_BATCH_MAX_SIZE } from \"./api\";\nimport { withBackoff, abortableSleep, computeDelay, DEFAULT_MAX_RETRIES } from \"./backoff\";\nimport { isRateLimitApiError, parseGoogleApiError, parseGoogleApiErrorFromBody } from \"./errors\";\n\ninterface BatchSubRequest {\n  method: string;\n  path: string;\n  headers?: Record<string, string>;\n  body?: unknown;\n}\n\ninterface BatchSubResponse {\n  statusCode: number;\n  headers: Record<string, string>;\n  body: unknown;\n}\n\nconst generateBoundary = (): string =>\n  `batch_${crypto.randomUUID().replaceAll(\"-\", \"\")}`;\n\nconst serializeSubRequest = (subRequest: BatchSubRequest, index: number): string => {\n  const lines: string[] = [\n    `Content-Type: application/http`,\n    `Content-ID: <item-${index}>`,\n    \"\",\n    `${subRequest.method} ${subRequest.path} HTTP/1.1`,\n  ];\n\n  if (subRequest.headers) {\n    for (const [key, value] of Object.entries(subRequest.headers)) {\n      lines.push(`${key}: ${value}`);\n    }\n  }\n\n  if (\"body\" in subRequest && subRequest.body !== null) {\n    const bodyStr = JSON.stringify(subRequest.body);\n    lines.push(\"Content-Type: application/json\");\n    lines.push(`Content-Length: ${new TextEncoder().encode(bodyStr).length}`);\n    lines.push(\"\");\n    lines.push(bodyStr);\n  } else {\n    lines.push(\"\");\n  }\n\n  return lines.join(\"\\r\\n\");\n};\n\nconst buildBatchRequestBody = (subRequests: BatchSubRequest[], boundary: string): string => {\n  const parts: string[] = [];\n\n  for (let index = 0; index < subRequests.length; index++) {\n    const subRequest = subRequests[index];\n    if (!subRequest) {\n      continue;\n    }\n    parts.push(`--${boundary}\\r\\n${serializeSubRequest(subRequest, index)}`);\n  }\n\n  parts.push(`--${boundary}--`);\n\n  return parts.join(\"\\r\\n\");\n};\n\nconst parseContentId = (headers: Record<string, string>): number | null => {\n  const contentId = headers[\"content-id\"];\n  if (!contentId) {\n    return null;\n  }\n\n  const match = contentId.match(/item-(\\d+)/);\n  if (!match || !match[1]) {\n    return null;\n  }\n\n  return Number.parseInt(match[1], 10);\n};\n\nconst parsePartHeaders = (headerBlock: string): Record<string, string> => {\n  const headers: Record<string, string> = {};\n\n  for (const line of headerBlock.split(/\\r?\\n/)) {\n    const colonIndex = line.indexOf(\":\");\n    if (colonIndex === -1) {\n      continue;\n    }\n    const key = line.slice(0, colonIndex).trim().toLowerCase();\n    const value = line.slice(colonIndex + 1).trim();\n    headers[key] = value;\n  }\n\n  return headers;\n};\n\nconst parseStatusCode = (statusLine: string): number => {\n  const statusMatch = statusLine.match(/HTTP\\/[\\d.]+ (\\d+)/);\n  if (statusMatch && statusMatch[1]) {\n    return Number.parseInt(statusMatch[1], 10);\n  }\n  return 0;\n};\n\nconst parseHttpResponse = (httpBlock: string): { statusCode: number; headers: Record<string, string>; body: unknown } => {\n  const lines = httpBlock.split(/\\r?\\n/);\n  const [statusLine] = lines;\n\n  if (!statusLine) {\n    return { statusCode: 0, headers: {}, body: null };\n  }\n\n  const statusCode = parseStatusCode(statusLine);\n  const headers: Record<string, string> = {};\n  let bodyStartIndex = 1;\n\n  for (let lineIndex = 1; lineIndex < lines.length; lineIndex++) {\n    const line = lines[lineIndex];\n    if (!line || line.trim() === \"\") {\n      bodyStartIndex = lineIndex + 1;\n      break;\n    }\n    const colonIndex = line.indexOf(\":\");\n    if (colonIndex !== -1) {\n      const key = line.slice(0, colonIndex).trim().toLowerCase();\n      const value = line.slice(colonIndex + 1).trim();\n      headers[key] = value;\n    }\n  }\n\n  const bodyStr = lines.slice(bodyStartIndex).join(\"\\n\").trim();\n  let body: unknown = null;\n\n  if (bodyStr) {\n    try {\n      body = JSON.parse(bodyStr);\n    } catch {\n      body = bodyStr;\n    }\n  }\n\n  return { statusCode, headers, body };\n};\n\nconst DEFAULT_SEPARATOR_LENGTH = 2;\n\nconst parseBatchResponseBody = (responseText: string, boundary: string): BatchSubResponse[] => {\n  const parts = responseText.split(`--${boundary}`);\n  const results = new Map<number, BatchSubResponse>();\n  let maxIndex = -1;\n\n  for (const part of parts) {\n    const trimmed = part.trim();\n    if (!trimmed || trimmed === \"--\") {\n      continue;\n    }\n\n    const separatorIndex = trimmed.search(/\\r?\\n\\r?\\n/);\n    if (separatorIndex === -1) {\n      continue;\n    }\n\n    const separatorMatch = trimmed.slice(separatorIndex).match(/\\r?\\n\\r?\\n/);\n    let separatorLength = DEFAULT_SEPARATOR_LENGTH;\n    if (separatorMatch && separatorMatch[0]) {\n      separatorLength = separatorMatch[0].length;\n    }\n    const mimeHeaders = trimmed.slice(0, separatorIndex);\n    const httpBlock = trimmed.slice(separatorIndex + separatorLength);\n\n    const partHeaders = parsePartHeaders(mimeHeaders);\n    const contentIndex = parseContentId(partHeaders);\n    const parsed = parseHttpResponse(httpBlock);\n\n    let index = results.size;\n    if (contentIndex !== null) {\n      index = contentIndex;\n    }\n\n    results.set(index, {\n      statusCode: parsed.statusCode,\n      headers: parsed.headers,\n      body: parsed.body,\n    });\n\n    if (index > maxIndex) {\n      maxIndex = index;\n    }\n  }\n\n  const ordered: BatchSubResponse[] = [];\n  for (let index = 0; index <= maxIndex; index++) {\n    const entry = results.get(index);\n    if (entry) {\n      ordered.push(entry);\n    } else {\n      ordered.push({ statusCode: 0, headers: {}, body: null });\n    }\n  }\n\n  return ordered;\n};\n\nconst extractResponseBoundary = (contentType: string | null): string | null => {\n  if (!contentType) {\n    return null;\n  }\n\n  const match = contentType.match(/boundary=([^\\s;]+)/);\n  if (!match || !match[1]) {\n    return null;\n  }\n\n  return match[1];\n};\n\nclass GoogleBatchApiError extends Error {\n  public readonly status: number;\n  public readonly apiError: ReturnType<typeof parseGoogleApiError>;\n  constructor(status: number, body: string) {\n    super(`Google Batch API ${status}: ${body}`);\n    this.name = \"GoogleBatchApiError\";\n    this.status = status;\n    this.apiError = parseGoogleApiError(body);\n  }\n}\n\nconst executeBatch = (\n  subRequests: BatchSubRequest[],\n  accessToken: string,\n): Promise<BatchSubResponse[]> =>\n  withBackoff(\n    async () => {\n      const boundary = generateBoundary();\n      const requestBody = buildBatchRequestBody(subRequests, boundary);\n\n      const response = await fetch(GOOGLE_BATCH_API, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${accessToken}`,\n          \"Content-Type\": `multipart/mixed; boundary=${boundary}`,\n        },\n        body: requestBody,\n      });\n\n      if (!response.ok) {\n        const errorBody = await response.text();\n        throw new GoogleBatchApiError(response.status, errorBody);\n      }\n\n      const responseText = await response.text();\n\n      const responseBoundary = extractResponseBoundary(response.headers.get(\"Content-Type\"));\n      if (!responseBoundary) {\n        throw new Error(`Batch response missing boundary in Content-Type`);\n      }\n\n      return parseBatchResponseBody(responseText, responseBoundary);\n    },\n    {\n      shouldRetry: (error) =>\n        error instanceof GoogleBatchApiError && isRateLimitApiError(error.status, error.apiError),\n    },\n  );\n\nconst chunkArray = <TItem>(items: TItem[], size: number): TItem[][] => {\n  const chunks: TItem[][] = [];\n  for (let offset = 0; offset < items.length; offset += size) {\n    chunks.push(items.slice(offset, offset + size));\n  }\n  return chunks;\n};\n\nconst collectRateLimitedIndices = (responses: BatchSubResponse[]): number[] => {\n  const indices: number[] = [];\n  for (let index = 0; index < responses.length; index++) {\n    const response = responses[index];\n    if (response && isRateLimitApiError(response.statusCode, parseGoogleApiErrorFromBody(response.body))) {\n      indices.push(index);\n    }\n  }\n  return indices;\n};\n\ninterface BatchChunkedOptions {\n  rateLimiter?: RedisRateLimiter;\n  signal?: AbortSignal;\n}\n\nconst retryRateLimitedSubRequests = async (\n  subRequests: BatchSubRequest[],\n  accessToken: string,\n  options?: BatchChunkedOptions,\n): Promise<BatchSubResponse[]> => {\n  const results: BatchSubResponse[] = Array.from(\n    { length: subRequests.length },\n    () => ({ statusCode: 0, headers: {}, body: null }),\n  );\n\n  const pending = subRequests.map((request, index) => ({ request, index }));\n\n  for (let attempt = 0; attempt < DEFAULT_MAX_RETRIES; attempt++) {\n    if (pending.length === 0) {\n      break;\n    }\n\n    await abortableSleep(computeDelay(attempt), options?.signal);\n\n    const retryBatch = pending.map((entry) => entry.request);\n    if (options?.rateLimiter) {\n      await options.rateLimiter.acquire(retryBatch.length);\n    }\n    const responses = await executeBatch(retryBatch, accessToken);\n\n    const stillPending: typeof pending = [];\n    for (let responseIndex = 0; responseIndex < pending.length; responseIndex++) {\n      const entry = pending[responseIndex];\n      if (!entry) {\n        continue;\n      }\n      const response = responses[responseIndex];\n      if (response && isRateLimitApiError(response.statusCode, parseGoogleApiErrorFromBody(response.body))) {\n        stillPending.push(entry);\n      } else if (response) {\n        results[entry.index] = response;\n      }\n    }\n\n    pending.length = 0;\n    pending.push(...stillPending);\n  }\n\n  for (const entry of pending) {\n    results[entry.index] = { statusCode: HTTP_STATUS.TOO_MANY_REQUESTS, headers: {}, body: null };\n  }\n\n  return results;\n};\n\nconst executeBatchChunked = async (\n  subRequests: BatchSubRequest[],\n  accessToken: string,\n  options?: BatchChunkedOptions,\n): Promise<BatchSubResponse[]> => {\n  if (subRequests.length === 0) {\n    return [];\n  }\n\n  const chunks = chunkArray(subRequests, GOOGLE_BATCH_MAX_SIZE);\n  const allResponses: BatchSubResponse[] = [];\n\n  for (const chunk of chunks) {\n    if (options?.rateLimiter) {\n      await options.rateLimiter.acquire(chunk.length);\n    }\n    const responses = await executeBatch(chunk, accessToken);\n\n    const rateLimitedIndices = collectRateLimitedIndices(responses);\n    if (rateLimitedIndices.length === 0) {\n      allResponses.push(...responses);\n      continue;\n    }\n\n    const rateLimitedRequests: BatchSubRequest[] = [];\n    for (const index of rateLimitedIndices) {\n      const request = chunk[index];\n      if (!request) {\n        throw new Error(`Missing batch sub-request at index ${index}`);\n      }\n      rateLimitedRequests.push(request);\n    }\n    const retryResponses = await retryRateLimitedSubRequests(\n      rateLimitedRequests,\n      accessToken,\n      options,\n    );\n\n    for (let retryIndex = 0; retryIndex < rateLimitedIndices.length; retryIndex++) {\n      const originalIndex = rateLimitedIndices[retryIndex];\n      const retryResponse = retryResponses[retryIndex];\n      if (typeof originalIndex === \"number\" && retryResponse) {\n        responses[originalIndex] = retryResponse;\n      }\n    }\n\n    allResponses.push(...responses);\n  }\n\n  return allResponses;\n};\n\nexport {\n  buildBatchRequestBody,\n  parseBatchResponseBody,\n  executeBatch,\n  executeBatchChunked,\n  chunkArray,\n  extractResponseBoundary,\n};\nexport type { BatchSubRequest, BatchSubResponse };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/shared/date-time.ts",
    "content": "import type { PartialGoogleDateTime } from \"../types\";\n\nconst parseEventDateTime = (eventTime: PartialGoogleDateTime): Date => {\n  if (eventTime.dateTime) {\n    return new Date(eventTime.dateTime);\n  }\n  if (eventTime.date) {\n    return new Date(eventTime.date);\n  }\n  throw new Error(\"Event has no date or dateTime\");\n};\n\nconst parseEventTime = (time: PartialGoogleDateTime | undefined): Date | null => {\n  if (time?.dateTime) {\n    return new Date(time.dateTime);\n  }\n  if (time?.date) {\n    return new Date(time.date);\n  }\n  return null;\n};\n\nexport { parseEventDateTime, parseEventTime };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/shared/errors.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { googleApiErrorSchema } from \"@keeper.sh/data-schemas\";\nimport type { GoogleApiError } from \"../types\";\n\nconst GOOGLE_PERMISSION_REAUTH_REASONS = new Set([\n  \"access_token_scope_insufficient\",\n  \"insufficientpermissions\",\n]);\n\nconst GOOGLE_FORBIDDEN_AUTH_REASONS = new Set([\n  \"autherror\",\n  \"invalidcredentials\",\n  \"loginrequired\",\n]);\n\nconst hasRateLimitMessage = (message: string | undefined): boolean => {\n  if (!message) {\n    return false;\n  }\n  return message.includes(\"429\") || message.includes(\"rateLimitExceeded\");\n};\n\nconst normalizeReason = (reason: string): string => reason.toLowerCase();\n\nconst getErrorReasons = (error: GoogleApiError | undefined): string[] => {\n  if (!error) {\n    return [];\n  }\n\n  const reasons: string[] = [];\n\n  for (const entry of error.errors ?? []) {\n    if (entry.reason) {\n      reasons.push(normalizeReason(entry.reason));\n    }\n  }\n\n  for (const entry of error.details ?? []) {\n    if (entry.reason) {\n      reasons.push(normalizeReason(entry.reason));\n    }\n  }\n\n  return reasons;\n};\n\nconst hasReason = (error: GoogleApiError | undefined, reasonSet: Set<string>): boolean => {\n  const reasons = getErrorReasons(error);\n  return reasons.some((reason) => reasonSet.has(reason));\n};\n\nconst isAuthError = (status: number, error: GoogleApiError | undefined): boolean => {\n  if (\n    status === HTTP_STATUS.FORBIDDEN\n    && error?.status === \"PERMISSION_DENIED\"\n    && (\n      hasReason(error, GOOGLE_PERMISSION_REAUTH_REASONS)\n      || hasReason(error, GOOGLE_FORBIDDEN_AUTH_REASONS)\n    )\n  ) {\n    return true;\n  }\n  if (status === HTTP_STATUS.UNAUTHORIZED && error?.status === \"UNAUTHENTICATED\") {\n    return true;\n  }\n  return false;\n};\n\nconst isSimpleAuthError = (status: number): boolean => status === 401 || status === 403;\n\nconst RATE_LIMIT_REASONS = new Set([\n  \"ratelimitexceeded\",\n  \"userratelimitexceeded\",\n  \"rate_limit_exceeded\",\n]);\n\nconst isRateLimitResponseStatus = (status: number): boolean =>\n  status === HTTP_STATUS.FORBIDDEN || status === HTTP_STATUS.TOO_MANY_REQUESTS;\n\nconst isRateLimitApiError = (status: number, error?: GoogleApiError): boolean => {\n  if (!isRateLimitResponseStatus(status)) {\n    return false;\n  }\n  if (status === HTTP_STATUS.TOO_MANY_REQUESTS) {\n    return true;\n  }\n  if (hasReason(error, RATE_LIMIT_REASONS)) {\n    return true;\n  }\n  if (hasRateLimitMessage(error?.message)) {\n    return true;\n  }\n  return false;\n};\n\nconst EMPTY_API_ERROR: GoogleApiError = {};\n\nconst parseGoogleApiError = (text: string): GoogleApiError => {\n  try {\n    const parsed: unknown = JSON.parse(text);\n    if (!googleApiErrorSchema.allows(parsed)) {\n      return EMPTY_API_ERROR;\n    }\n    return googleApiErrorSchema.assert(parsed).error ?? EMPTY_API_ERROR;\n  } catch {\n    return EMPTY_API_ERROR;\n  }\n};\n\nconst parseGoogleApiErrorFromBody = (body: unknown): GoogleApiError => {\n  if (!googleApiErrorSchema.allows(body)) {\n    return EMPTY_API_ERROR;\n  }\n  return googleApiErrorSchema.assert(body).error ?? EMPTY_API_ERROR;\n};\n\nexport { hasRateLimitMessage, isAuthError, isRateLimitApiError, isRateLimitResponseStatus, isSimpleAuthError, parseGoogleApiError, parseGoogleApiErrorFromBody };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/source/fetch-adapter.ts",
    "content": "import type { FetchEventsResult } from \"../../../core/sync-engine/ingest\";\nimport type { RedisRateLimiter } from \"../../../core/utils/redis-rate-limiter\";\nimport { resolveSyncTokenForWindow } from \"../../../core/oauth/sync-token\";\nimport { getOAuthSyncWindow, OAUTH_SYNC_WINDOW_VERSION } from \"../../../core/oauth/sync-window\";\nimport { fetchCalendarEvents, parseGoogleEvents } from \"./utils/fetch-events\";\n\nconst YEARS_UNTIL_FUTURE = 2;\n\ninterface GoogleSourceFetcherConfig {\n  accessToken: string;\n  externalCalendarId: string;\n  syncToken: string | null;\n  rateLimiter?: RedisRateLimiter;\n}\n\ninterface GoogleSourceFetcher {\n  fetchEvents: () => Promise<FetchEventsResult>;\n}\n\nconst createGoogleSourceFetcher = (config: GoogleSourceFetcherConfig): GoogleSourceFetcher => {\n  const fetchEvents = async (): Promise<FetchEventsResult> => {\n    const fetchOptions: Parameters<typeof fetchCalendarEvents>[0] = {\n      accessToken: config.accessToken,\n      calendarId: config.externalCalendarId,\n      rateLimiter: config.rateLimiter,\n    };\n\n    const syncTokenResolution = resolveSyncTokenForWindow(\n      config.syncToken,\n      OAUTH_SYNC_WINDOW_VERSION,\n    );\n\n    if (syncTokenResolution.syncToken === null) {\n      const syncWindow = getOAuthSyncWindow(YEARS_UNTIL_FUTURE);\n      fetchOptions.timeMin = syncWindow.timeMin;\n      fetchOptions.timeMax = syncWindow.timeMax;\n    } else {\n      fetchOptions.syncToken = syncTokenResolution.syncToken;\n    }\n\n    const result = await fetchCalendarEvents(fetchOptions);\n\n    if (result.fullSyncRequired) {\n      return { events: [], fullSyncRequired: true };\n    }\n\n    const events = parseGoogleEvents(result.events);\n\n    return {\n      events,\n      nextSyncToken: result.nextSyncToken,\n      cancelledEventUids: result.cancelledEventUids,\n      isDeltaSync: result.isDeltaSync,\n    };\n  };\n\n  return { fetchEvents };\n};\n\nexport { createGoogleSourceFetcher };\nexport type { GoogleSourceFetcherConfig, GoogleSourceFetcher };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/source/provider.ts",
    "content": "import { buildSourceEventStateIdsToRemove, buildSourceEventsToAdd } from \"../../../core/source/event-diff\";\nimport { filterSourceEventsToSyncWindow, resolveSourceSyncTokenAction, splitSourceEventsByStorageIdentity } from \"../../../core/source/sync-diagnostics\";\nimport { insertEventStatesWithConflictResolution } from \"../../../core/source/write-event-states\";\nimport { OAuthSourceProvider, type ProcessEventsOptions } from \"../../../core/oauth/source-provider\";\nimport type { FetchEventsResult as BaseFetchEventsResult } from \"../../../core/oauth/source-provider\";\nimport { createOAuthSourceProvider, type SourceProvider } from \"../../../core/oauth/create-source-provider\";\nimport { encodeStoredSyncToken, resolveSyncTokenForWindow } from \"../../../core/oauth/sync-token\";\nimport { getOAuthSyncWindow, OAUTH_SYNC_WINDOW_VERSION } from \"../../../core/oauth/sync-window\";\nimport type { OAuthTokenProvider } from \"../../../core/oauth/token-provider\";\nimport type { RefreshLockStore } from \"../../../core/oauth/refresh-coordinator\";\nimport type { OAuthSourceConfig, SourceEvent, SourceSyncResult } from \"../../../core/types\";\nimport {\n  calendarAccountsTable,\n  calendarsTable,\n  eventStatesTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, eq, gt, inArray, lt, or } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport { fetchCalendarEvents, parseGoogleEvents } from \"./utils/fetch-events\";\n\nconst GOOGLE_PROVIDER_ID = \"google\";\nconst EMPTY_COUNT = 0;\n\nconst stringifyIfPresent = (value: unknown) => {\n  if (!value) {\n    return;\n  }\n  return JSON.stringify(value);\n};\nconst YEARS_UNTIL_FUTURE = 2;\n\ninterface GoogleSourceConfig extends OAuthSourceConfig {\n  originalName: string | null;\n  sourceName: string;\n  excludeFocusTime: boolean;\n  excludeOutOfOffice: boolean;\n}\n\nclass GoogleCalendarSourceProvider extends OAuthSourceProvider<GoogleSourceConfig> {\n  readonly name = \"Google Calendar\";\n  readonly providerId = GOOGLE_PROVIDER_ID;\n\n  protected oauthProvider: OAuthTokenProvider;\n\n  constructor(config: GoogleSourceConfig, oauthProvider: OAuthTokenProvider) {\n    super(config);\n    this.oauthProvider = oauthProvider;\n  }\n\n  async fetchEvents(syncToken: string | null): Promise<BaseFetchEventsResult> {\n    const fetchOptions: Parameters<typeof fetchCalendarEvents>[0] = {\n      accessToken: this.currentAccessToken,\n      calendarId: this.config.externalCalendarId,\n    };\n    const syncTokenResolution = resolveSyncTokenForWindow(\n      syncToken,\n      OAUTH_SYNC_WINDOW_VERSION,\n    );\n\n    if (syncTokenResolution.requiresBackfill && syncToken !== null) {\n      await this.clearSyncToken();\n    }\n\n    if (syncTokenResolution.syncToken === null) {\n      const syncWindow = getOAuthSyncWindow(YEARS_UNTIL_FUTURE);\n      fetchOptions.timeMin = syncWindow.timeMin;\n      fetchOptions.timeMax = syncWindow.timeMax;\n    } else {\n      fetchOptions.syncToken = syncTokenResolution.syncToken;\n    }\n\n    const result = await fetchCalendarEvents(fetchOptions);\n\n    if (result.fullSyncRequired) {\n      return { events: [], fullSyncRequired: true };\n    }\n\n    const events = parseGoogleEvents(result.events);\n    const fetchResult: BaseFetchEventsResult = {\n      events,\n      fullSyncRequired: false,\n      isDeltaSync: result.isDeltaSync,\n      nextSyncToken: result.nextSyncToken,\n    };\n\n    if (result.cancelledEventUids) {\n      fetchResult.cancelledEventUids = result.cancelledEventUids;\n    }\n\n    return fetchResult;\n  }\n\n  protected async processEvents(\n    events: SourceEvent[],\n    options: ProcessEventsOptions,\n  ): Promise<SourceSyncResult> {\n    const { database, calendarId } = this.config;\n    const { nextSyncToken, isDeltaSync, cancelledEventUids } = options;\n    const syncWindow = getOAuthSyncWindow(YEARS_UNTIL_FUTURE);\n    const {\n      events: eventsInWindow,\n      filteredCount: eventsFilteredOutOfWindow,\n    } = filterSourceEventsToSyncWindow(events, syncWindow);\n\n    await GoogleCalendarSourceProvider.removeOutOfRangeEvents(\n      database,\n      calendarId,\n      syncWindow,\n    );\n\n    const existingEvents = await database\n      .select({\n        availability: eventStatesTable.availability,\n        id: eventStatesTable.id,\n        endTime: eventStatesTable.endTime,\n        isAllDay: eventStatesTable.isAllDay,\n        sourceEventType: eventStatesTable.sourceEventType,\n        sourceEventUid: eventStatesTable.sourceEventUid,\n        startTime: eventStatesTable.startTime,\n      })\n      .from(eventStatesTable)\n      .where(eq(eventStatesTable.calendarId, calendarId));\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, eventsInWindow, { isDeltaSync });\n    const eventStateIdsToRemove = buildSourceEventStateIdsToRemove(\n      existingEvents,\n      eventsInWindow,\n      { cancelledEventUids, isDeltaSync },\n    );\n    const { eventsToInsert, eventsToUpdate } = splitSourceEventsByStorageIdentity(\n      existingEvents,\n      eventsToAdd,\n    );\n\n    if (eventStateIdsToRemove.length > EMPTY_COUNT || eventsToAdd.length > EMPTY_COUNT) {\n      await database.transaction(async (transactionDatabase) => {\n        if (eventStateIdsToRemove.length > EMPTY_COUNT) {\n          await transactionDatabase\n            .delete(eventStatesTable)\n            .where(\n              and(\n                eq(eventStatesTable.calendarId, calendarId),\n                inArray(eventStatesTable.id, eventStateIdsToRemove),\n              ),\n            );\n        }\n\n        if (eventsToAdd.length > EMPTY_COUNT) {\n          await insertEventStatesWithConflictResolution(\n            transactionDatabase,\n            eventsToAdd.map((event) => ({\n              availability: event.availability,\n              calendarId,\n              description: event.description,\n              endTime: event.endTime,\n              exceptionDates: stringifyIfPresent(event.exceptionDates),\n              isAllDay: event.isAllDay,\n              location: event.location,\n              recurrenceRule: stringifyIfPresent(event.recurrenceRule),\n              sourceEventType: event.sourceEventType,\n              sourceEventUid: event.uid,\n              startTime: event.startTime,\n              startTimeZone: event.startTimeZone,\n              title: event.title,\n            })),\n          );\n        }\n      });\n    }\n\n    const syncTokenAction = resolveSourceSyncTokenAction(nextSyncToken, isDeltaSync);\n    if (syncTokenAction.shouldResetSyncToken) {\n      await this.clearSyncToken();\n    }\n\n    if (syncTokenAction.nextSyncTokenToPersist) {\n      await this.updateSyncToken(\n        encodeStoredSyncToken(syncTokenAction.nextSyncTokenToPersist, OAUTH_SYNC_WINDOW_VERSION),\n      );\n    }\n\n    return {\n      eventsAdded: eventsToInsert.length,\n      eventsFilteredOutOfWindow,\n      eventsInserted: eventsToInsert.length,\n      eventsRemoved: eventStateIdsToRemove.length,\n      eventsUpdated: eventsToUpdate.length,\n      syncTokenResetCount: Number(syncTokenAction.shouldResetSyncToken),\n      syncToken: nextSyncToken,\n    };\n  }\n  private static async removeOutOfRangeEvents(\n    database: BunSQLDatabase,\n    calendarId: string,\n    syncWindow: { timeMin: Date; timeMax: Date },\n  ): Promise<void> {\n    await database\n      .delete(eventStatesTable)\n      .where(\n        and(\n          eq(eventStatesTable.calendarId, calendarId),\n          or(\n            lt(eventStatesTable.endTime, syncWindow.timeMin),\n            gt(eventStatesTable.startTime, syncWindow.timeMax),\n          ),\n        ),\n      );\n  }\n\n}\n\ninterface GoogleSourceAccount {\n  calendarId: string;\n  userId: string;\n  externalCalendarId: string;\n  syncToken: string | null;\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  credentialId: string;\n  oauthCredentialId: string;\n  calendarAccountId: string;\n  provider: string;\n  originalName: string | null;\n  sourceName: string;\n  excludeFocusTime: boolean;\n  excludeOutOfOffice: boolean;\n}\n\ninterface CreateGoogleSourceProviderConfig {\n  database: BunSQLDatabase;\n  oauthProvider: OAuthTokenProvider;\n  refreshLockStore?: RefreshLockStore | null;\n}\n\nconst getGoogleSourcesWithCredentials = async (\n  database: BunSQLDatabase,\n): Promise<GoogleSourceAccount[]> => {\n  const sources = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      accessTokenExpiresAt: oauthCredentialsTable.expiresAt,\n      calendarAccountId: calendarAccountsTable.id,\n      calendarId: calendarsTable.id,\n      credentialId: oauthCredentialsTable.id,\n      excludeFocusTime: calendarsTable.excludeFocusTime,\n      excludeOutOfOffice: calendarsTable.excludeOutOfOffice,\n      externalCalendarId: calendarsTable.externalCalendarId,\n      oauthCredentialId: oauthCredentialsTable.id,\n      originalName: calendarsTable.originalName,\n      provider: calendarAccountsTable.provider,\n      refreshToken: oauthCredentialsTable.refreshToken,\n      sourceName: calendarsTable.name,\n      syncToken: calendarsTable.syncToken,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(\n      oauthCredentialsTable,\n      eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarsTable.calendarType, \"oauth\"),\n        arrayContains(calendarsTable.capabilities, [\"pull\"]),\n        eq(calendarAccountsTable.provider, GOOGLE_PROVIDER_ID),\n        eq(calendarAccountsTable.needsReauthentication, false),\n      ),\n    );\n\n  return sources.flatMap((source) => {\n    if (!source.externalCalendarId) {return [];}\n    return [{\n      ...source,\n      externalCalendarId: source.externalCalendarId,\n      provider: source.provider,\n    }];\n  });\n};\n\nconst createGoogleCalendarSourceProvider = (\n  config: CreateGoogleSourceProviderConfig,\n): SourceProvider => {\n  const { database, oauthProvider, refreshLockStore } = config;\n\n  return createOAuthSourceProvider<GoogleSourceAccount, GoogleSourceConfig>({\n    buildConfig: (db, account) => ({\n      accessToken: account.accessToken,\n      accessTokenExpiresAt: account.accessTokenExpiresAt,\n      calendarAccountId: account.calendarAccountId,\n      calendarId: account.calendarId,\n      database: db,\n      excludeFocusTime: account.excludeFocusTime,\n      excludeOutOfOffice: account.excludeOutOfOffice,\n      externalCalendarId: account.externalCalendarId,\n      oauthCredentialId: account.oauthCredentialId,\n      originalName: account.originalName,\n      refreshToken: account.refreshToken,\n      sourceName: account.sourceName,\n      syncToken: account.syncToken,\n      userId: account.userId,\n    }),\n    createProviderInstance: (providerConfig, oauth) =>\n      new GoogleCalendarSourceProvider(providerConfig, oauth),\n    database,\n    getAllSources: getGoogleSourcesWithCredentials,\n    oauthProvider,\n    refreshLockStore,\n  });\n};\n\nexport { createGoogleCalendarSourceProvider, GoogleCalendarSourceProvider };\nexport type { CreateGoogleSourceProviderConfig, GoogleSourceAccount, GoogleSourceConfig };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/source/types.ts",
    "content": "import type { RedisRateLimiter } from \"../../../core/utils/redis-rate-limiter\";\n\ninterface GoogleCalendarListEntry {\n  id: string;\n  summary: string;\n  description?: string;\n  primary?: boolean;\n  accessRole: \"freeBusyReader\" | \"reader\" | \"writer\" | \"owner\";\n  backgroundColor?: string;\n  foregroundColor?: string;\n}\n\ninterface GoogleCalendarListResponse {\n  kind: \"calendar#calendarList\";\n  items: GoogleCalendarListEntry[];\n  nextPageToken?: string;\n}\n\ninterface GoogleEventDateTime {\n  date?: string;\n  dateTime?: string;\n  timeZone?: string;\n}\n\ninterface GoogleCalendarEvent {\n  id?: string;\n  iCalUID?: string;\n  status?: \"confirmed\" | \"tentative\" | \"cancelled\";\n  summary?: string;\n  description?: string;\n  location?: string;\n  start?: GoogleEventDateTime;\n  end?: GoogleEventDateTime;\n  created?: string;\n  updated?: string;\n  eventType?: string;\n  transparency?: string;\n  workingLocationProperties?: {\n    type?: string;\n    customLocation?: { label?: string };\n    officeLocation?: { label?: string };\n  };\n}\n\ninterface GoogleEventsListResponse {\n  kind?: \"calendar#events\";\n  items?: GoogleCalendarEvent[];\n  nextPageToken?: string;\n  nextSyncToken?: string;\n}\n\ninterface FetchEventsOptions {\n  accessToken: string;\n  calendarId: string;\n  syncToken?: string;\n  timeMin?: Date;\n  timeMax?: Date;\n  maxResults?: number;\n  rateLimiter?: RedisRateLimiter;\n}\n\ninterface FetchEventsResult {\n  events: GoogleCalendarEvent[];\n  nextSyncToken?: string;\n  fullSyncRequired: boolean;\n  isDeltaSync?: boolean;\n  cancelledEventUids?: string[];\n}\n\ninterface EventTimeSlot {\n  uid: string;\n  startTime: Date;\n  endTime: Date;\n  sourceEventType?: \"default\" | \"focusTime\" | \"outOfOffice\" | \"workingLocation\";\n  availability: \"busy\" | \"free\" | \"oof\" | \"workingElsewhere\";\n  isAllDay?: boolean;\n  startTimeZone?: string;\n  title?: string;\n  description?: string;\n  location?: string;\n}\n\nexport type {\n  GoogleCalendarListEntry,\n  GoogleCalendarListResponse,\n  GoogleEventDateTime,\n  GoogleCalendarEvent,\n  GoogleEventsListResponse,\n  FetchEventsOptions,\n  FetchEventsResult,\n  EventTimeSlot,\n};\n"
  },
  {
    "path": "packages/calendar/src/providers/google/source/utils/fetch-events.ts",
    "content": "import type {\n  FetchEventsOptions,\n  FetchEventsResult,\n  GoogleCalendarEvent,\n  GoogleEventsListResponse,\n  EventTimeSlot,\n} from \"../types\";\nimport {\n  GOOGLE_CALENDAR_EVENTS_URL,\n  GOOGLE_CALENDAR_MAX_RESULTS,\n  GONE_STATUS,\n} from \"../../shared/api\";\nimport { isAuthError } from \"../../shared/errors\";\nimport type { GoogleApiError } from \"../../types\";\nimport { googleApiErrorSchema, googleEventListSchema } from \"@keeper.sh/data-schemas\";\nimport { parseEventDateTime } from \"../../shared/date-time\";\nimport { isKeeperEvent } from \"../../../../core/events/identity\";\nimport { withBackoff } from \"../../shared/backoff\";\nimport { isRateLimitApiError } from \"../../shared/errors\";\n\nconst EMPTY_API_ERROR: GoogleApiError = {};\n\nconst parseApiErrorFromText = (text: string): GoogleApiError => {\n  try {\n    const parsed: unknown = JSON.parse(text);\n    if (!googleApiErrorSchema.allows(parsed)) {\n      return EMPTY_API_ERROR;\n    }\n    return googleApiErrorSchema.assert(parsed).error ?? EMPTY_API_ERROR;\n  } catch {\n    return EMPTY_API_ERROR;\n  }\n};\n\nclass EventsFetchError extends Error {\n  public readonly status: number;\n  public readonly authRequired: boolean;\n  public readonly apiError: GoogleApiError;\n\n  constructor(\n    message: string,\n    status: number,\n    authRequired = false,\n    apiError: GoogleApiError = {},\n  ) {\n    super(message);\n    this.name = \"EventsFetchError\";\n    this.status = status;\n    this.authRequired = authRequired;\n    this.apiError = apiError;\n  }\n}\n\nconst REQUEST_TIMEOUT_MS = 15_000;\n\nconst isRequestTimeoutError = (error: unknown): boolean =>\n  error instanceof Error\n  && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n\ninterface PageFetchOptions {\n  accessToken: string;\n  baseUrl: string;\n  syncToken?: string;\n  timeMin?: Date;\n  timeMax?: Date;\n  maxResults: number;\n  pageToken?: string;\n}\n\ninterface PageFetchResult {\n  data: GoogleEventsListResponse;\n  fullSyncRequired: false;\n}\n\ninterface FullSyncRequiredResult {\n  fullSyncRequired: true;\n}\n\nconst fetchEventsPage = async (\n  options: PageFetchOptions,\n): Promise<PageFetchResult | FullSyncRequiredResult> => {\n  const { accessToken, baseUrl, syncToken, timeMin, timeMax, maxResults, pageToken } = options;\n\n  const url = new URL(baseUrl);\n  url.searchParams.set(\"maxResults\", String(maxResults));\n  url.searchParams.set(\"singleEvents\", \"true\");\n\n  if (syncToken) {\n    url.searchParams.set(\"syncToken\", syncToken);\n  } else {\n    if (timeMin) {\n      url.searchParams.set(\"timeMin\", timeMin.toISOString());\n    }\n    if (timeMax) {\n      url.searchParams.set(\"timeMax\", timeMax.toISOString());\n    }\n  }\n\n  if (pageToken) {\n    url.searchParams.set(\"pageToken\", pageToken);\n  }\n\n  const response = await fetch(url.toString(), {\n    headers: {\n      Authorization: `Bearer ${accessToken}`,\n    },\n    signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n  }).catch((error) => {\n    if (isRequestTimeoutError(error)) {\n      throw new EventsFetchError(\n        `Failed to fetch events: timeout after ${REQUEST_TIMEOUT_MS}ms`,\n        408,\n        false,\n      );\n    }\n\n    throw error;\n  });\n\n  if (response.status === GONE_STATUS) {\n    return { fullSyncRequired: true };\n  }\n\n  if (!response.ok) {\n    const responseText = await response.text();\n    const apiError = parseApiErrorFromText(responseText);\n    const authRequired = isAuthError(response.status, apiError);\n\n    throw new EventsFetchError(\n      `Failed to fetch events: ${response.status}: ${responseText}`,\n      response.status,\n      authRequired,\n      apiError,\n    );\n  }\n\n  const responseBody = await response.json();\n  const data = googleEventListSchema.assert(responseBody);\n  return { data, fullSyncRequired: false };\n};\n\nconst fetchCalendarEvents = async (options: FetchEventsOptions): Promise<FetchEventsResult> => {\n  const {\n    accessToken,\n    calendarId,\n    syncToken,\n    timeMin,\n    timeMax,\n    maxResults = GOOGLE_CALENDAR_MAX_RESULTS,\n    rateLimiter,\n  } = options;\n\n  const baseUrl = `${GOOGLE_CALENDAR_EVENTS_URL}/${encodeURIComponent(calendarId)}/events`;\n  const events: GoogleCalendarEvent[] = [];\n  const cancelledEventUids: string[] = [];\n  const isDeltaSync = Boolean(syncToken);\n\n  const fetchPageWithBackoff = (pageOptions: PageFetchOptions): Promise<PageFetchResult | FullSyncRequiredResult> =>\n    withBackoff(\n      () => fetchEventsPage(pageOptions),\n      {\n        shouldRetry: (error) =>\n          error instanceof EventsFetchError && isRateLimitApiError(error.status, error.apiError),\n      },\n    );\n\n  if (rateLimiter) {\n    await rateLimiter.acquire(1);\n  }\n\n  let result = await fetchPageWithBackoff({\n    accessToken,\n    baseUrl,\n    maxResults,\n    syncToken,\n    timeMax,\n    timeMin,\n  });\n\n  if (result.fullSyncRequired) {\n    return { events: [], fullSyncRequired: true };\n  }\n\n  for (const event of result.data.items ?? []) {\n    if (event.status === \"cancelled\") {\n      const uid = event.iCalUID ?? event.id;\n      if (uid) {\n        cancelledEventUids.push(uid);\n      }\n    } else {\n      events.push(event);\n    }\n  }\n\n  let lastSyncToken = result.data.nextSyncToken;\n\n  while (result.data.nextPageToken) {\n    if (rateLimiter) {\n      await rateLimiter.acquire(1);\n    }\n\n    result = await fetchPageWithBackoff({\n      accessToken,\n      baseUrl,\n      maxResults,\n      pageToken: result.data.nextPageToken,\n      syncToken,\n      timeMax,\n      timeMin,\n    });\n\n    if (result.fullSyncRequired) {\n      return { events: [], fullSyncRequired: true };\n    }\n\n    for (const event of result.data.items ?? []) {\n      if (event.status === \"cancelled\") {\n        const uid = event.iCalUID ?? event.id;\n        if (uid) {\n          cancelledEventUids.push(uid);\n        }\n      } else {\n        events.push(event);\n      }\n    }\n\n    if (result.data.nextSyncToken) {\n      lastSyncToken = result.data.nextSyncToken;\n    }\n  }\n\n  const fetchResult: FetchEventsResult = {\n    events,\n    fullSyncRequired: false,\n    isDeltaSync,\n    nextSyncToken: lastSyncToken,\n  };\n\n  if (isDeltaSync) {\n    fetchResult.cancelledEventUids = cancelledEventUids;\n  }\n\n  return fetchResult;\n};\n\nconst resolveGoogleAvailability = (\n  event: Pick<GoogleCalendarEvent, \"eventType\" | \"transparency\">,\n): EventTimeSlot[\"availability\"] => {\n  if (event.eventType === \"workingLocation\") {\n    return \"workingElsewhere\";\n  }\n\n  if (event.transparency === \"transparent\") {\n    return \"free\";\n  }\n\n  if (event.eventType === \"outOfOffice\") {\n    return \"oof\";\n  }\n\n  return \"busy\";\n};\n\nconst resolveGoogleLocation = (\n  event: Pick<GoogleCalendarEvent, \"location\" | \"workingLocationProperties\">,\n): string | undefined => {\n  if (event.location?.trim()) {\n    return event.location;\n  }\n\n  const customLocationLabel = event.workingLocationProperties?.customLocation?.label?.trim();\n  if (customLocationLabel) {\n    return customLocationLabel;\n  }\n\n  return event.workingLocationProperties?.officeLocation?.label?.trim();\n};\n\nconst isAllDayGoogleEvent = (\n  event: Pick<GoogleCalendarEvent, \"start\" | \"end\">,\n): boolean => Boolean(event.start?.date || event.end?.date);\n\nconst resolveSourceEventType = (\n  eventType: GoogleCalendarEvent[\"eventType\"],\n): EventTimeSlot[\"sourceEventType\"] => {\n  if (eventType === \"focusTime\") {\n    return \"focusTime\";\n  }\n  if (eventType === \"outOfOffice\") {\n    return \"outOfOffice\";\n  }\n  if (eventType === \"workingLocation\") {\n    return \"workingLocation\";\n  }\n  return \"default\";\n};\n\nconst parseGoogleEvents = (events: GoogleCalendarEvent[]): EventTimeSlot[] => {\n  const result: EventTimeSlot[] = [];\n\n  for (const event of events) {\n    if (!event.start || !event.end || !event.iCalUID) {\n      continue;\n    }\n    if (isKeeperEvent(event.iCalUID)) {\n      continue;\n    }\n    result.push({\n      availability: resolveGoogleAvailability(event),\n      description: event.description,\n      endTime: parseEventDateTime(event.end),\n      isAllDay: isAllDayGoogleEvent(event),\n      location: resolveGoogleLocation(event),\n      sourceEventType: resolveSourceEventType(event.eventType),\n      startTime: parseEventDateTime(event.start),\n      startTimeZone: event.start.timeZone ?? event.end.timeZone,\n      title: event.summary,\n      uid: event.iCalUID,\n    });\n  }\n\n  return result;\n};\n\nexport { fetchCalendarEvents, parseGoogleEvents, EventsFetchError };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/source/utils/list-calendars.ts",
    "content": "import { googleCalendarListResponseSchema } from \"@keeper.sh/data-schemas\";\nimport type { GoogleCalendarListEntry, GoogleCalendarListResponse } from \"../types\";\nimport { GOOGLE_CALENDAR_LIST_URL } from \"../../shared/api\";\nimport { isSimpleAuthError } from \"../../shared/errors\";\n\nclass CalendarListError extends Error {\n  public readonly status: number;\n  public readonly authRequired: boolean;\n\n  constructor(\n    message: string,\n    status: number,\n    authRequired = false,\n  ) {\n    super(message);\n    this.name = \"CalendarListError\";\n    this.status = status;\n    this.authRequired = authRequired;\n  }\n}\n\nconst fetchCalendarPage = async (\n  accessToken: string,\n  pageToken?: string,\n): Promise<GoogleCalendarListResponse> => {\n  const url = new URL(GOOGLE_CALENDAR_LIST_URL);\n  url.searchParams.set(\"minAccessRole\", \"reader\");\n  if (pageToken) {\n    url.searchParams.set(\"pageToken\", pageToken);\n  }\n\n  const response = await fetch(url.toString(), {\n    headers: {\n      Authorization: `Bearer ${accessToken}`,\n    },\n  });\n\n  if (!response.ok) {\n    const authRequired = isSimpleAuthError(response.status);\n    throw new CalendarListError(\n      `Failed to list calendars: ${response.status}`,\n      response.status,\n      authRequired,\n    );\n  }\n\n  const responseBody = await response.json();\n  return googleCalendarListResponseSchema.assert(responseBody);\n};\n\nconst listUserCalendars = async (accessToken: string): Promise<GoogleCalendarListEntry[]> => {\n  const calendars: GoogleCalendarListEntry[] = [];\n  let response = await fetchCalendarPage(accessToken);\n  calendars.push(...response.items);\n\n  while (response.nextPageToken) {\n    response = await fetchCalendarPage(accessToken, response.nextPageToken);\n    calendars.push(...response.items);\n  }\n\n  return calendars;\n};\n\nexport { listUserCalendars, CalendarListError };\n"
  },
  {
    "path": "packages/calendar/src/providers/google/types.ts",
    "content": "interface GoogleDateTime {\n  date?: string;\n  dateTime?: string;\n  timeZone?: string;\n}\n\ninterface PartialGoogleDateTime {\n  date?: string;\n  dateTime?: string;\n  timeZone?: string;\n}\n\ninterface GoogleApiError {\n  code?: number;\n  message?: string;\n  status?: string;\n  errors?: { reason?: string }[];\n  details?: { reason?: string }[];\n}\n\nexport type { GoogleDateTime, PartialGoogleDateTime, GoogleApiError };\n"
  },
  {
    "path": "packages/calendar/src/providers/icloud/destination/provider.ts",
    "content": "const ICLOUD_SERVER_URL = \"https://caldav.icloud.com/\";\n\nexport { ICLOUD_SERVER_URL };\n"
  },
  {
    "path": "packages/calendar/src/providers/icloud/index.ts",
    "content": "export { ICLOUD_SERVER_URL } from \"./destination/provider\";\nexport { createICloudSourceProvider } from \"./source/provider\";\n"
  },
  {
    "path": "packages/calendar/src/providers/icloud/source/provider.ts",
    "content": "import { createCalDAVSourceProvider } from \"../../caldav\";\nimport type { CalDAVSourceProviderConfig } from \"../../caldav\";\n\nconst PROVIDER_OPTIONS = {\n  providerId: \"icloud\",\n  providerName: \"iCloud\",\n};\n\nconst createICloudSourceProvider = (config: CalDAVSourceProviderConfig) =>\n  createCalDAVSourceProvider(config, PROVIDER_OPTIONS);\n\nexport { createICloudSourceProvider };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/destination/provider.ts",
    "content": "import { HTTP_STATUS, KEEPER_CATEGORY } from \"@keeper.sh/constants\";\nimport {\n  microsoftApiErrorSchema,\n  outlookEventListSchema,\n  outlookEventSchema,\n} from \"@keeper.sh/data-schemas\";\nimport type { DeleteResult, PushResult, RemoteEvent, SyncableEvent } from \"../../../core/types\";\nimport { getErrorMessage } from \"../../../core/utils/error\";\nimport { getOAuthSyncWindowStart } from \"../../../core/oauth/sync-window\";\nimport { ensureValidToken } from \"../../../core/oauth/ensure-valid-token\";\nimport type { TokenState, TokenRefresher } from \"../../../core/oauth/ensure-valid-token\";\nimport { MICROSOFT_GRAPH_API, OUTLOOK_PAGE_SIZE } from \"../shared/api\";\nimport { parseEventTime } from \"../shared/date-time\";\nimport { serializeOutlookEvent } from \"./serialize-event\";\n\ninterface OutlookSyncProviderConfig {\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  externalCalendarId: string;\n  calendarId: string;\n  userId: string;\n  refreshAccessToken?: TokenRefresher;\n}\n\nconst createOutlookSyncProvider = (config: OutlookSyncProviderConfig) => {\n  const tokenState: TokenState = {\n    accessToken: config.accessToken,\n    accessTokenExpiresAt: config.accessTokenExpiresAt,\n    refreshToken: config.refreshToken,\n  };\n\n  const refreshIfNeeded = async (): Promise<void> => {\n    if (config.refreshAccessToken) {\n      await ensureValidToken(tokenState, config.refreshAccessToken);\n    }\n  };\n\n  const getHeaders = (): Record<string, string> => ({\n    Authorization: `Bearer ${tokenState.accessToken}`,\n    \"Content-Type\": \"application/json\",\n  });\n\n  const calendarEventsUrl = `${MICROSOFT_GRAPH_API}/me/calendars/${encodeURIComponent(config.externalCalendarId)}/events`;\n\n  const pushEvents = async (events: SyncableEvent[]): Promise<PushResult[]> => {\n    await refreshIfNeeded();\n    const results: PushResult[] = [];\n\n    for (const event of events) {\n      try {\n        const resource = serializeOutlookEvent(event);\n        const url = new URL(calendarEventsUrl);\n\n        const response = await fetch(url, {\n          body: JSON.stringify(resource),\n          headers: getHeaders(),\n          method: \"POST\",\n        });\n\n        if (!response.ok) {\n          const body = await response.json();\n          const { error } = microsoftApiErrorSchema.assert(body);\n          results.push({ error: error?.message ?? response.statusText, success: false });\n          continue;\n        }\n\n        const body = await response.json();\n        const created = outlookEventSchema.assert(body);\n        results.push({ deleteId: created.id, remoteId: created.iCalUId ?? created.id, success: true });\n      } catch (error) {\n        results.push({ error: getErrorMessage(error), success: false });\n      }\n    }\n\n    return results;\n  };\n\n  const deleteEvents = async (eventIds: string[]): Promise<DeleteResult[]> => {\n    await refreshIfNeeded();\n    const results: DeleteResult[] = [];\n\n    for (const eventId of eventIds) {\n      try {\n        const url = new URL(`${MICROSOFT_GRAPH_API}/me/events/${eventId}`);\n\n        const response = await fetch(url, {\n          headers: { Authorization: `Bearer ${tokenState.accessToken}` },\n          method: \"DELETE\",\n        });\n\n        if (!response.ok && response.status !== HTTP_STATUS.NOT_FOUND) {\n          const body = await response.json();\n          const { error } = microsoftApiErrorSchema.assert(body);\n          results.push({ error: error?.message ?? response.statusText, success: false });\n          continue;\n        }\n\n        await response.body?.cancel?.();\n        results.push({ success: true });\n      } catch (error) {\n        results.push({ error: getErrorMessage(error), success: false });\n      }\n    }\n\n    return results;\n  };\n\n  const buildOutlookEventsUrl = (\n    lookbackStart: Date,\n    futureDate: Date,\n    nextLink: string | null,\n  ): URL => {\n    if (nextLink) {\n      return new URL(nextLink);\n    }\n    const baseUrl = new URL(calendarEventsUrl);\n    baseUrl.searchParams.set(\n      \"$filter\",\n      `categories/any(c:c eq '${KEEPER_CATEGORY}') and start/dateTime ge '${lookbackStart.toISOString()}' and start/dateTime le '${futureDate.toISOString()}'`,\n    );\n    baseUrl.searchParams.set(\"$top\", String(OUTLOOK_PAGE_SIZE));\n    baseUrl.searchParams.set(\"$select\", \"id,iCalUId,subject,start,end,categories\");\n    return baseUrl;\n  };\n\n  const listRemoteEvents = async (): Promise<RemoteEvent[]> => {\n    await refreshIfNeeded();\n    const remoteEvents: RemoteEvent[] = [];\n    let nextLink: string | null = null;\n    const lookbackStart = getOAuthSyncWindowStart();\n    const futureDate = new Date();\n    futureDate.setFullYear(futureDate.getFullYear() + 2);\n\n    do {\n      const url = buildOutlookEventsUrl(lookbackStart, futureDate, nextLink);\n\n      const response = await fetch(url, {\n        headers: { Authorization: `Bearer ${tokenState.accessToken}` },\n        method: \"GET\",\n      });\n\n      if (!response.ok) {\n        const body = await response.json();\n        const { error } = microsoftApiErrorSchema.assert(body);\n        throw new Error(error?.message ?? response.statusText);\n      }\n\n      const body = await response.json();\n      const data = outlookEventListSchema.assert(body);\n\n      for (const event of data.value ?? []) {\n        const startTime = parseEventTime(event.start);\n        const endTime = parseEventTime(event.end);\n\n        if (!event.id || !event.iCalUId || !startTime || !endTime) {\n          continue;\n        }\n\n        remoteEvents.push({\n          deleteId: event.id,\n          endTime,\n          isKeeperEvent: event.categories?.includes(KEEPER_CATEGORY) ?? false,\n          startTime,\n          uid: event.iCalUId,\n        });\n      }\n\n      nextLink = data[\"@odata.nextLink\"] ?? null;\n    } while (nextLink);\n\n    return remoteEvents;\n  };\n\n  return { pushEvents, deleteEvents, listRemoteEvents };\n};\n\nexport { createOutlookSyncProvider };\nexport type { OutlookSyncProviderConfig };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/destination/serialize-event.ts",
    "content": "import { KEEPER_CATEGORY } from \"@keeper.sh/constants\";\nimport type { OutlookEvent } from \"@keeper.sh/data-schemas\";\nimport type { SyncableEvent } from \"../../../core/types\";\nimport { resolveIsAllDayEvent } from \"../../../core/events/all-day\";\n\nconst formatOutlookDateTime = (value: Date, isAllDay: boolean): string => {\n  const isoString = value.toISOString();\n\n  if (!isAllDay) {\n    return isoString;\n  }\n\n  return isoString.replace(\"Z\", \"\");\n};\n\nconst getOutlookBody = (event: SyncableEvent): OutlookEvent[\"body\"] => {\n  if (!event.description) {\n    return null;\n  }\n\n  return {\n    content: event.description,\n    contentType: \"text\",\n  };\n};\n\nconst getOutlookLocation = (event: SyncableEvent): OutlookEvent[\"location\"] => {\n  if (!event.location) {\n    return;\n  }\n\n  return {\n    displayName: event.location,\n  };\n};\n\nconst getShowAs = (availability: SyncableEvent[\"availability\"]): string => {\n  if (availability === \"free\") {\n    return \"free\";\n  }\n\n  if (availability === \"oof\") {\n    return \"oof\";\n  }\n\n  if (availability === \"workingElsewhere\") {\n    return \"workingElsewhere\";\n  }\n\n  return \"busy\";\n};\n\nconst serializeOutlookEvent = (event: SyncableEvent): OutlookEvent => {\n  const body = getOutlookBody(event);\n  const isAllDay = resolveIsAllDayEvent(event);\n  const location = getOutlookLocation(event);\n  const eventTimeZone = event.startTimeZone ?? \"UTC\";\n\n  return {\n    ...(body && { body }),\n    ...(location && { location }),\n    categories: [KEEPER_CATEGORY],\n    end: {\n      dateTime: formatOutlookDateTime(event.endTime, isAllDay),\n      timeZone: eventTimeZone,\n    },\n    isAllDay,\n    showAs: getShowAs(event.availability),\n    start: {\n      dateTime: formatOutlookDateTime(event.startTime, isAllDay),\n      timeZone: eventTimeZone,\n    },\n    subject: event.summary,\n  };\n};\n\nexport { serializeOutlookEvent };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/destination/sync.ts",
    "content": "import { getOAuthAccountsByPlan, getOAuthAccountsForUser, getUserEventsForSync } from \"../../../core/oauth/accounts\";\nimport type { OAuthAccount } from \"../../../core/oauth/accounts\";\nimport type { SyncableEvent } from \"../../../core/types\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\nconst PROVIDER = \"outlook\";\n\ntype OutlookAccount = OAuthAccount;\n\nconst getOutlookAccountsByPlan = (\n  database: BunSQLDatabase,\n  targetPlan: Plan,\n): Promise<OutlookAccount[]> => getOAuthAccountsByPlan(database, PROVIDER, targetPlan);\n\nconst getOutlookAccountsForUser = (\n  database: BunSQLDatabase,\n  userId: string,\n): Promise<OutlookAccount[]> => getOAuthAccountsForUser(database, PROVIDER, userId);\n\nconst getUserEvents = (database: BunSQLDatabase, userId: string): Promise<SyncableEvent[]> =>\n  getUserEventsForSync(database, userId);\n\nexport { getOutlookAccountsByPlan, getOutlookAccountsForUser, getUserEvents };\nexport type { OutlookAccount };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/index.ts",
    "content": "export { createOutlookSourceFetcher, type OutlookSourceFetcherConfig } from \"./source/fetch-adapter\";\nexport { listUserCalendars, CalendarListError } from \"./source/utils/list-calendars\";\nexport {\n  fetchCalendarEvents,\n  parseOutlookEvents,\n  EventsFetchError,\n} from \"./source/utils/fetch-events\";\nexport {\n  createOutlookSourceProvider,\n  OutlookSourceProvider,\n  type CreateOutlookSourceProviderConfig,\n  type OutlookSourceAccount,\n  type OutlookSourceConfig,\n} from \"./source/provider\";\nexport type {\n  OutlookCalendarListEntry,\n  OutlookCalendarListResponse,\n  OutlookEventDateTime,\n  OutlookCalendarEvent,\n  OutlookEventsListResponse,\n  FetchEventsOptions,\n  FetchEventsResult,\n  EventTimeSlot,\n} from \"./source/types\";\n\nexport {\n  createOutlookSyncProvider,\n  type OutlookSyncProviderConfig,\n} from \"./destination/provider\";\nexport {\n  getOutlookAccountsByPlan,\n  getOutlookAccountsForUser,\n  getUserEvents,\n  type OutlookAccount,\n} from \"./destination/sync\";\n\nexport { MICROSOFT_GRAPH_API, OUTLOOK_PAGE_SIZE, GONE_STATUS } from \"./shared/api\";\nexport { hasRateLimitMessage, isAuthError, isSimpleAuthError } from \"./shared/errors\";\nexport { parseEventDateTime, parseEventTime } from \"./shared/date-time\";\nexport type { OutlookDateTime, PartialOutlookDateTime, MicrosoftApiError } from \"./types\";\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/shared/api.ts",
    "content": "const MICROSOFT_GRAPH_API = \"https://graph.microsoft.com/v1.0\";\nconst OUTLOOK_PAGE_SIZE = 100;\nconst GONE_STATUS = 410;\n\nexport { MICROSOFT_GRAPH_API, OUTLOOK_PAGE_SIZE, GONE_STATUS };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/shared/date-time.ts",
    "content": "import type { OutlookDateTime, PartialOutlookDateTime } from \"../types\";\n\nconst parseEventDateTime = (eventTime: OutlookDateTime): Date => {\n  if (eventTime.timeZone === \"UTC\" && !eventTime.dateTime.endsWith(\"Z\")) {\n    return new Date(`${eventTime.dateTime}Z`);\n  }\n  return new Date(eventTime.dateTime);\n};\n\nconst parseEventTime = (time: PartialOutlookDateTime | undefined): Date | null => {\n  if (!time?.dateTime) {\n    return null;\n  }\n\n  if (time.timeZone === \"UTC\" && !time.dateTime.endsWith(\"Z\")) {\n    return new Date(`${time.dateTime}Z`);\n  }\n\n  return new Date(time.dateTime);\n};\n\nexport { parseEventDateTime, parseEventTime };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/shared/errors.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport type { MicrosoftApiError } from \"../types\";\n\nconst hasRateLimitMessage = (message: string | undefined): boolean => {\n  if (!message) {\n    return false;\n  }\n  return message.includes(\"429\") || message.includes(\"throttled\");\n};\n\nconst isAuthError = (status: number, error: MicrosoftApiError | undefined): boolean => {\n  const code = error?.code;\n  if (status === HTTP_STATUS.FORBIDDEN) {\n    return code === \"Authorization_RequestDenied\" || code === \"ErrorAccessDenied\";\n  }\n  if (status === HTTP_STATUS.UNAUTHORIZED) {\n    return code === \"InvalidAuthenticationToken\";\n  }\n  return false;\n};\n\nconst isSimpleAuthError = (status: number): boolean => status === 401 || status === 403;\n\nexport { hasRateLimitMessage, isAuthError, isSimpleAuthError };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/source/fetch-adapter.ts",
    "content": "import type { FetchEventsResult } from \"../../../core/sync-engine/ingest\";\nimport { resolveSyncTokenForWindow } from \"../../../core/oauth/sync-token\";\nimport { getOAuthSyncWindow, OAUTH_SYNC_WINDOW_VERSION } from \"../../../core/oauth/sync-window\";\nimport { fetchCalendarEvents, parseOutlookEvents } from \"./utils/fetch-events\";\n\nconst YEARS_UNTIL_FUTURE = 2;\nconst OUTLOOK_SYNC_TOKEN_VERSION = OAUTH_SYNC_WINDOW_VERSION + 1;\n\ninterface OutlookSourceFetcherConfig {\n  accessToken: string;\n  externalCalendarId: string;\n  syncToken: string | null;\n}\n\ninterface OutlookSourceFetcher {\n  fetchEvents: () => Promise<FetchEventsResult>;\n}\n\nconst createOutlookSourceFetcher = (config: OutlookSourceFetcherConfig): OutlookSourceFetcher => {\n  const fetchEvents = async (): Promise<FetchEventsResult> => {\n    const fetchOptions: Parameters<typeof fetchCalendarEvents>[0] = {\n      accessToken: config.accessToken,\n      calendarId: config.externalCalendarId,\n    };\n\n    const syncTokenResolution = resolveSyncTokenForWindow(\n      config.syncToken,\n      OUTLOOK_SYNC_TOKEN_VERSION,\n    );\n\n    if (syncTokenResolution.syncToken === null) {\n      const syncWindow = getOAuthSyncWindow(YEARS_UNTIL_FUTURE);\n      fetchOptions.timeMin = syncWindow.timeMin;\n      fetchOptions.timeMax = syncWindow.timeMax;\n    } else {\n      fetchOptions.deltaLink = syncTokenResolution.syncToken;\n    }\n\n    const result = await fetchCalendarEvents(fetchOptions);\n\n    if (result.fullSyncRequired) {\n      return { events: [], fullSyncRequired: true };\n    }\n\n    const events = parseOutlookEvents(result.events);\n\n    return {\n      events,\n      nextSyncToken: result.nextDeltaLink,\n      cancelledEventUids: result.cancelledEventUids,\n      isDeltaSync: result.isDeltaSync,\n    };\n  };\n\n  return { fetchEvents };\n};\n\nexport { createOutlookSourceFetcher };\nexport type { OutlookSourceFetcherConfig, OutlookSourceFetcher };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/source/provider.ts",
    "content": "import { buildSourceEventStateIdsToRemove, buildSourceEventsToAdd } from \"../../../core/source/event-diff\";\nimport { filterSourceEventsToSyncWindow, resolveSourceSyncTokenAction, splitSourceEventsByStorageIdentity } from \"../../../core/source/sync-diagnostics\";\nimport { insertEventStatesWithConflictResolution } from \"../../../core/source/write-event-states\";\nimport { OAuthSourceProvider, type ProcessEventsOptions } from \"../../../core/oauth/source-provider\";\nimport type { FetchEventsResult as BaseFetchEventsResult } from \"../../../core/oauth/source-provider\";\nimport { createOAuthSourceProvider, type SourceProvider } from \"../../../core/oauth/create-source-provider\";\nimport { encodeStoredSyncToken, resolveSyncTokenForWindow } from \"../../../core/oauth/sync-token\";\nimport { getOAuthSyncWindow, OAUTH_SYNC_WINDOW_VERSION } from \"../../../core/oauth/sync-window\";\nimport type { OAuthTokenProvider } from \"../../../core/oauth/token-provider\";\nimport type { RefreshLockStore } from \"../../../core/oauth/refresh-coordinator\";\nimport type { OAuthSourceConfig, SourceEvent, SourceSyncResult } from \"../../../core/types\";\nimport {\n  calendarAccountsTable,\n  calendarsTable,\n  eventStatesTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, eq, gt, inArray, lt, or } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport { fetchCalendarEvents, fetchCalendarName, parseOutlookEvents } from \"./utils/fetch-events\";\n\nconst OUTLOOK_PROVIDER_ID = \"outlook\";\nconst EMPTY_COUNT = 0;\nconst OUTLOOK_SYNC_TOKEN_VERSION = OAUTH_SYNC_WINDOW_VERSION + 1;\n\nconst stringifyIfPresent = (value: unknown) => {\n  if (!value) {\n    return;\n  }\n  return JSON.stringify(value);\n};\nconst YEARS_UNTIL_FUTURE = 2;\n\ninterface OutlookSourceConfig extends OAuthSourceConfig {\n  originalName: string | null;\n  sourceName: string;\n  deltaLink: string | null;\n}\n\nclass OutlookSourceProvider extends OAuthSourceProvider<OutlookSourceConfig> {\n  readonly name = \"Outlook Calendar\";\n  readonly providerId = OUTLOOK_PROVIDER_ID;\n\n  protected oauthProvider: OAuthTokenProvider;\n\n  constructor(config: OutlookSourceConfig, oauthProvider: OAuthTokenProvider) {\n    super(config);\n    this.oauthProvider = oauthProvider;\n  }\n\n  async fetchEvents(syncToken: string | null): Promise<BaseFetchEventsResult> {\n    await this.refreshOriginalName();\n\n    const fetchOptions: Parameters<typeof fetchCalendarEvents>[0] = {\n      accessToken: this.currentAccessToken,\n      calendarId: this.config.externalCalendarId,\n    };\n    const syncTokenResolution = resolveSyncTokenForWindow(\n      syncToken,\n      OUTLOOK_SYNC_TOKEN_VERSION,\n    );\n\n    if (syncTokenResolution.requiresBackfill && syncToken !== null) {\n      await this.clearSyncToken();\n    }\n\n    if (syncTokenResolution.syncToken === null) {\n      const syncWindow = getOAuthSyncWindow(YEARS_UNTIL_FUTURE);\n      fetchOptions.timeMin = syncWindow.timeMin;\n      fetchOptions.timeMax = syncWindow.timeMax;\n    } else {\n      fetchOptions.deltaLink = syncTokenResolution.syncToken;\n    }\n\n    const result = await fetchCalendarEvents(fetchOptions);\n\n    if (result.fullSyncRequired) {\n      return { events: [], fullSyncRequired: true };\n    }\n\n    const events = parseOutlookEvents(result.events);\n    const fetchResult: BaseFetchEventsResult = {\n      events,\n      fullSyncRequired: false,\n      isDeltaSync: result.isDeltaSync,\n      nextSyncToken: result.nextDeltaLink,\n    };\n\n    if (result.cancelledEventUids) {\n      fetchResult.cancelledEventUids = result.cancelledEventUids;\n    }\n\n    return fetchResult;\n  }\n\n  protected async processEvents(\n    events: SourceEvent[],\n    options: ProcessEventsOptions,\n  ): Promise<SourceSyncResult> {\n    const { database, calendarId } = this.config;\n    const { nextSyncToken, isDeltaSync, cancelledEventUids } = options;\n    const syncWindow = getOAuthSyncWindow(YEARS_UNTIL_FUTURE);\n    const {\n      events: eventsInWindow,\n      filteredCount: eventsFilteredOutOfWindow,\n    } = filterSourceEventsToSyncWindow(events, syncWindow);\n\n    await OutlookSourceProvider.removeOutOfRangeEvents(\n      database,\n      calendarId,\n      syncWindow,\n    );\n\n    const existingEvents = await database\n      .select({\n        availability: eventStatesTable.availability,\n        id: eventStatesTable.id,\n        endTime: eventStatesTable.endTime,\n        isAllDay: eventStatesTable.isAllDay,\n        sourceEventType: eventStatesTable.sourceEventType,\n        sourceEventUid: eventStatesTable.sourceEventUid,\n        startTime: eventStatesTable.startTime,\n      })\n      .from(eventStatesTable)\n      .where(eq(eventStatesTable.calendarId, calendarId));\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, eventsInWindow, { isDeltaSync });\n    const eventStateIdsToRemove = buildSourceEventStateIdsToRemove(\n      existingEvents,\n      eventsInWindow,\n      { cancelledEventUids, isDeltaSync },\n    );\n    const { eventsToInsert, eventsToUpdate } = splitSourceEventsByStorageIdentity(\n      existingEvents,\n      eventsToAdd,\n    );\n\n    if (eventStateIdsToRemove.length > EMPTY_COUNT || eventsToAdd.length > EMPTY_COUNT) {\n      await database.transaction(async (transactionDatabase) => {\n        if (eventStateIdsToRemove.length > EMPTY_COUNT) {\n          await transactionDatabase\n            .delete(eventStatesTable)\n            .where(\n              and(\n                eq(eventStatesTable.calendarId, calendarId),\n                inArray(eventStatesTable.id, eventStateIdsToRemove),\n              ),\n            );\n        }\n\n        if (eventsToAdd.length > EMPTY_COUNT) {\n          await insertEventStatesWithConflictResolution(\n            transactionDatabase,\n            eventsToAdd.map((event) => ({\n              availability: event.availability,\n              calendarId,\n              description: event.description,\n              endTime: event.endTime,\n              exceptionDates: stringifyIfPresent(event.exceptionDates),\n              isAllDay: event.isAllDay,\n              location: event.location,\n              recurrenceRule: stringifyIfPresent(event.recurrenceRule),\n              sourceEventType: event.sourceEventType ?? \"default\",\n              sourceEventUid: event.uid,\n              startTime: event.startTime,\n              startTimeZone: event.startTimeZone,\n              title: event.title,\n            })),\n          );\n        }\n      });\n    }\n\n    const syncTokenAction = resolveSourceSyncTokenAction(nextSyncToken, isDeltaSync);\n    if (syncTokenAction.shouldResetSyncToken) {\n      await this.clearSyncToken();\n    }\n\n    if (syncTokenAction.nextSyncTokenToPersist) {\n      await this.updateSyncToken(\n        encodeStoredSyncToken(\n          syncTokenAction.nextSyncTokenToPersist,\n          OUTLOOK_SYNC_TOKEN_VERSION,\n        ),\n      );\n    }\n\n    return {\n      eventsAdded: eventsToInsert.length,\n      eventsFilteredOutOfWindow,\n      eventsInserted: eventsToInsert.length,\n      eventsRemoved: eventStateIdsToRemove.length,\n      eventsUpdated: eventsToUpdate.length,\n      syncTokenResetCount: Number(syncTokenAction.shouldResetSyncToken),\n      syncToken: nextSyncToken,\n    };\n  }\n\n  private async refreshOriginalName(): Promise<void> {\n    const remoteCalendarName = await fetchCalendarName({\n      accessToken: this.currentAccessToken,\n      calendarId: this.config.externalCalendarId,\n    });\n\n    if (!remoteCalendarName || remoteCalendarName === this.config.originalName) {\n      return;\n    }\n\n    await this.config.database\n      .update(calendarsTable)\n      .set({ originalName: remoteCalendarName })\n      .where(eq(calendarsTable.id, this.config.calendarId));\n\n    this.config.originalName = remoteCalendarName;\n  }\n\n  private static async removeOutOfRangeEvents(\n    database: BunSQLDatabase,\n    calendarId: string,\n    syncWindow: { timeMin: Date; timeMax: Date },\n  ): Promise<void> {\n    await database\n      .delete(eventStatesTable)\n      .where(\n        and(\n          eq(eventStatesTable.calendarId, calendarId),\n          or(\n            lt(eventStatesTable.endTime, syncWindow.timeMin),\n            gt(eventStatesTable.startTime, syncWindow.timeMax),\n          ),\n        ),\n      );\n  }\n\n}\n\ninterface OutlookSourceAccount {\n  calendarId: string;\n  userId: string;\n  externalCalendarId: string;\n  syncToken: string | null;\n  accessToken: string;\n  refreshToken: string;\n  accessTokenExpiresAt: Date;\n  credentialId: string;\n  oauthCredentialId: string;\n  calendarAccountId: string;\n  provider: string;\n  originalName: string | null;\n  sourceName: string;\n}\n\ninterface CreateOutlookSourceProviderConfig {\n  database: BunSQLDatabase;\n  oauthProvider: OAuthTokenProvider;\n  refreshLockStore?: RefreshLockStore | null;\n}\n\nconst getOutlookSourcesWithCredentials = async (\n  database: BunSQLDatabase,\n): Promise<OutlookSourceAccount[]> => {\n  const sources = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      accessTokenExpiresAt: oauthCredentialsTable.expiresAt,\n      calendarAccountId: calendarAccountsTable.id,\n      calendarId: calendarsTable.id,\n      credentialId: oauthCredentialsTable.id,\n      externalCalendarId: calendarsTable.externalCalendarId,\n      oauthCredentialId: oauthCredentialsTable.id,\n      originalName: calendarsTable.originalName,\n      provider: calendarAccountsTable.provider,\n      refreshToken: oauthCredentialsTable.refreshToken,\n      sourceName: calendarsTable.name,\n      syncToken: calendarsTable.syncToken,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(\n      oauthCredentialsTable,\n      eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarsTable.calendarType, \"oauth\"),\n        arrayContains(calendarsTable.capabilities, [\"pull\"]),\n        eq(calendarAccountsTable.provider, OUTLOOK_PROVIDER_ID),\n        eq(calendarAccountsTable.needsReauthentication, false),\n      ),\n    );\n\n  return sources.flatMap((source) => {\n    if (!source.externalCalendarId) {return [];}\n    return [{\n      ...source,\n      externalCalendarId: source.externalCalendarId,\n      provider: source.provider,\n    }];\n  });\n};\n\nconst createOutlookSourceProvider = (config: CreateOutlookSourceProviderConfig): SourceProvider => {\n  const { database, oauthProvider, refreshLockStore } = config;\n\n  return createOAuthSourceProvider<OutlookSourceAccount, OutlookSourceConfig>({\n    buildConfig: (db, account) => ({\n      accessToken: account.accessToken,\n      accessTokenExpiresAt: account.accessTokenExpiresAt,\n      calendarAccountId: account.calendarAccountId,\n      calendarId: account.calendarId,\n      database: db,\n      deltaLink: account.syncToken,\n      externalCalendarId: account.externalCalendarId,\n      oauthCredentialId: account.oauthCredentialId,\n      originalName: account.originalName,\n      refreshToken: account.refreshToken,\n      sourceName: account.sourceName,\n      syncToken: account.syncToken,\n      userId: account.userId,\n    }),\n    createProviderInstance: (providerConfig, oauth) =>\n      new OutlookSourceProvider(providerConfig, oauth),\n    database,\n    getAllSources: getOutlookSourcesWithCredentials,\n    oauthProvider,\n    refreshLockStore,\n  });\n};\n\nexport { createOutlookSourceProvider, OutlookSourceProvider };\nexport type { CreateOutlookSourceProviderConfig, OutlookSourceAccount, OutlookSourceConfig };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/source/types.ts",
    "content": "interface OutlookCalendarListEntry {\n  id: string;\n  name: string;\n  color?: string;\n  isDefaultCalendar?: boolean;\n  canEdit?: boolean;\n  owner?: {\n    name?: string;\n    address?: string;\n  };\n}\n\ninterface OutlookCalendarListResponse {\n  value: OutlookCalendarListEntry[];\n  \"@odata.nextLink\"?: string;\n}\n\ninterface OutlookEventDateTime {\n  dateTime?: string;\n  timeZone?: string;\n}\n\ninterface OutlookRemovedInfo {\n  reason?: \"deleted\" | \"changed\";\n}\n\ninterface OutlookCalendarEvent {\n  id?: string;\n  iCalUId?: string | null;\n  categories?: string[];\n  isAllDay?: boolean;\n  subject?: string;\n  body?: { contentType?: string; content?: string } | null;\n  location?: { displayName?: string };\n  showAs?: string;\n  start?: OutlookEventDateTime;\n  end?: OutlookEventDateTime;\n  createdDateTime?: string;\n  lastModifiedDateTime?: string;\n  \"@removed\"?: OutlookRemovedInfo;\n}\n\ninterface OutlookEventsListResponse {\n  value?: OutlookCalendarEvent[];\n  \"@odata.nextLink\"?: string;\n  \"@odata.deltaLink\"?: string;\n}\n\ninterface FetchEventsOptions {\n  accessToken: string;\n  calendarId: string;\n  deltaLink?: string;\n  timeMin?: Date;\n  timeMax?: Date;\n}\n\ninterface FetchEventsResult {\n  events: OutlookCalendarEvent[];\n  nextDeltaLink?: string;\n  fullSyncRequired: boolean;\n  isDeltaSync?: boolean;\n  cancelledEventUids?: string[];\n}\n\ninterface EventTimeSlot {\n  uid: string;\n  startTime: Date;\n  endTime: Date;\n  availability?: \"busy\" | \"free\" | \"oof\" | \"workingElsewhere\";\n  isAllDay?: boolean;\n  startTimeZone?: string;\n  title?: string;\n  description?: string;\n  location?: string;\n}\n\nexport type {\n  OutlookCalendarListEntry,\n  OutlookCalendarListResponse,\n  OutlookEventDateTime,\n  OutlookCalendarEvent,\n  OutlookEventsListResponse,\n  FetchEventsOptions,\n  FetchEventsResult,\n  EventTimeSlot,\n};\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/source/utils/fetch-events.ts",
    "content": "import type {\n  FetchEventsOptions,\n  FetchEventsResult,\n  OutlookCalendarEvent,\n  OutlookEventsListResponse,\n  EventTimeSlot,\n} from \"../types\";\nimport { MICROSOFT_GRAPH_API, GONE_STATUS } from \"../../shared/api\";\nimport { isSimpleAuthError } from \"../../shared/errors\";\nimport { parseEventDateTime } from \"../../shared/date-time\";\nimport { outlookEventListSchema } from \"@keeper.sh/data-schemas\";\nimport { KEEPER_CATEGORY } from \"@keeper.sh/constants\";\nimport { isKeeperEvent } from \"../../../../core/events/identity\";\n\nclass EventsFetchError extends Error {\n  public readonly status: number;\n  public readonly authRequired: boolean;\n\n  constructor(\n    message: string,\n    status: number,\n    authRequired = false,\n  ) {\n    super(message);\n    this.name = \"EventsFetchError\";\n    this.status = status;\n    this.authRequired = authRequired;\n  }\n}\n\nconst REQUEST_TIMEOUT_MS = 30_000;\nconst DEFAULT_PAGE_SIZE = 50;\n\nconst isRequestTimeoutError = (error: unknown): boolean =>\n  error instanceof Error\n  && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n\ninterface PageFetchOptions {\n  accessToken: string;\n  calendarId: string;\n  deltaLink?: string;\n  timeMin?: Date;\n  timeMax?: Date;\n  nextLink?: string;\n}\n\ninterface PageFetchResult {\n  data: OutlookEventsListResponse;\n  fullSyncRequired: false;\n}\n\ninterface FullSyncRequiredResult {\n  fullSyncRequired: true;\n}\n\ninterface FetchCalendarNameOptions {\n  accessToken: string;\n  calendarId: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst parseCalendarName = (value: unknown): string | null => {\n  if (!isRecord(value) || typeof value.name !== \"string\") {\n    return null;\n  }\n\n  const normalizedName = value.name.trim();\n  if (normalizedName.length === 0) {\n    return null;\n  }\n\n  return normalizedName;\n};\n\nconst buildInitialUrl = (calendarId: string, timeMin: Date, timeMax: Date): URL => {\n  const encodedCalendarId = encodeURIComponent(calendarId);\n  const url = new URL(\n    `${MICROSOFT_GRAPH_API}/me/calendars/${encodedCalendarId}/calendarView/delta`,\n  );\n\n  url.searchParams.set(\"startDateTime\", timeMin.toISOString());\n  url.searchParams.set(\"endDateTime\", timeMax.toISOString());\n  url.searchParams.set(\n    \"$select\",\n    \"id,iCalUId,subject,body,location,start,end,isAllDay,showAs,categories\",\n  );\n  url.searchParams.set(\"$top\", String(DEFAULT_PAGE_SIZE));\n\n  return url;\n};\n\nconst getRequestUrl = (options: PageFetchOptions): URL => {\n  const { calendarId, deltaLink, timeMin, timeMax, nextLink } = options;\n\n  if (nextLink) {\n    return new URL(nextLink);\n  }\n\n  if (deltaLink) {\n    return new URL(deltaLink);\n  }\n\n  if (timeMin && timeMax) {\n    return buildInitialUrl(calendarId, timeMin, timeMax);\n  }\n\n  throw new Error(\"Either deltaLink/nextLink or timeMin/timeMax is required\");\n};\n\nconst fetchEventsPage = async (\n  options: PageFetchOptions,\n): Promise<PageFetchResult | FullSyncRequiredResult> => {\n  const { accessToken } = options;\n  const url = getRequestUrl(options);\n\n  const response = await fetch(url.toString(), {\n    headers: {\n      Authorization: `Bearer ${accessToken}`,\n    },\n    signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n  }).catch((error) => {\n    if (isRequestTimeoutError(error)) {\n      throw new EventsFetchError(\n        `Failed to fetch events: timeout after ${REQUEST_TIMEOUT_MS}ms`,\n        408,\n        false,\n      );\n    }\n\n    throw error;\n  });\n\n  if (response.status === GONE_STATUS) {\n    return { fullSyncRequired: true };\n  }\n\n  if (!response.ok) {\n    const authRequired = isSimpleAuthError(response.status);\n    throw new EventsFetchError(\n      `Failed to fetch events: ${response.status}`,\n      response.status,\n      authRequired,\n    );\n  }\n\n  const responseBody = await response.json();\n  const data = outlookEventListSchema.assert(responseBody);\n  return { data, fullSyncRequired: false };\n};\n\nconst fetchCalendarEvents = async (options: FetchEventsOptions): Promise<FetchEventsResult> => {\n  const { accessToken, calendarId, deltaLink, timeMin, timeMax } = options;\n\n  const events: OutlookCalendarEvent[] = [];\n  const cancelledEventUids: string[] = [];\n  const isDeltaSync = Boolean(deltaLink);\n\n  const initialResult = await fetchEventsPage({\n    accessToken,\n    calendarId,\n    deltaLink,\n    timeMax,\n    timeMin,\n  });\n\n  if (initialResult.fullSyncRequired) {\n    return { events: [], fullSyncRequired: true };\n  }\n\n  for (const event of initialResult.data.value ?? []) {\n    if (event[\"@removed\"]) {\n      const uid = event.iCalUId ?? event.id;\n      if (uid) {\n        cancelledEventUids.push(uid);\n      }\n    } else {\n      events.push(event);\n    }\n  }\n\n  let lastDeltaLink = initialResult.data[\"@odata.deltaLink\"];\n  let nextLink = initialResult.data[\"@odata.nextLink\"];\n\n  while (nextLink) {\n    const pageResult = await fetchEventsPage({\n      accessToken,\n      calendarId,\n      nextLink,\n      timeMax,\n      timeMin,\n    });\n\n    if (pageResult.fullSyncRequired) {\n      return { events: [], fullSyncRequired: true };\n    }\n\n    for (const event of pageResult.data.value ?? []) {\n      if (event[\"@removed\"]) {\n        const uid = event.iCalUId ?? event.id;\n        if (uid) {\n          cancelledEventUids.push(uid);\n        }\n      } else {\n        events.push(event);\n      }\n    }\n\n    if (pageResult.data[\"@odata.deltaLink\"]) {\n      lastDeltaLink = pageResult.data[\"@odata.deltaLink\"];\n    }\n    nextLink = pageResult.data[\"@odata.nextLink\"];\n  }\n\n  const result: FetchEventsResult = {\n    events,\n    fullSyncRequired: false,\n    isDeltaSync,\n    nextDeltaLink: lastDeltaLink,\n  };\n\n  if (isDeltaSync) {\n    result.cancelledEventUids = cancelledEventUids;\n  }\n\n  return result;\n};\n\nconst fetchCalendarName = async (options: FetchCalendarNameOptions): Promise<string | null> => {\n  const encodedCalendarId = encodeURIComponent(options.calendarId);\n  const url = `${MICROSOFT_GRAPH_API}/me/calendars/${encodedCalendarId}?$select=name`;\n  const response = await fetch(url, {\n    headers: {\n      Authorization: `Bearer ${options.accessToken}`,\n    },\n    signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n  }).catch((error) => {\n    if (isRequestTimeoutError(error)) {\n      throw new EventsFetchError(\n        `Failed to fetch calendar metadata: timeout after ${REQUEST_TIMEOUT_MS}ms`,\n        408,\n        false,\n      );\n    }\n\n    throw error;\n  });\n\n  if (!response.ok) {\n    const authRequired = isSimpleAuthError(response.status);\n    throw new EventsFetchError(\n      `Failed to fetch calendar metadata: ${response.status}`,\n      response.status,\n      authRequired,\n    );\n  }\n\n  const responseBody = await response.json();\n  return parseCalendarName(responseBody);\n};\n\nconst parseAvailability = (value: string | undefined): EventTimeSlot[\"availability\"] | null => {\n  if (value === \"free\") {\n    return \"free\";\n  }\n\n  if (value === \"oof\") {\n    return \"oof\";\n  }\n\n  if (value === \"workingElsewhere\") {\n    return \"workingElsewhere\";\n  }\n\n  if (value === \"busy\" || value === \"tentative\") {\n    return \"busy\";\n  }\n\n  return null;\n};\n\nconst parseOutlookEvents = (events: OutlookCalendarEvent[]): EventTimeSlot[] => {\n  const result: EventTimeSlot[] = [];\n\n  for (const event of events) {\n    if (\n      !event.start?.dateTime\n      || !event.start.timeZone\n      || !event.end?.dateTime\n      || !event.end.timeZone\n      || !event.iCalUId\n    ) {\n      continue;\n    }\n    if (isKeeperEvent(event.iCalUId)) {\n      continue;\n    }\n    if (event.categories?.includes(KEEPER_CATEGORY)) {\n      continue;\n    }\n\n    const start = {\n      dateTime: event.start.dateTime,\n      timeZone: event.start.timeZone,\n    };\n\n    const end = {\n      dateTime: event.end.dateTime,\n      timeZone: event.end.timeZone,\n    };\n\n    const availability = parseAvailability(event.showAs);\n\n    result.push({\n      ...availability && { availability },\n      description: event.body?.content,\n      endTime: parseEventDateTime(end),\n      isAllDay: event.isAllDay ?? false,\n      location: event.location?.displayName,\n      startTime: parseEventDateTime(start),\n      startTimeZone: start.timeZone,\n      title: event.subject,\n      uid: event.iCalUId,\n    });\n  }\n\n  return result;\n};\n\nexport { fetchCalendarEvents, fetchCalendarName, parseOutlookEvents, EventsFetchError };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/source/utils/list-calendars.ts",
    "content": "import type { OutlookCalendarListEntry, OutlookCalendarListResponse } from \"../types\";\nimport { MICROSOFT_GRAPH_API } from \"../../shared/api\";\nimport { isSimpleAuthError } from \"../../shared/errors\";\n\nconst INVALID_RESPONSE_STATUS = 502;\n\nclass CalendarListError extends Error {\n  public readonly status: number;\n  public readonly authRequired: boolean;\n\n  constructor(\n    message: string,\n    status: number,\n    authRequired = false,\n  ) {\n    super(message);\n    this.name = \"CalendarListError\";\n    this.status = status;\n    this.authRequired = authRequired;\n  }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst parseCalendarOwner = (value: unknown): OutlookCalendarListEntry[\"owner\"] | undefined => {\n  if (!isRecord(value)) {\n    return;\n  }\n\n  const owner: OutlookCalendarListEntry[\"owner\"] = {};\n  if (typeof value.name === \"string\") {\n    owner.name = value.name;\n  }\n  if (typeof value.address === \"string\") {\n    owner.address = value.address;\n  }\n\n  if (!owner.name && !owner.address) {\n    return;\n  }\n  return owner;\n};\n\nconst parseCalendarEntry = (value: unknown): OutlookCalendarListEntry | null => {\n  if (!isRecord(value)) {\n    return null;\n  }\n  if (typeof value.id !== \"string\" || typeof value.name !== \"string\") {\n    return null;\n  }\n\n  const entry: OutlookCalendarListEntry = {\n    id: value.id,\n    name: value.name,\n  };\n\n  if (typeof value.color === \"string\") {\n    entry.color = value.color;\n  }\n  if (typeof value.isDefaultCalendar === \"boolean\") {\n    entry.isDefaultCalendar = value.isDefaultCalendar;\n  }\n  if (typeof value.canEdit === \"boolean\") {\n    entry.canEdit = value.canEdit;\n  }\n\n  const owner = parseCalendarOwner(value.owner);\n  if (owner) {\n    entry.owner = owner;\n  }\n\n  return entry;\n};\n\nconst parseCalendarListResponse = (value: unknown): OutlookCalendarListResponse | null => {\n  if (!isRecord(value) || !Array.isArray(value.value)) {\n    return null;\n  }\n\n  const calendars: OutlookCalendarListEntry[] = [];\n  for (const calendar of value.value) {\n    const parsedCalendar = parseCalendarEntry(calendar);\n    if (!parsedCalendar) {\n      return null;\n    }\n    calendars.push(parsedCalendar);\n  }\n\n  const parsedResponse: OutlookCalendarListResponse = { value: calendars };\n  if (typeof value[\"@odata.nextLink\"] === \"string\") {\n    parsedResponse[\"@odata.nextLink\"] = value[\"@odata.nextLink\"];\n  }\n  return parsedResponse;\n};\n\nconst fetchCalendarPage = async (\n  accessToken: string,\n  nextLink?: string,\n): Promise<OutlookCalendarListResponse> => {\n  let url = new URL(`${MICROSOFT_GRAPH_API}/me/calendars`);\n  if (nextLink) {\n    url = new URL(nextLink);\n  } else {\n    url.searchParams.set(\"$select\", \"id,name,color,isDefaultCalendar,canEdit,owner\");\n  }\n\n  const response = await fetch(url.toString(), {\n    headers: {\n      Authorization: `Bearer ${accessToken}`,\n    },\n  });\n\n  if (!response.ok) {\n    const authRequired = isSimpleAuthError(response.status);\n    throw new CalendarListError(\n      `Failed to list calendars: ${response.status}`,\n      response.status,\n      authRequired,\n    );\n  }\n\n  const responseBody = await response.json();\n  const parsedResponse = parseCalendarListResponse(responseBody);\n  if (!parsedResponse) {\n    throw new CalendarListError(\"Invalid calendar list response\", INVALID_RESPONSE_STATUS);\n  }\n  return parsedResponse;\n};\n\nconst listUserCalendars = async (accessToken: string): Promise<OutlookCalendarListEntry[]> => {\n  const calendars: OutlookCalendarListEntry[] = [];\n  let response = await fetchCalendarPage(accessToken);\n  calendars.push(...response.value);\n\n  while (response[\"@odata.nextLink\"]) {\n    response = await fetchCalendarPage(accessToken, response[\"@odata.nextLink\"]);\n    calendars.push(...response.value);\n  }\n\n  return calendars;\n};\n\nexport { listUserCalendars, CalendarListError };\n"
  },
  {
    "path": "packages/calendar/src/providers/outlook/types.ts",
    "content": "interface OutlookDateTime {\n  dateTime: string;\n  timeZone: string;\n}\n\ninterface PartialOutlookDateTime {\n  dateTime?: string;\n  timeZone?: string;\n}\n\ninterface MicrosoftApiError {\n  code?: string;\n}\n\nexport type { OutlookDateTime, PartialOutlookDateTime, MicrosoftApiError };\n"
  },
  {
    "path": "packages/calendar/src/utils/registry/registry.ts",
    "content": "import type { AuthType, ProviderDefinition } from \"../../core/types\";\n\nconst googleCalendarDefinition = {\n  authType: \"oauth\",\n  capabilities: { canRead: true, canWrite: true },\n  icon: \"/integrations/icon-google.svg\",\n  id: \"google\",\n  name: \"Google Calendar\",\n  sourcePreferences: {\n    description:\n      \"Uncheck events of the following types to prevent them from syncing to destinations.\",\n    label: \"Event Sync Types\",\n    options: [\n      {\n        defaultValue: true,\n        disabled: true,\n        id: \"syncEvents\",\n        label: \"Events\",\n      },\n      {\n        defaultValue: true,\n        id: \"syncFocusTime\",\n        label: \"Focus Time\",\n      },\n      {\n        defaultValue: true,\n        id: \"syncOutOfOffice\",\n        label: \"Out of Office\",\n      },\n    ],\n  },\n} as const satisfies ProviderDefinition;\n\nconst outlookDefinition = {\n  authType: \"oauth\",\n  capabilities: { canRead: true, canWrite: true },\n  icon: \"/integrations/icon-outlook.svg\",\n  id: \"outlook\",\n  name: \"Outlook\",\n} as const satisfies ProviderDefinition;\n\nconst caldavDefinition = {\n  authType: \"caldav\",\n  caldav: {\n    passwordHelp: \"Your CalDAV password or app password\",\n    passwordLabel: \"Password\",\n    serverUrl: \"\",\n    usernameHelp: \"Your CalDAV username\",\n    usernameLabel: \"Username\",\n  },\n  capabilities: { canRead: true, canWrite: true },\n  id: \"caldav\",\n  name: \"CalDAV\",\n} as const satisfies ProviderDefinition;\n\nconst fastmailDefinition = {\n  authType: \"caldav\",\n  caldav: {\n    passwordHelp: \"Generate one at Settings → Password & Security → Third-party apps\",\n    passwordLabel: \"App Password\",\n    serverUrl: \"https://caldav.fastmail.com/\",\n    usernameHelp: \"Your Fastmail email address\",\n    usernameLabel: \"Email\",\n  },\n  capabilities: { canRead: true, canWrite: true },\n  icon: \"/integrations/icon-fastmail.svg\",\n  id: \"fastmail\",\n  name: \"Fastmail\",\n} as const satisfies ProviderDefinition;\n\nconst icloudDefinition = {\n  authType: \"caldav\",\n  caldav: {\n    passwordHelp: \"Generate one at appleid.apple.com → Sign-In and Security\",\n    passwordLabel: \"App-Specific Password\",\n    serverUrl: \"https://caldav.icloud.com/\",\n    usernameHelp: \"Your Apple ID email address\",\n    usernameLabel: \"Apple ID\",\n  },\n  capabilities: { canRead: true, canWrite: true },\n  icon: \"/integrations/icon-icloud.svg\",\n  id: \"icloud\",\n  name: \"iCloud\",\n} as const satisfies ProviderDefinition;\n\nconst icsDefinition = {\n  authType: \"none\",\n  capabilities: { canRead: true, canWrite: false },\n  id: \"ics\",\n  name: \"ICS Feed\",\n} as const satisfies ProviderDefinition;\n\nconst PROVIDER_DEFINITIONS = [\n  googleCalendarDefinition,\n  outlookDefinition,\n  fastmailDefinition,\n  icloudDefinition,\n  caldavDefinition,\n  icsDefinition,\n] as const;\n\ntype ProviderId = (typeof PROVIDER_DEFINITIONS)[number][\"id\"];\n\ntype OAuthProviderDefinition = Extract<\n  (typeof PROVIDER_DEFINITIONS)[number],\n  { authType: \"oauth\" }\n>;\n\ntype CalDAVProviderDefinition = Extract<\n  (typeof PROVIDER_DEFINITIONS)[number],\n  { authType: \"caldav\" }\n>;\n\ntype OAuthProviderId = OAuthProviderDefinition[\"id\"];\ntype CalDAVProviderId = CalDAVProviderDefinition[\"id\"];\n\nconst getProvider = (id: string): ProviderDefinition | undefined =>\n  PROVIDER_DEFINITIONS.find((provider) => provider.id === id);\n\nconst getProvidersByAuthType = (authType: AuthType): ProviderDefinition[] =>\n  PROVIDER_DEFINITIONS.filter((provider) => provider.authType === authType);\n\nconst getOAuthProviders = (): OAuthProviderDefinition[] =>\n  PROVIDER_DEFINITIONS.filter(\n    (provider): provider is OAuthProviderDefinition => provider.authType === \"oauth\",\n  );\n\nconst getCalDAVProviders = (): CalDAVProviderDefinition[] =>\n  PROVIDER_DEFINITIONS.filter(\n    (provider): provider is CalDAVProviderDefinition => provider.authType === \"caldav\",\n  );\n\nconst isCalDAVProvider = (id: string): id is CalDAVProviderId => {\n  const provider = getProvider(id);\n  return provider?.authType === \"caldav\";\n};\n\nconst isOAuthProvider = (id: string): id is OAuthProviderId => {\n  const provider = getProvider(id);\n  return provider?.authType === \"oauth\";\n};\n\nconst getActiveProviders = (): ProviderDefinition[] =>\n  PROVIDER_DEFINITIONS.filter((provider) => !(\"comingSoon\" in provider && provider.comingSoon));\n\nconst isProviderId = (id: string): id is ProviderId =>\n  PROVIDER_DEFINITIONS.some((provider) => provider.id === id);\n\nexport {\n  PROVIDER_DEFINITIONS,\n  getProvider,\n  getProvidersByAuthType,\n  getOAuthProviders,\n  getCalDAVProviders,\n  isCalDAVProvider,\n  isOAuthProvider,\n  isProviderId,\n  getActiveProviders,\n};\nexport type {\n  ProviderId,\n  OAuthProviderId,\n  CalDAVProviderId,\n  OAuthProviderDefinition,\n  CalDAVProviderDefinition,\n};\n"
  },
  {
    "path": "packages/calendar/src/utils/registry/server.ts",
    "content": "import type { OAuthProvider, OAuthProviders } from \"../../core/oauth/providers\";\nimport type { RefreshLockStore } from \"../../core/oauth/refresh-coordinator\";\nimport type { SourceProvider } from \"../../core/oauth/create-source-provider\";\nimport {\n  createGoogleCalendarSourceProvider,\n} from \"../../providers/google\";\nimport {\n  createOutlookSourceProvider,\n} from \"../../providers/outlook\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\ninterface SourceFactoryConfig {\n  database: BunSQLDatabase;\n  oauthProvider: OAuthProvider;\n  refreshLockStore?: RefreshLockStore | null;\n}\n\ntype SourceFactory = (config: SourceFactoryConfig) => SourceProvider;\n\nconst SOURCE_OAUTH_FACTORIES: Record<string, SourceFactory> = {\n  google: createGoogleCalendarSourceProvider,\n  outlook: createOutlookSourceProvider,\n};\n\ninterface SourceProvidersConfig {\n  database: BunSQLDatabase;\n  oauthProviders: OAuthProviders;\n  refreshLockStore?: RefreshLockStore | null;\n}\n\nconst getSourceProvider = (\n  providerId: string,\n  config: SourceProvidersConfig,\n): SourceProvider | null => {\n  const { database, oauthProviders, refreshLockStore } = config;\n  const factory = SOURCE_OAUTH_FACTORIES[providerId];\n  const oauth = oauthProviders.getProvider(providerId);\n\n  if (!factory || !oauth) {\n    return null;\n  }\n\n  return factory({ database, oauthProvider: oauth, refreshLockStore });\n};\n\nexport { getSourceProvider };\nexport type { SourceProvidersConfig };\n"
  },
  {
    "path": "packages/calendar/src/utils/safe-fetch.ts",
    "content": "import { resolve4, resolve6 } from \"node:dns/promises\";\nimport ipaddr from \"ipaddr.js\";\nimport { getDomain } from \"tldts\";\n\nconst ALLOWED_PROTOCOLS = new Set([\"http:\", \"https:\"]);\nconst MAX_REDIRECTS = 10;\nconst REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);\n\ninterface SafeFetchOptions {\n  blockPrivateResolution?: boolean;\n  allowedPrivateHosts?: Set<string>;\n}\n\nclass UrlSafetyError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"UrlSafetyError\";\n  }\n}\n\ntype SafeFetch = (input: string | Request | URL, init?: RequestInit) => Promise<Response>;\n\nconst normalizeToIPv4 = (parsed: ipaddr.IPv4 | ipaddr.IPv6): ipaddr.IPv4 | ipaddr.IPv6 => {\n  if (parsed.kind() === \"ipv6\" && \"isIPv4MappedAddress\" in parsed && parsed.isIPv4MappedAddress()) {\n    return parsed.toIPv4Address();\n  }\n  return parsed;\n};\n\nconst isUnicastAddress = (address: string): boolean => {\n  try {\n    const parsed = normalizeToIPv4(ipaddr.parse(address));\n    return parsed.range() === \"unicast\";\n  } catch {\n    return false;\n  }\n};\n\nconst assertUnicastAddress = (address: string, message: string): void => {\n  if (!isUnicastAddress(address)) {\n    throw new UrlSafetyError(message);\n  }\n};\n\nconst resolveAllAddresses = async (hostname: string): Promise<string[]> => {\n  const results = await Promise.allSettled([resolve4(hostname), resolve6(hostname)]);\n\n  const addresses = results.flatMap((result) => {\n    if (result.status === \"fulfilled\") {\n      return result.value;\n    }\n    return [];\n  });\n\n  if (addresses.length === 0) {\n    throw new UrlSafetyError(\"The provided URL could not be resolved to any IP address.\");\n  }\n\n  return addresses;\n};\n\nconst stripBrackets = (hostname: string): string => hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n\nconst validateProtocol = (protocol: string): void => {\n  if (!ALLOWED_PROTOCOLS.has(protocol)) {\n    throw new UrlSafetyError(\n      `URL scheme \"${protocol.replace(\":\", \"\")}\" is not allowed. Only HTTP and HTTPS are supported.`,\n    );\n  }\n};\n\nconst validateHostResolution = async (host: string, hostname: string, options: SafeFetchOptions): Promise<void> => {\n  if (options.allowedPrivateHosts?.has(host)) {\n    return;\n  }\n\n  if (ipaddr.isValid(hostname)) {\n    assertUnicastAddress(hostname, \"The provided URL points to a private or reserved network address.\");\n    return;\n  }\n\n  const addresses = await resolveAllAddresses(hostname);\n\n  for (const address of addresses) {\n    assertUnicastAddress(address, \"The provided URL resolves to a private or reserved network address.\");\n  }\n};\n\nconst validateUrlSafety = async (url: string, options?: SafeFetchOptions): Promise<void> => {\n  const parsed = new URL(url);\n  validateProtocol(parsed.protocol);\n\n  if (!options?.blockPrivateResolution) {\n    return;\n  }\n\n  await validateHostResolution(parsed.host, stripBrackets(parsed.hostname), options);\n};\n\nconst resolveRedirectUrl = (response: Response, originalUrl: string): string | null => {\n  const location = response.headers.get(\"location\");\n  if (!location) {\n    return null;\n  }\n\n  try {\n    return new URL(location, originalUrl).href;\n  } catch {\n    return null;\n  }\n};\n\nconst isCrossSite = (current: string, next: string): boolean => {\n  const currentUrl = new URL(current);\n  const nextUrl = new URL(next);\n  if (currentUrl.protocol !== nextUrl.protocol) {\n    return true;\n  }\n  const currentDomain = getDomain(currentUrl.hostname);\n  const nextDomain = getDomain(nextUrl.hostname);\n  if (!currentDomain || !nextDomain) {\n    return true;\n  }\n  return currentDomain !== nextDomain;\n};\n\nconst toHeaderRecord = (headers: RequestInit[\"headers\"]): Record<string, string> => {\n  const normalized = new Headers(headers);\n  const record: Record<string, string> = {};\n\n  for (const [key, value] of normalized.entries()) {\n    record[key] = value;\n  }\n\n  return record;\n};\n\nconst withoutAuthorization = (headers: Record<string, string>): Record<string, string> => Object.fromEntries(Object.entries(headers).filter(([key]) => key.toLowerCase() !== \"authorization\"));\n\nconst isRedirect = (response: Response): boolean => REDIRECT_STATUS_CODES.has(response.status);\n\nconst getHeadersForRedirect = (\n  headers: Record<string, string>,\n  currentUrl: string,\n  redirectUrl: string,\n): Record<string, string> => {\n  if (isCrossSite(currentUrl, redirectUrl)) {\n    return withoutAuthorization(headers);\n  }\n  return headers;\n};\n\nconst followRedirects = async (\n  initialUrl: string,\n  initialResponse: Response,\n  init: RequestInit | undefined,\n  options: SafeFetchOptions | undefined,\n): Promise<Response> => {\n  const headers = toHeaderRecord(init?.headers);\n  let currentUrl = initialUrl;\n  let currentResponse = initialResponse;\n  let currentHeaders = headers;\n\n  for (let count = 0; count < MAX_REDIRECTS; count++) {\n    const redirectUrl = resolveRedirectUrl(currentResponse, currentUrl);\n    if (!redirectUrl) {\n      return currentResponse;\n    }\n\n    await validateUrlSafety(redirectUrl, options);\n\n    currentHeaders = getHeadersForRedirect(currentHeaders, currentUrl, redirectUrl);\n    currentUrl = redirectUrl;\n\n    currentResponse = await globalThis.fetch(currentUrl, {\n      ...init,\n      headers: currentHeaders,\n      redirect: \"manual\",\n    });\n\n    if (!isRedirect(currentResponse)) {\n      return currentResponse;\n    }\n  }\n\n  throw new UrlSafetyError(`Too many redirects (exceeded ${MAX_REDIRECTS}).`);\n};\n\nconst extractUrl = (input: string | Request | URL): string => {\n  if (input instanceof Request) {\n    return input.url;\n  }\n  return input.toString();\n};\n\nconst createSafeFetch = (options?: SafeFetchOptions): SafeFetch => async (input, init) => {\n    const url = extractUrl(input);\n    await validateUrlSafety(url, options);\n\n    const callerWantsManual = init?.redirect === \"manual\";\n\n    const response = await globalThis.fetch(input, {\n      ...init,\n      redirect: \"manual\",\n    });\n\n    if (callerWantsManual || !isRedirect(response)) {\n      return response;\n    }\n\n    return followRedirects(url, response, init, options);\n  };\n\nexport { createSafeFetch, UrlSafetyError, validateUrlSafety };\nexport type { SafeFetchOptions };\n"
  },
  {
    "path": "packages/calendar/tests/core/events/content-hash.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { createSyncEventContentHash } from \"../../../src/core/events/content-hash\";\n\ndescribe(\"createSyncEventContentHash\", () => {\n  it(\"returns a consistent hash for the same content\", () => {\n    const event = { summary: \"Meeting\", description: \"Notes\", location: \"Room A\" };\n\n    const hash1 = createSyncEventContentHash(event);\n    const hash2 = createSyncEventContentHash(event);\n\n    expect(hash1).toBe(hash2);\n  });\n\n  it(\"returns different hashes for different summaries\", () => {\n    const hash1 = createSyncEventContentHash({ summary: \"Meeting A\" });\n    const hash2 = createSyncEventContentHash({ summary: \"Meeting B\" });\n\n    expect(hash1).not.toBe(hash2);\n  });\n\n  it(\"returns different hashes for different descriptions\", () => {\n    const hash1 = createSyncEventContentHash({ summary: \"Same\", description: \"Desc A\" });\n    const hash2 = createSyncEventContentHash({ summary: \"Same\", description: \"Desc B\" });\n\n    expect(hash1).not.toBe(hash2);\n  });\n\n  it(\"returns different hashes for different locations\", () => {\n    const hash1 = createSyncEventContentHash({ summary: \"Same\", location: \"Room A\" });\n    const hash2 = createSyncEventContentHash({ summary: \"Same\", location: \"Room B\" });\n\n    expect(hash1).not.toBe(hash2);\n  });\n\n  it(\"normalizes whitespace in content fields\", () => {\n    const hash1 = createSyncEventContentHash({ summary: \"  Meeting  \" });\n    const hash2 = createSyncEventContentHash({ summary: \"Meeting\" });\n\n    expect(hash1).toBe(hash2);\n  });\n\n  it(\"treats missing and whitespace-only description as equivalent\", () => {\n    const hash1 = createSyncEventContentHash({ summary: \"Test\" });\n    const hash2 = createSyncEventContentHash({ summary: \"Test\", description: \"   \" });\n\n    expect(hash1).toBe(hash2);\n  });\n\n  it(\"returns a 64-character hex string\", () => {\n    const hash = createSyncEventContentHash({ summary: \"Test\" });\n\n    expect(hash).toHaveLength(64);\n    expect(hash).toMatch(/^[0-9a-f]+$/);\n  });\n\n  it(\"returns different hashes when availability changes\", () => {\n    const hash1 = createSyncEventContentHash({\n      availability: \"free\",\n      endTime: new Date(\"2026-03-08T00:00:00.000Z\"),\n      startTime: new Date(\"2026-03-07T00:00:00.000Z\"),\n      summary: \"Working elsewhere\",\n    });\n    const hash2 = createSyncEventContentHash({\n      availability: \"workingElsewhere\",\n      endTime: new Date(\"2026-03-08T00:00:00.000Z\"),\n      startTime: new Date(\"2026-03-07T00:00:00.000Z\"),\n      summary: \"Working elsewhere\",\n    });\n\n    expect(hash1).not.toBe(hash2);\n  });\n\n  it(\"returns different hashes when all-day serialization would change\", () => {\n    const hash1 = createSyncEventContentHash({\n      endTime: new Date(\"2026-03-08T00:00:00.000Z\"),\n      startTime: new Date(\"2026-03-07T00:00:00.000Z\"),\n      summary: \"All day\",\n    });\n    const hash2 = createSyncEventContentHash({\n      endTime: new Date(\"2026-03-07T12:00:00.000Z\"),\n      startTime: new Date(\"2026-03-07T00:00:00.000Z\"),\n      summary: \"All day\",\n    });\n\n    expect(hash1).not.toBe(hash2);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/events/events.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { shouldExcludeSyncEvent } from \"../../../src/core/events/events\";\n\nconst createEvent = (overrides: Partial<{\n  excludeAllDayEvents: boolean;\n  excludeFocusTime: boolean;\n  excludeOutOfOffice: boolean;\n  availability: string | null;\n  isAllDay: boolean | null;\n  sourceEventType: string | null;\n}> = {}) => ({\n  availability: \"busy\",\n  excludeAllDayEvents: false,\n  excludeFocusTime: false,\n  excludeOutOfOffice: false,\n  isAllDay: false,\n  sourceEventType: \"default\",\n  ...overrides,\n});\n\ndescribe(\"shouldExcludeSyncEvent\", () => {\n  it(\"always excludes working location events\", () => {\n    expect(\n      shouldExcludeSyncEvent(\n        createEvent({\n          sourceEventType: \"workingLocation\",\n        }),\n      ),\n    ).toBe(true);\n  });\n\n  it(\"excludes focus time events when configured\", () => {\n    expect(\n      shouldExcludeSyncEvent(\n        createEvent({\n          excludeFocusTime: true,\n          sourceEventType: \"focusTime\",\n        }),\n      ),\n    ).toBe(true);\n  });\n\n  it(\"excludes out of office events when configured\", () => {\n    expect(\n      shouldExcludeSyncEvent(\n        createEvent({\n          excludeOutOfOffice: true,\n          sourceEventType: \"outOfOffice\",\n        }),\n      ),\n    ).toBe(true);\n  });\n\n  it(\"excludes all-day events when configured\", () => {\n    expect(\n      shouldExcludeSyncEvent(\n        createEvent({\n          excludeAllDayEvents: true,\n          isAllDay: true,\n        }),\n      ),\n    ).toBe(true);\n  });\n\n  it(\"keeps default events in sync\", () => {\n    expect(shouldExcludeSyncEvent(createEvent())).toBe(false);\n  });\n\n  it(\"treats legacy workingElsewhere rows as working location\", () => {\n    expect(\n      shouldExcludeSyncEvent(\n        createEvent({\n          availability: \"workingElsewhere\",\n          sourceEventType: null,\n        }),\n      ),\n    ).toBe(true);\n  });\n\n  it(\"treats legacy oof rows as out of office\", () => {\n    expect(\n      shouldExcludeSyncEvent(\n        createEvent({\n          availability: \"oof\",\n          excludeOutOfOffice: true,\n          sourceEventType: null,\n        }),\n      ),\n    ).toBe(true);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/events/identity.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { generateDeterministicEventUid, isKeeperEvent } from \"../../../src/core/events/identity\";\n\ndescribe(\"generateDeterministicEventUid\", () => {\n  it(\"ends with the keeper event suffix\", () => {\n    const uid = generateDeterministicEventUid(\"test-seed\");\n    expect(uid.endsWith(\"@keeper.sh\")).toBe(true);\n  });\n\n  it(\"produces the same UID for the same seed\", () => {\n    const uid1 = generateDeterministicEventUid(\"same-seed\");\n    const uid2 = generateDeterministicEventUid(\"same-seed\");\n    expect(uid1).toBe(uid2);\n  });\n\n  it(\"produces different UIDs for different seeds\", () => {\n    const uid1 = generateDeterministicEventUid(\"seed-a\");\n    const uid2 = generateDeterministicEventUid(\"seed-b\");\n    expect(uid1).not.toBe(uid2);\n  });\n});\n\ndescribe(\"isKeeperEvent\", () => {\n  it(\"returns true for UIDs ending with @keeper.sh\", () => {\n    expect(isKeeperEvent(\"abc-123@keeper.sh\")).toBe(true);\n  });\n\n  it(\"returns false for UIDs without the keeper suffix\", () => {\n    expect(isKeeperEvent(\"abc-123@google.com\")).toBe(false);\n  });\n\n  it(\"returns false for empty string\", () => {\n    expect(isKeeperEvent(\"\")).toBe(false);\n  });\n\n  it(\"returns false when suffix appears in the middle\", () => {\n    expect(isKeeperEvent(\"@keeper.sh-extra\")).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/events/recurrence.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  hasActiveFutureOccurrence,\n  parseExceptionDatesFromJson,\n  parseRecurrenceRuleFromJson,\n} from \"../../../src/core/events/recurrence\";\n\ndescribe(\"parseRecurrenceRuleFromJson\", () => {\n  it(\"returns null when json is invalid or frequency is missing\", () => {\n    expect(parseRecurrenceRuleFromJson(null)).toBeNull();\n    expect(parseRecurrenceRuleFromJson(\"{\")).toBeNull();\n    expect(parseRecurrenceRuleFromJson(JSON.stringify({ interval: 1 }))).toBeNull();\n  });\n\n  it(\"normalizes valid recurrence rule fields\", () => {\n    const recurrenceRule = parseRecurrenceRuleFromJson(\n      JSON.stringify({\n        byDay: [{ day: \"MO\", occurrence: 1 }],\n        byMonth: [1, 6],\n        count: 8,\n        frequency: \"WEEKLY\",\n        interval: 2,\n        until: { date: \"2026-12-31T00:00:00.000Z\" },\n      }),\n    );\n\n    expect(recurrenceRule).toBeDefined();\n    expect(recurrenceRule?.frequency).toBe(\"WEEKLY\");\n    expect(recurrenceRule?.interval).toBe(2);\n    expect(recurrenceRule?.count).toBe(8);\n    expect(recurrenceRule?.byDay).toEqual([{ day: \"MO\", occurrence: 1 }]);\n    expect(recurrenceRule?.byMonth).toEqual([1, 6]);\n    expect(recurrenceRule?.until?.date).toBeInstanceOf(Date);\n  });\n});\n\ndescribe(\"parseExceptionDatesFromJson\", () => {\n  it(\"returns valid dates and drops invalid entries\", () => {\n    const exceptionDates = parseExceptionDatesFromJson(\n      JSON.stringify([\n        { date: \"2026-03-10T10:00:00.000Z\" },\n        { date: \"not-a-date\" },\n        { value: \"missing-date\" },\n      ]),\n    );\n\n    expect(exceptionDates).toBeDefined();\n    expect(exceptionDates).toHaveLength(1);\n    expect(exceptionDates?.[0]).toBeInstanceOf(Date);\n    expect(exceptionDates?.[0]?.toISOString()).toBe(\"2026-03-10T10:00:00.000Z\");\n  });\n});\n\ndescribe(\"hasActiveFutureOccurrence\", () => {\n  it(\"returns true when a recurring series has future occurrences\", () => {\n    const recurrenceRule = parseRecurrenceRuleFromJson(\n      JSON.stringify({\n        count: 10,\n        frequency: \"DAILY\",\n        interval: 1,\n      }),\n    );\n\n    const hasFutureOccurrence = hasActiveFutureOccurrence(\n      new Date(\"2026-03-01T10:00:00.000Z\"),\n      recurrenceRule,\n      [],\n      new Date(\"2026-03-05T00:00:00.000Z\"),\n    );\n\n    expect(hasFutureOccurrence).toBe(true);\n  });\n\n  it(\"returns false when recurrence has no future occurrences\", () => {\n    const recurrenceRule = parseRecurrenceRuleFromJson(\n      JSON.stringify({\n        count: 1,\n        frequency: \"DAILY\",\n      }),\n    );\n\n    const hasFutureOccurrence = hasActiveFutureOccurrence(\n      new Date(\"2026-03-01T10:00:00.000Z\"),\n      recurrenceRule,\n      [],\n      new Date(\"2026-03-02T00:00:00.000Z\"),\n    );\n\n    expect(hasFutureOccurrence).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/oauth/ensure-valid-token.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { ensureValidToken } from \"../../../src/core/oauth/ensure-valid-token\";\nimport type { TokenState, TokenRefresher } from \"../../../src/core/oauth/ensure-valid-token\";\n\nconst makeRefresher = (\n  overrides: Partial<{ access_token: string; expires_in: number; refresh_token: string }> = {},\n): TokenRefresher =>\n  () => Promise.resolve({\n    access_token: overrides.access_token ?? \"new-token\",\n    expires_in: overrides.expires_in ?? 3600,\n    ...overrides.refresh_token && { refresh_token: overrides.refresh_token },\n  });\n\nconst makeExpiredTokenState = (overrides: Partial<TokenState> = {}): TokenState => ({\n  accessToken: overrides.accessToken ?? \"old-token\",\n  accessTokenExpiresAt: overrides.accessTokenExpiresAt ?? new Date(Date.now() - 60_000),\n  refreshToken: overrides.refreshToken ?? \"refresh-1\",\n});\n\ndescribe(\"ensureValidToken\", () => {\n  it(\"refreshes token when accessTokenExpiresAt is in the past\", async () => {\n    const tokenState = makeExpiredTokenState();\n\n    await ensureValidToken(tokenState, makeRefresher());\n\n    expect(tokenState.accessToken).toBe(\"new-token\");\n    expect(tokenState.accessTokenExpiresAt.getTime()).toBeGreaterThan(Date.now());\n  });\n\n  it(\"reuses existing token when it has not expired\", async () => {\n    const tokenState = makeExpiredTokenState({\n      accessToken: \"valid-token\",\n      accessTokenExpiresAt: new Date(Date.now() + 600_000),\n    });\n\n    let refreshCalled = false;\n    const trackingRefresher: TokenRefresher = () => {\n      refreshCalled = true;\n      return Promise.resolve({ access_token: \"new-token\", expires_in: 3600 });\n    };\n\n    await ensureValidToken(tokenState, trackingRefresher);\n\n    expect(refreshCalled).toBe(false);\n    expect(tokenState.accessToken).toBe(\"valid-token\");\n  });\n\n  it(\"updates refresh token when returned by provider\", async () => {\n    const tokenState = makeExpiredTokenState({ refreshToken: \"old-refresh\" });\n\n    await ensureValidToken(tokenState, makeRefresher({ refresh_token: \"new-refresh\" }));\n\n    expect(tokenState.refreshToken).toBe(\"new-refresh\");\n  });\n\n  it(\"keeps existing refresh token when provider does not return one\", async () => {\n    const tokenState = makeExpiredTokenState({ refreshToken: \"original-refresh\" });\n\n    await ensureValidToken(tokenState, makeRefresher());\n\n    expect(tokenState.refreshToken).toBe(\"original-refresh\");\n  });\n\n  it(\"refreshes token when within the buffer window\", async () => {\n    const fourMinutesFromNow = new Date(Date.now() + 4 * 60 * 1000);\n    const tokenState = makeExpiredTokenState({\n      accessToken: \"expiring-token\",\n      accessTokenExpiresAt: fourMinutesFromNow,\n    });\n\n    await ensureValidToken(tokenState, makeRefresher({ access_token: \"fresh-token\" }));\n\n    expect(tokenState.accessToken).toBe(\"fresh-token\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/oauth/error-classification.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { isOAuthReauthRequiredError } from \"../../../src/core/oauth/error-classification\";\n\ndescribe(\"isOAuthReauthRequiredError\", () => {\n  it(\"returns true when explicit reauth marker is true\", () => {\n    expect(isOAuthReauthRequiredError({ oauthReauthRequired: true })).toBe(true);\n  });\n\n  it(\"returns false when explicit reauth marker is false\", () => {\n    expect(isOAuthReauthRequiredError({ oauthReauthRequired: false })).toBe(false);\n  });\n\n  it(\"returns true for invalid_grant fallback messages\", () => {\n    expect(\n      isOAuthReauthRequiredError(new Error(\"Token refresh failed (400): {\\\"error\\\":\\\"invalid_grant\\\"}\")),\n    ).toBe(true);\n  });\n\n  it(\"returns false for transient timeout messages\", () => {\n    expect(\n      isOAuthReauthRequiredError(new Error(\"Token refresh timed out after 15000ms\")),\n    ).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/oauth/google.test.ts",
    "content": "import { afterEach, describe, expect, it } from \"vitest\";\nimport { createGoogleOAuthService } from \"../../../src/core/oauth/google\";\n\nconst originalFetch = globalThis.fetch;\n\nconst createTestStateStore = () => {\n  const store = new Map<string, { value: string; expiresAt: number }>();\n  return {\n    set: (key: string, value: string, ttlSeconds: number) => {\n      store.set(key, { value, expiresAt: Date.now() + ttlSeconds * 1000 });\n      return Promise.resolve();\n    },\n    consume: (key: string) => {\n      const entry = store.get(key);\n      if (!entry) {\n        return Promise.resolve(null);\n      }\n      store.delete(key);\n      return Promise.resolve(entry.value);\n    },\n  };\n};\n\nconst createService = () =>\n  createGoogleOAuthService({\n    clientId: \"google-client-id\",\n    clientSecret: \"google-client-secret\",\n  }, createTestStateStore());\n\nconst createFetchMock = (\n  handler: (input: unknown, init?: RequestInit) => Promise<Response>,\n): typeof fetch => {\n  const fetchMock: typeof fetch = (input, init) => handler(input, init);\n  fetchMock.preconnect = originalFetch.preconnect;\n  return fetchMock;\n};\n\nafterEach(() => {\n  globalThis.fetch = originalFetch;\n});\n\ndescribe(\"createGoogleOAuthService.refreshAccessToken\", () => {\n  it(\"flags invalid_grant failures as requiring reauthentication\", async () => {\n    globalThis.fetch = createFetchMock(() =>\n      Promise.resolve(\n        Response.json(\n          {\n            error: \"invalid_grant\",\n            error_description: \"Token has been expired or revoked.\",\n          },\n          { status: 400 },\n        ),\n      ));\n\n    const service = createService();\n\n    await expect(service.refreshAccessToken(\"refresh-token\")).rejects.toMatchObject({\n      oauthErrorCode: \"invalid_grant\",\n      oauthReauthRequired: true,\n    });\n  });\n\n  it(\"retries once for transient 5xx failures\", async () => {\n    let attempts = 0;\n\n    globalThis.fetch = createFetchMock(() => {\n      attempts += 1;\n\n      if (attempts === 1) {\n        return Promise.resolve(\n          Response.json(\n            {\n              error: \"temporarily_unavailable\",\n            },\n            { status: 503 },\n          ),\n        );\n      }\n\n      return Promise.resolve(\n        Response.json({\n          access_token: \"new-access-token\",\n          expires_in: 3600,\n          scope: \"https://www.googleapis.com/auth/calendar.events\",\n          token_type: \"Bearer\",\n        }),\n      );\n    });\n\n    const service = createService();\n    const token = await service.refreshAccessToken(\"refresh-token\");\n\n    expect(attempts).toBe(2);\n    expect(token.access_token).toBe(\"new-access-token\");\n  });\n\n  it(\"marks timeout failures as transient\", async () => {\n    globalThis.fetch = createFetchMock(() =>\n      Promise.reject(new DOMException(\"The operation was aborted.\", \"AbortError\")));\n\n    const service = createService();\n\n    await expect(service.refreshAccessToken(\"refresh-token\")).rejects.toMatchObject({\n      oauthReauthRequired: false,\n      oauthRetriable: true,\n    });\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/oauth/refresh-coordinator.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { runWithCredentialRefreshLock } from \"../../../src/core/oauth/refresh-coordinator\";\n\ndescribe(\"runWithCredentialRefreshLock\", () => {\n  it(\"coalesces concurrent refreshes for the same credential\", () => {\n    let refreshCalls = 0;\n    const deferredRefresh = Promise.withResolvers<{\n      access_token: string;\n      expires_in: number;\n      refresh_token?: string;\n    }>();\n\n    const refreshOperation = () => {\n      refreshCalls += 1;\n      return deferredRefresh.promise;\n    };\n\n    const first = runWithCredentialRefreshLock(\"credential-1\", refreshOperation);\n    const second = runWithCredentialRefreshLock(\"credential-1\", refreshOperation);\n\n    expect(refreshCalls).toBe(1);\n\n    deferredRefresh.resolve({\n      access_token: \"access-token\",\n      expires_in: 3600,\n      refresh_token: \"refresh-token\",\n    });\n\n    expect(first).resolves.toMatchObject({ access_token: \"access-token\" });\n    expect(second).resolves.toMatchObject({ access_token: \"access-token\" });\n  });\n\n  it(\"releases the lock after failures\", async () => {\n    let calls = 0;\n\n    const failingOperation = () => {\n      calls += 1;\n      return Promise.reject(new Error(\"refresh failed\"));\n    };\n\n    await expect(\n      runWithCredentialRefreshLock(\"credential-2\", failingOperation),\n    ).rejects.toThrow(\"refresh failed\");\n    await expect(\n      runWithCredentialRefreshLock(\"credential-2\", failingOperation),\n    ).rejects.toThrow(\"refresh failed\");\n\n    expect(calls).toBe(2);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/oauth/sync-token.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  decodeStoredSyncToken,\n  encodeStoredSyncToken,\n  resolveSyncTokenForWindow,\n} from \"../../../src/core/oauth/sync-token\";\n\ndescribe(\"sync token versioning\", () => {\n  it(\"treats legacy plain token as version zero\", () => {\n    const decoded = decodeStoredSyncToken(\"legacy-google-sync-token\");\n    expect(decoded.syncToken).toBe(\"legacy-google-sync-token\");\n    expect(decoded.syncWindowVersion).toBe(0);\n  });\n\n  it(\"encodes and decodes current-version tokens\", () => {\n    const encoded = encodeStoredSyncToken(\n      \"https://graph.microsoft.com/v1.0/me/calendars/123/delta?$deltatoken=abc\",\n      1,\n    );\n\n    const decoded = decodeStoredSyncToken(encoded);\n    expect(decoded.syncToken).toBe(\n      \"https://graph.microsoft.com/v1.0/me/calendars/123/delta?$deltatoken=abc\",\n    );\n    expect(decoded.syncWindowVersion).toBe(1);\n  });\n\n  it(\"forces full sync when stored token version is stale\", () => {\n    const legacyResolution = resolveSyncTokenForWindow(\"legacy-token\", 1);\n    expect(legacyResolution.syncToken).toBeNull();\n    expect(legacyResolution.requiresBackfill).toBe(true);\n  });\n\n  it(\"uses token when stored version matches required version\", () => {\n    const encoded = encodeStoredSyncToken(\"valid-token\", 1);\n    const resolution = resolveSyncTokenForWindow(encoded, 1);\n    expect(resolution.syncToken).toBe(\"valid-token\");\n    expect(resolution.requiresBackfill).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/oauth/sync-window.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { getOAuthSyncWindow, getOAuthSyncWindowStart } from \"../../../src/core/oauth/sync-window\";\n\ndescribe(\"oauth sync window\", () => {\n  it(\"returns a start date seven days before the provided day boundary\", () => {\n    const providedStartOfToday = new Date(\"2026-03-09T00:00:00.000Z\");\n\n    const lookbackStart = getOAuthSyncWindowStart(providedStartOfToday);\n\n    expect(lookbackStart.toISOString()).toBe(\"2026-03-02T00:00:00.000Z\");\n  });\n\n  it(\"returns a window with lookback start and configured future bound\", () => {\n    const providedStartOfToday = new Date(\"2026-03-09T00:00:00.000Z\");\n\n    const syncWindow = getOAuthSyncWindow(2, providedStartOfToday);\n\n    expect(syncWindow.timeMin.toISOString()).toBe(\"2026-03-02T00:00:00.000Z\");\n    expect(syncWindow.timeMax.toISOString()).toBe(\"2028-03-09T00:00:00.000Z\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/source/event-diff.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport type { SourceEvent } from \"../../../src/core/types\";\nimport {\n  buildSourceEventsToAdd,\n  buildSourceEventStateIdsToRemove,\n  type ExistingSourceEventState,\n} from \"../../../src/core/source/event-diff\";\n\nconst createExistingEvent = (\n  overrides: Partial<ExistingSourceEventState>,\n): ExistingSourceEventState => ({\n  endTime: new Date(\"2026-03-11T20:00:00.000Z\"),\n  id: \"existing-id-1\",\n  sourceEventUid: \"event-uid-1\",\n  sourceEventType: \"default\",\n  startTime: new Date(\"2026-03-11T19:00:00.000Z\"),\n  ...overrides,\n});\n\nconst createIncomingEvent = (overrides: Partial<SourceEvent>): SourceEvent => ({\n  endTime: new Date(\"2026-03-11T20:00:00.000Z\"),\n  sourceEventType: \"default\",\n  startTime: new Date(\"2026-03-11T19:00:00.000Z\"),\n  uid: \"event-uid-1\",\n  ...overrides,\n});\n\ndescribe(\"source event diff\", () => {\n  it(\"adds recurring instances that share UID but differ by start and end\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        endTime: new Date(\"2026-03-12T00:00:00.000Z\"),\n        id: \"existing-week-two\",\n        sourceEventUid: \"recurring-uid\",\n        startTime: new Date(\"2026-03-11T23:00:00.000Z\"),\n      }),\n    ];\n\n    const incomingEvents = [\n      createIncomingEvent({\n        endTime: new Date(\"2026-03-05T00:00:00.000Z\"),\n        startTime: new Date(\"2026-03-04T23:00:00.000Z\"),\n        uid: \"recurring-uid\",\n      }),\n      createIncomingEvent({\n        endTime: new Date(\"2026-03-12T00:00:00.000Z\"),\n        startTime: new Date(\"2026-03-11T23:00:00.000Z\"),\n        uid: \"recurring-uid\",\n      }),\n    ];\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, incomingEvents);\n\n    expect(eventsToAdd).toHaveLength(1);\n    expect(eventsToAdd[0]?.startTime.toISOString()).toBe(\"2026-03-04T23:00:00.000Z\");\n  });\n\n  it(\"removes only missing recurring instances during full sync\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        endTime: new Date(\"2026-03-05T00:00:00.000Z\"),\n        id: \"instance-old\",\n        sourceEventUid: \"recurring-uid\",\n        startTime: new Date(\"2026-03-04T23:00:00.000Z\"),\n      }),\n      createExistingEvent({\n        endTime: new Date(\"2026-03-12T00:00:00.000Z\"),\n        id: \"instance-current\",\n        sourceEventUid: \"recurring-uid\",\n        startTime: new Date(\"2026-03-11T23:00:00.000Z\"),\n      }),\n    ];\n\n    const incomingEvents = [\n      createIncomingEvent({\n        endTime: new Date(\"2026-03-12T00:00:00.000Z\"),\n        startTime: new Date(\"2026-03-11T23:00:00.000Z\"),\n        uid: \"recurring-uid\",\n      }),\n    ];\n\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingEvents, incomingEvents);\n\n    expect(idsToRemove).toEqual([\"instance-old\"]);\n  });\n\n  it(\"removes all matching UIDs during delta cancellation\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        id: \"instance-1\",\n        sourceEventUid: \"cancelled-uid\",\n      }),\n      createExistingEvent({\n        id: \"instance-2\",\n        sourceEventUid: \"cancelled-uid\",\n      }),\n      createExistingEvent({\n        id: \"instance-3\",\n        sourceEventUid: \"other-uid\",\n      }),\n    ];\n\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingEvents, [], {\n      cancelledEventUids: [\"cancelled-uid\"],\n      isDeltaSync: true,\n    });\n\n    expect(idsToRemove).toEqual([\"instance-1\", \"instance-2\"]);\n  });\n\n  it(\"updates stored events when the source event type changes\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        id: \"existing-focus\",\n        sourceEventType: \"default\",\n        sourceEventUid: \"typed-uid\",\n      }),\n    ];\n\n    const incomingEvents = [\n      createIncomingEvent({\n        sourceEventType: \"focusTime\",\n        uid: \"typed-uid\",\n      }),\n    ];\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, incomingEvents);\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingEvents, incomingEvents);\n\n    expect(eventsToAdd).toHaveLength(1);\n    expect(idsToRemove).toEqual([]);\n  });\n\n  it(\"backfills missing source metadata during full sync via upsert\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        id: \"existing-default-null\",\n        isAllDay: null,\n        sourceEventType: null,\n        sourceEventUid: \"default-uid\",\n      }),\n    ];\n\n    const incomingEvents = [\n      createIncomingEvent({\n        isAllDay: false,\n        sourceEventType: \"default\",\n        uid: \"default-uid\",\n      }),\n    ];\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, incomingEvents);\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingEvents, incomingEvents);\n\n    expect(eventsToAdd).toHaveLength(1);\n    expect(idsToRemove).toEqual([]);\n  });\n\n  it(\"does not duplicate missing source metadata during delta sync\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        id: \"existing-default-null\",\n        isAllDay: null,\n        sourceEventType: null,\n        sourceEventUid: \"default-uid\",\n      }),\n    ];\n\n    const incomingEvents = [\n      createIncomingEvent({\n        isAllDay: false,\n        sourceEventType: \"default\",\n        uid: \"default-uid\",\n      }),\n    ];\n\n    const eventsToAdd = buildSourceEventsToAdd(existingEvents, incomingEvents, {\n      isDeltaSync: true,\n    });\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingEvents, incomingEvents, {\n      isDeltaSync: true,\n    });\n\n    expect(eventsToAdd).toHaveLength(0);\n    expect(idsToRemove).toEqual([]);\n  });\n\n  it(\"deduplicates incoming events that share the same storage identity\", () => {\n    const incomingEvents = [\n      createIncomingEvent({\n        sourceEventType: \"default\",\n        title: \"Old title\",\n        uid: \"dup-uid\",\n      }),\n      createIncomingEvent({\n        sourceEventType: \"default\",\n        title: \"New title\",\n        uid: \"dup-uid\",\n      }),\n    ];\n\n    const eventsToAdd = buildSourceEventsToAdd([], incomingEvents);\n\n    expect(eventsToAdd).toHaveLength(1);\n    expect(eventsToAdd[0]?.title).toBe(\"New title\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/source/sync-diagnostics.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport type { SourceEvent } from \"../../../src/core/types\";\nimport type { ExistingSourceEventState } from \"../../../src/core/source/event-diff\";\nimport {\n  filterSourceEventsToSyncWindow,\n  resolveSourceSyncTokenAction,\n  splitSourceEventsByStorageIdentity,\n} from \"../../../src/core/source/sync-diagnostics\";\n\nconst createSourceEvent = (overrides: Partial<SourceEvent>): SourceEvent => ({\n  endTime: new Date(\"2026-03-12T11:00:00.000Z\"),\n  startTime: new Date(\"2026-03-12T10:00:00.000Z\"),\n  uid: \"event-1\",\n  ...overrides,\n});\n\nconst createExistingEvent = (\n  overrides: Partial<ExistingSourceEventState>,\n): ExistingSourceEventState => ({\n  endTime: new Date(\"2026-03-12T11:00:00.000Z\"),\n  id: \"existing-1\",\n  sourceEventType: \"default\",\n  sourceEventUid: \"event-1\",\n  startTime: new Date(\"2026-03-12T10:00:00.000Z\"),\n  ...overrides,\n});\n\ndescribe(\"filterSourceEventsToSyncWindow\", () => {\n  it(\"drops events fully outside the sync window\", () => {\n    const events = [\n      createSourceEvent({\n        endTime: new Date(\"2026-03-01T11:00:00.000Z\"),\n        startTime: new Date(\"2026-03-01T10:00:00.000Z\"),\n        uid: \"old\",\n      }),\n      createSourceEvent({\n        endTime: new Date(\"2026-03-12T11:00:00.000Z\"),\n        startTime: new Date(\"2026-03-12T10:00:00.000Z\"),\n        uid: \"inside\",\n      }),\n      createSourceEvent({\n        endTime: new Date(\"2026-05-01T11:00:00.000Z\"),\n        startTime: new Date(\"2026-05-01T10:00:00.000Z\"),\n        uid: \"future\",\n      }),\n    ];\n\n    const result = filterSourceEventsToSyncWindow(events, {\n      timeMax: new Date(\"2026-03-31T23:59:59.999Z\"),\n      timeMin: new Date(\"2026-03-10T00:00:00.000Z\"),\n    });\n\n    expect(result.filteredCount).toBe(2);\n    expect(result.events).toHaveLength(1);\n    expect(result.events[0]?.uid).toBe(\"inside\");\n  });\n});\n\ndescribe(\"splitSourceEventsByStorageIdentity\", () => {\n  it(\"separates true inserts from upserts on existing storage identity\", () => {\n    const existingEvents = [\n      createExistingEvent({\n        endTime: new Date(\"2026-03-12T11:00:00.000Z\"),\n        sourceEventUid: \"event-1\",\n        startTime: new Date(\"2026-03-12T10:00:00.000Z\"),\n      }),\n    ];\n\n    const eventsToAdd = [\n      createSourceEvent({\n        endTime: new Date(\"2026-03-12T11:00:00.000Z\"),\n        startTime: new Date(\"2026-03-12T10:00:00.000Z\"),\n        uid: \"event-1\",\n      }),\n      createSourceEvent({\n        endTime: new Date(\"2026-03-13T11:00:00.000Z\"),\n        startTime: new Date(\"2026-03-13T10:00:00.000Z\"),\n        uid: \"event-2\",\n      }),\n    ];\n\n    const result = splitSourceEventsByStorageIdentity(existingEvents, eventsToAdd);\n\n    expect(result.eventsToInsert).toHaveLength(1);\n    expect(result.eventsToInsert[0]?.uid).toBe(\"event-2\");\n    expect(result.eventsToUpdate).toHaveLength(1);\n    expect(result.eventsToUpdate[0]?.uid).toBe(\"event-1\");\n  });\n});\n\ndescribe(\"resolveSourceSyncTokenAction\", () => {\n  it(\"requests token reset when delta sync returns no next token\", () => {\n    const tokenPayload: { nextSyncToken?: string } = {};\n    const result = resolveSourceSyncTokenAction(tokenPayload.nextSyncToken, true);\n    expect(result.shouldResetSyncToken).toBe(true);\n    expect(result.nextSyncTokenToPersist).toBeUndefined();\n  });\n\n  it(\"persists next token when available\", () => {\n    const result = resolveSourceSyncTokenAction(\"next-token\", true);\n    expect(result.shouldResetSyncToken).toBe(false);\n    expect(result.nextSyncTokenToPersist).toBe(\"next-token\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/source/write-event-states.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { eventStatesTable } from \"@keeper.sh/database/schema\";\nimport type { EventStateInsertRow } from \"../../../src/core/source/write-event-states\";\nimport { insertEventStatesWithConflictResolution } from \"../../../src/core/source/write-event-states\";\n\ndescribe(\"insertEventStatesWithConflictResolution\", () => {\n  it(\"skips database writes when there are no rows\", async () => {\n    let insertCalled = false;\n\n    const database = {\n      insert: () => {\n        insertCalled = true;\n        return {\n          values: () => ({\n            onConflictDoUpdate: () => Promise.resolve(),\n          }),\n        };\n      },\n    };\n\n    await insertEventStatesWithConflictResolution(database, []);\n\n    expect(insertCalled).toBe(false);\n  });\n\n  it(\"uses event identity conflict target when inserting rows\", async () => {\n    const rows: EventStateInsertRow[] = [\n      {\n        availability: \"busy\",\n        calendarId: \"calendar-1\",\n        endTime: new Date(\"2026-03-12T11:00:00.000Z\"),\n        sourceEventType: \"default\",\n        sourceEventUid: \"uid-1\",\n        startTime: new Date(\"2026-03-12T10:00:00.000Z\"),\n        title: \"Focus Block\",\n      },\n    ];\n\n    const calls: {\n      conflictConfig?: {\n        set: Record<string, unknown>;\n        target: unknown[];\n      };\n      insertedRows?: EventStateInsertRow[];\n      insertTable?: typeof eventStatesTable;\n    } = {};\n\n    const database = {\n      insert: (table: typeof eventStatesTable) => {\n        calls.insertTable = table;\n        return {\n          values: (values: EventStateInsertRow[]) => {\n            calls.insertedRows = values;\n            return {\n              onConflictDoUpdate: (config: {\n                set: Record<string, unknown>;\n                target: unknown[];\n              }) => {\n                calls.conflictConfig = config;\n                return Promise.resolve();\n              },\n            };\n          },\n        };\n      },\n    };\n\n    await insertEventStatesWithConflictResolution(database, rows);\n\n    expect(calls.insertTable).toBe(eventStatesTable);\n    expect(calls.insertedRows).toEqual(rows);\n    expect(calls.conflictConfig?.target[0]).toBe(eventStatesTable.calendarId);\n    expect(calls.conflictConfig?.target[1]).toBe(eventStatesTable.sourceEventUid);\n    expect(calls.conflictConfig?.target[2]).toBe(eventStatesTable.startTime);\n    expect(calls.conflictConfig?.target[3]).toBe(eventStatesTable.endTime);\n    expect(Object.keys(calls.conflictConfig?.set ?? {}).toSorted()).toEqual([\n      \"availability\",\n      \"description\",\n      \"exceptionDates\",\n      \"isAllDay\",\n      \"location\",\n      \"recurrenceRule\",\n      \"sourceEventType\",\n      \"startTimeZone\",\n      \"title\",\n    ]);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/sync/aggregate-runtime.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { createSyncAggregateRuntime } from \"../../../src/core/sync/aggregate-runtime\";\nimport { SyncAggregateTracker } from \"../../../src/core/sync/aggregate-tracker\";\nimport type { DestinationSyncResult, SyncProgressUpdate } from \"../../../src/core/sync/types\";\nimport Redis from \"ioredis\";\n\nconst flushAsync = async (): Promise<void> => {\n  for (let tick = 0; tick < 10; tick++) {\n    await Promise.resolve();\n  }\n};\n\nconst createMockRedis = (): Redis => {\n  const store = new Map<string, string>();\n\n  const stub = (property: keyof Redis) => {\n    switch (property) {\n      case \"incr\": {\n        return (key: string) => {\n          const current = Number.parseInt(store.get(key) ?? \"0\", 10);\n          const next = current + 1;\n          store.set(key, String(next));\n          return Promise.resolve(next);\n        }\n      }\n      case \"get\": {\n        return (key: string): Promise<string | null> => Promise.resolve(store.get(key) ?? null)\n      }\n      case \"set\": {\n        return (key: string, value: string): Promise<\"OK\"> => {\n          store.set(key, value);\n          return Promise.resolve(\"OK\");\n        }\n      }\n      default: {\n        return () => null;\n      }\n    }\n  }\n\n  const instance: Redis = Object.create(Redis.prototype);\n\n  const isRedisMethod = (property: string | symbol): property is keyof Redis =>\n    property in Redis.prototype;\n\n  const NoopRedis = new Proxy(instance, {\n    get(target, property, receiver) {\n      if (isRedisMethod(property)) {\n        const value = target[property];\n        if (typeof value === \"function\") {\n          return stub(property);\n        }\n        return Reflect.get(target, property, receiver);\n      }\n\n      return Reflect.get(target, property, receiver);\n    }\n  })\n\n  return NoopRedis;\n};\n\nconst ignoredCallbacks: unknown[] = [];\n\nconst ignoreBroadcast = (userId: string, eventName: string, data: unknown): void => {\n  ignoredCallbacks.push({ data, eventName, userId });\n};\n\nconst ignorePersistSyncStatus = (result: DestinationSyncResult, syncedAt: Date): Promise<void> => {\n  ignoredCallbacks.push({ result, syncedAt });\n  return Promise.resolve();\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst createProgressUpdate = (\n  overrides: Partial<SyncProgressUpdate> = {},\n): SyncProgressUpdate => ({\n  calendarId: \"cal-1\",\n  inSync: false,\n  localEventCount: 0,\n  remoteEventCount: 0,\n  stage: \"fetching\",\n  status: \"syncing\",\n  userId: \"user-1\",\n  ...overrides,\n});\n\nconst createDestinationResult = (\n  overrides: Partial<DestinationSyncResult> = {},\n): DestinationSyncResult => ({\n  calendarId: \"cal-1\",\n  localEventCount: 5,\n  remoteEventCount: 5,\n  userId: \"user-1\",\n  ...overrides,\n});\n\ndescribe(\"createSyncAggregateRuntime\", () => {\n  describe(\"onSyncProgress\", () => {\n    it(\"broadcasts aggregate when tracker emits a message\", async () => {\n      const redis = createMockRedis();\n      const broadcasts: { userId: string; event: string; data: unknown }[] = [];\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: (userId, event, data) => broadcasts.push({ data, event, userId }),\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n        tracker: new SyncAggregateTracker({ progressThrottleMs: 0 }),\n      });\n\n      runtime.onSyncProgress(\n        createProgressUpdate({ progress: { current: 0, total: 10 } }),\n      );\n\n      await flushAsync();\n\n      expect(broadcasts.length).toBeGreaterThanOrEqual(1);\n      const [firstBroadcast] = broadcasts;\n      expect(firstBroadcast).toBeDefined();\n      if (!firstBroadcast) {\n        throw new TypeError(\"Expected first broadcast\");\n      }\n      expect(firstBroadcast.event).toBe(\"sync:aggregate\");\n      expect(firstBroadcast.userId).toBe(\"user-1\");\n    });\n  });\n\n  describe(\"onDestinationSync\", () => {\n    it(\"persists sync status and broadcasts result\", async () => {\n      const redis = createMockRedis();\n      const broadcasts: { userId: string; event: string; data: unknown }[] = [];\n      const persisted: { result: DestinationSyncResult; syncedAt: Date }[] = [];\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: (userId, event, data) => broadcasts.push({ data, event, userId }),\n        persistSyncStatus: (result, syncedAt) => {\n          persisted.push({ result, syncedAt });\n          return Promise.resolve();\n        },\n        redis: redis,\n        tracker,\n      });\n\n      tracker.trackProgress(\n        createProgressUpdate({ calendarId: \"cal-1\", progress: { current: 5, total: 10 } }),\n      );\n\n      await runtime.onDestinationSync(createDestinationResult());\n\n      expect(persisted).toHaveLength(1);\n      const [firstPersisted] = persisted;\n      expect(firstPersisted).toBeDefined();\n      if (!firstPersisted) {\n        throw new TypeError(\"Expected persisted sync status\");\n      }\n      expect(firstPersisted.result.calendarId).toBe(\"cal-1\");\n      expect(broadcasts.length).toBeGreaterThanOrEqual(1);\n    });\n\n    it(\"skips broadcast when result.broadcast is false\", async () => {\n      const redis = createMockRedis();\n      const broadcasts: unknown[] = [];\n      const persisted: unknown[] = [];\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: (userId, eventName, data) => {\n          broadcasts.push({ data, eventName, userId });\n        },\n        persistSyncStatus: () => {\n          persisted.push(true);\n          return Promise.resolve();\n        },\n        redis: redis,\n        tracker: new SyncAggregateTracker({ progressThrottleMs: 0 }),\n      });\n\n      await runtime.onDestinationSync(\n        createDestinationResult({ broadcast: false }),\n      );\n\n      expect(broadcasts).toHaveLength(0);\n      expect(persisted).toHaveLength(0);\n    });\n  });\n\n  describe(\"getCurrentSyncAggregate\", () => {\n    it(\"delegates to tracker and returns current state\", () => {\n      const redis = createMockRedis();\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n        tracker,\n      });\n\n      const result = runtime.getCurrentSyncAggregate(\"user-1\");\n\n      expect(result.syncing).toBe(false);\n      expect(result.progressPercent).toBe(100);\n    });\n\n    it(\"passes fallback to tracker\", () => {\n      const redis = createMockRedis();\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n        tracker,\n      });\n\n      const result = runtime.getCurrentSyncAggregate(\"user-1\", {\n        progressPercent: 42,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n      });\n\n      expect(result.progressPercent).toBe(42);\n    });\n  });\n\n  describe(\"getCachedSyncAggregate\", () => {\n    it(\"returns null when no cached value exists\", async () => {\n      const redis = createMockRedis();\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      const result = await runtime.getCachedSyncAggregate(\"user-1\");\n      expect(result).toBeNull();\n    });\n\n    it(\"returns parsed cached aggregate when valid\", async () => {\n      const redis = createMockRedis();\n      const cached = {\n        progressPercent: 100,\n        seq: 3,\n        syncEventsProcessed: 10,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 10,\n        syncing: false,\n      };\n      redis.set(\"sync:aggregate:latest:user-1\", JSON.stringify(cached));\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      const result = await runtime.getCachedSyncAggregate(\"user-1\");\n      expect(result).toEqual(cached);\n    });\n\n    it(\"returns null for invalid cached JSON\", async () => {\n      const redis = createMockRedis();\n      redis.set(\"sync:aggregate:latest:user-1\", \"not-valid-json\");\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      const result = await runtime.getCachedSyncAggregate(\"user-1\");\n      expect(result).toBeNull();\n    });\n\n    it(\"returns null for valid JSON that doesn't match aggregate shape\", async () => {\n      const redis = createMockRedis();\n      redis.set(\n        \"sync:aggregate:latest:user-1\",\n        JSON.stringify({ foo: \"bar\" }),\n      );\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      const result = await runtime.getCachedSyncAggregate(\"user-1\");\n      expect(result).toBeNull();\n    });\n\n    it(\"accepts cached aggregate with lastSyncedAt field\", async () => {\n      const redis = createMockRedis();\n      const cached = {\n        lastSyncedAt: \"2026-03-08T12:00:00.000Z\",\n        progressPercent: 100,\n        seq: 1,\n        syncEventsProcessed: 5,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 5,\n        syncing: false,\n      };\n\n      redis.set(\"sync:aggregate:latest:user-1\", JSON.stringify(cached));\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: ignoreBroadcast,\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      const result = await runtime.getCachedSyncAggregate(\"user-1\");\n      expect(result).toEqual(cached);\n    });\n  });\n\n  describe(\"emitSyncAggregate\", () => {\n    it(\"stores idle aggregate in redis and broadcasts with redis sequence\", async () => {\n      const redis = createMockRedis();\n      const broadcasts: { data: unknown; eventName: string; userId: string }[] = [];\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: (userId, eventName, data) => {\n          broadcasts.push({ data, eventName, userId });\n        },\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      await runtime.emitSyncAggregate(\"user-1\", {\n        progressPercent: 50,\n        seq: 1,\n        syncEventsProcessed: 5,\n        syncEventsRemaining: 5,\n        syncEventsTotal: 10,\n        syncing: false,\n      });\n\n      expect(broadcasts).toHaveLength(1);\n      const [firstBroadcast] = broadcasts;\n      expect(firstBroadcast).toBeDefined();\n      if (!firstBroadcast) {\n        throw new TypeError(\"Expected first broadcast\");\n      }\n      const { data: broadcastData } = firstBroadcast;\n      expect(isRecord(broadcastData)).toBe(true);\n      if (!isRecord(broadcastData)) {\n        throw new TypeError(\"Expected broadcast data object\");\n      }\n      expect(broadcastData.seq).toBe(1);\n\n      const stored = redis.get(\"sync:aggregate:latest:user-1\");\n      expect(stored).toBeDefined();\n    });\n\n    it(\"stores syncing aggregate in redis latest cache for fresh reconnects\", async () => {\n      const redis = createMockRedis();\n      const broadcasts: { data: unknown; eventName: string; userId: string }[] = [];\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: (userId, eventName, data) => {\n          broadcasts.push({ data, eventName, userId });\n        },\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: redis,\n      });\n\n      await runtime.emitSyncAggregate(\"user-1\", {\n        progressPercent: 50,\n        seq: 1,\n        syncEventsProcessed: 5,\n        syncEventsRemaining: 5,\n        syncEventsTotal: 10,\n        syncing: true,\n      });\n\n      expect(broadcasts).toHaveLength(1);\n      expect(redis.get(\"sync:aggregate:latest:user-1\")).toBeDefined();\n      expect(redis.get(\"sync:aggregate:seq:user-1\")).resolves.toBe(\"1\");\n    });\n\n    it(\"still broadcasts even if redis fails\", async () => {\n      const broadcasts: { data: unknown; eventName: string; userId: string }[] = [];\n      const failingRedis = createMockRedis();\n      failingRedis.incr = (() => Promise.reject(new Error(\"redis down\"))) satisfies typeof failingRedis.incr;\n\n      const runtime = createSyncAggregateRuntime({\n        broadcast: (userId, eventName, data) => {\n          broadcasts.push({ data, eventName, userId });\n        },\n        persistSyncStatus: ignorePersistSyncStatus,\n        redis: failingRedis,\n      });\n\n      const aggregate = {\n        progressPercent: 50,\n        seq: 1,\n        syncEventsProcessed: 5,\n        syncEventsRemaining: 5,\n        syncEventsTotal: 10,\n        syncing: true,\n      };\n\n      await runtime.emitSyncAggregate(\"user-1\", aggregate);\n\n      expect(broadcasts).toHaveLength(1);\n      const [firstBroadcast] = broadcasts;\n      expect(firstBroadcast).toBeDefined();\n      if (!firstBroadcast) {\n        throw new TypeError(\"Expected first broadcast\");\n      }\n      expect(firstBroadcast.data).toEqual(aggregate);\n    });\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/sync/aggregate-tracker.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { SyncAggregateTracker } from \"../../../src/core/sync/aggregate-tracker\";\nimport type { DestinationSyncResult, SyncProgressUpdate } from \"../../../src/core/sync/types\";\n\nconst createProgressUpdate = (\n  overrides: Partial<SyncProgressUpdate> = {},\n): SyncProgressUpdate => ({\n  calendarId: \"cal-1\",\n  inSync: false,\n  localEventCount: 0,\n  remoteEventCount: 0,\n  stage: \"fetching\",\n  status: \"syncing\",\n  userId: \"user-1\",\n  ...overrides,\n});\n\nconst createDestinationResult = (\n  overrides: Partial<DestinationSyncResult> = {},\n): DestinationSyncResult => ({\n  calendarId: \"cal-1\",\n  localEventCount: 5,\n  remoteEventCount: 5,\n  userId: \"user-1\",\n  ...overrides,\n});\n\nconst requireAggregateMessage = <\n  TMessage extends ReturnType<SyncAggregateTracker[\"trackProgress\"]>,\n>(\n  value: TMessage,\n): NonNullable<TMessage> => {\n  expect(value).not.toBeNull();\n  if (!value) {\n    throw new TypeError(\"Expected aggregate message\");\n  }\n  return value;\n};\n\ndescribe(\"SyncAggregateTracker\", () => {\n  describe(\"getCurrentAggregate\", () => {\n    it(\"returns idle snapshot with 100% when no progress tracked\", () => {\n      const tracker = new SyncAggregateTracker();\n      const result = tracker.getCurrentAggregate(\"user-1\");\n\n      expect(result).toEqual({\n        progressPercent: 100,\n        seq: 0,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n        syncing: false,\n      });\n    });\n\n    it(\"uses fallback values when provided and no progress tracked\", () => {\n      const tracker = new SyncAggregateTracker();\n      const result = tracker.getCurrentAggregate(\"user-1\", {\n        progressPercent: 50,\n        syncEventsProcessed: 5,\n        syncEventsRemaining: 5,\n        syncEventsTotal: 10,\n      });\n\n      expect(result.progressPercent).toBe(50);\n      expect(result.syncEventsTotal).toBe(10);\n      expect(result.syncing).toBe(false);\n    });\n  });\n\n  describe(\"trackProgress\", () => {\n    it(\"emits a message on first progress update\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n      const result = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 0, total: 10 } }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.syncing).toBe(true);\n      expect(aggregateMessage.syncEventsTotal).toBe(10);\n      expect(aggregateMessage.syncEventsProcessed).toBe(0);\n      expect(aggregateMessage.syncEventsRemaining).toBe(10);\n      expect(aggregateMessage.seq).toBe(1);\n    });\n\n    it(\"increments sequence number on each emitted message\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 0, total: 10 } }),\n      );\n      const second = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 5, total: 10 } }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(second);\n      expect(aggregateMessage.seq).toBe(2);\n    });\n\n    it(\"aggregates progress across multiple calendars\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-1\",\n          progress: { current: 3, total: 10 },\n        }),\n      );\n\n      const result = tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-2\",\n          progress: { current: 2, total: 5 },\n        }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.syncEventsProcessed).toBe(5);\n      expect(aggregateMessage.syncEventsTotal).toBe(15);\n      expect(aggregateMessage.syncEventsRemaining).toBe(10);\n    });\n\n    it(\"clamps processed count to not exceed total\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n      const result = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 15, total: 10 } }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.syncEventsProcessed).toBe(10);\n      expect(aggregateMessage.syncEventsRemaining).toBe(0);\n    });\n\n    it(\"clamps negative processed count to zero\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n      const result = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: -5, total: 10 } }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.syncEventsProcessed).toBe(0);\n    });\n\n    it(\"returns null when payload is identical to last emission\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 5, total: 10 } }),\n      );\n      const result = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 5, total: 10 } }),\n      );\n\n      expect(result).toBeNull();\n    });\n\n    it(\"throttles syncing progress updates within the throttle window\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 10_000 });\n\n      const first = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 0, total: 10 } }),\n      );\n      const second = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 5, total: 10 } }),\n      );\n\n      expect(first).not.toBeNull();\n      expect(second).toBeNull();\n    });\n\n    it(\"marks status as error when update status is error\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n      tracker.trackProgress(\n        createProgressUpdate({\n          progress: { current: 3, total: 10 },\n          status: \"error\",\n        }),\n      );\n\n      const aggregate = tracker.getCurrentAggregate(\"user-1\");\n      expect(aggregate.syncing).toBe(false);\n    });\n\n    it(\"shows up-to-date when syncing with zero total\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n      const result = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 0, total: 0 } }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.progressPercent).toBe(0);\n      expect(aggregateMessage.syncing).toBe(false);\n    });\n\n    it(\"isolates progress between different users\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          progress: { current: 5, total: 10 },\n          userId: \"user-1\",\n        }),\n      );\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          progress: { current: 2, total: 8 },\n          userId: \"user-2\",\n        }),\n      );\n\n      const user1 = tracker.getCurrentAggregate(\"user-1\");\n      const user2 = tracker.getCurrentAggregate(\"user-2\");\n\n      expect(user1.syncEventsTotal).toBe(10);\n      expect(user2.syncEventsTotal).toBe(8);\n    });\n  });\n\n  describe(\"trackDestinationSync\", () => {\n    it(\"finalizes calendar progress to idle with full completion\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-1\",\n          progress: { current: 5, total: 10 },\n        }),\n      );\n\n      const result = tracker.trackDestinationSync(\n        createDestinationResult({ calendarId: \"cal-1\" }),\n        \"2026-03-08T12:00:00.000Z\",\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.syncing).toBe(false);\n      expect(aggregateMessage.syncEventsProcessed).toBe(10);\n      expect(aggregateMessage.syncEventsRemaining).toBe(0);\n      expect(aggregateMessage.lastSyncedAt).toBe(\"2026-03-08T12:00:00.000Z\");\n    });\n\n    it(\"keeps syncing true when other calendars are still syncing\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-1\",\n          progress: { current: 5, total: 10 },\n        }),\n      );\n      tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-2\",\n          progress: { current: 2, total: 8 },\n        }),\n      );\n\n      const result = tracker.trackDestinationSync(\n        createDestinationResult({ calendarId: \"cal-1\" }),\n        \"2026-03-08T12:00:00.000Z\",\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.syncing).toBe(true);\n    });\n\n    it(\"is not throttled like progress updates\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 10_000 });\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-1\",\n          progress: { current: 5, total: 10 },\n        }),\n      );\n\n      const result = tracker.trackDestinationSync(\n        createDestinationResult({ calendarId: \"cal-1\" }),\n        \"2026-03-08T12:00:00.000Z\",\n      );\n\n      expect(result).not.toBeNull();\n    });\n  });\n\n  describe(\"calculatePercent\", () => {\n    it(\"returns 100% when not syncing and total is zero\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n\n      tracker.trackProgress(\n        createProgressUpdate({\n          calendarId: \"cal-1\",\n          progress: { current: 0, total: 0 },\n        }),\n      );\n\n      const result = tracker.trackDestinationSync(\n        createDestinationResult({ calendarId: \"cal-1\" }),\n        \"2026-03-08T12:00:00.000Z\",\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.progressPercent).toBe(100);\n      expect(aggregateMessage.syncing).toBe(false);\n    });\n\n    it(\"calculates correct percentage for partial progress\", () => {\n      const tracker = new SyncAggregateTracker({ progressThrottleMs: 0 });\n      const result = tracker.trackProgress(\n        createProgressUpdate({ progress: { current: 3, total: 12 } }),\n      );\n\n      const aggregateMessage = requireAggregateMessage(result);\n      expect(aggregateMessage.progressPercent).toBe(25);\n    });\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/sync/operations.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { buildRemoveOperations } from \"../../../src/core/sync/operations\";\nimport type { EventMapping } from \"../../../src/core/events/mappings\";\nimport type { RemoteEvent } from \"../../../src/core/types\";\n\nconst createEventMapping = (overrides: Partial<EventMapping>): EventMapping => ({\n  calendarId: \"destination-calendar-id\",\n  deleteIdentifier: \"delete-identifier-1\",\n  destinationEventUid: \"destination-uid-1\",\n  endTime: new Date(\"2026-03-08T15:00:00.000Z\"),\n  eventStateId: \"event-state-id-1\",\n  id: \"mapping-id-1\",\n  startTime: new Date(\"2026-03-08T14:00:00.000Z\"),\n  syncEventHash: \"hash-1\",\n  ...overrides,\n});\n\nconst createRemoteEvent = (overrides: Partial<RemoteEvent>): RemoteEvent => ({\n  deleteId: \"remote-delete-id-1\",\n  endTime: new Date(\"2026-03-08T15:00:00.000Z\"),\n  isKeeperEvent: false,\n  startTime: new Date(\"2026-03-08T14:00:00.000Z\"),\n  uid: \"remote-uid-1\",\n  ...overrides,\n});\n\ndescribe(\"buildRemoveOperations\", () => {\n  it(\"does not remove mapped events from before the sync window\", () => {\n    const historicalMapping = createEventMapping({\n      destinationEventUid: \"historical-uid\",\n      eventStateId: \"historical-event-state-id\",\n      id: \"historical-mapping-id\",\n      startTime: new Date(\"2026-03-07T10:00:00.000Z\"),\n    });\n\n    const operations = buildRemoveOperations(\n      [historicalMapping],\n      [],\n      new Set<string>(),\n      new Set<string>(),\n      {\n        now: new Date(\"2026-03-08T12:00:00.000Z\"),\n        syncWindowStart: new Date(\"2026-03-08T00:00:00.000Z\"),\n      },\n    );\n\n    expect(operations).toHaveLength(0);\n  });\n\n  it(\"removes missing mapped events from inside the sync window\", () => {\n    const futureMapping = createEventMapping({\n      deleteIdentifier: \"future-delete-id\",\n      destinationEventUid: \"future-uid\",\n      eventStateId: \"future-event-state-id\",\n      id: \"future-mapping-id\",\n      startTime: new Date(\"2026-03-08T13:00:00.000Z\"),\n    });\n\n    const operations = buildRemoveOperations(\n      [futureMapping],\n      [],\n      new Set<string>(),\n      new Set<string>(),\n      {\n        now: new Date(\"2026-03-08T12:00:00.000Z\"),\n        syncWindowStart: new Date(\"2026-03-08T00:00:00.000Z\"),\n      },\n    );\n\n    expect(operations).toHaveLength(1);\n    expect(operations[0]).toEqual({\n      deleteId: \"future-delete-id\",\n      startTime: new Date(\"2026-03-08T13:00:00.000Z\"),\n      type: \"remove\",\n      uid: \"future-uid\",\n    });\n  });\n\n  it(\"removes orphaned keeper events even when in the future\", () => {\n    const orphanedKeeperEvent = createRemoteEvent({\n      deleteId: \"orphaned-delete-id\",\n      isKeeperEvent: true,\n      startTime: new Date(\"2026-03-08T18:00:00.000Z\"),\n      uid: \"orphaned-uid\",\n    });\n\n    const operations = buildRemoveOperations(\n      [],\n      [orphanedKeeperEvent],\n      new Set<string>(),\n      new Set<string>(),\n      {\n        now: new Date(\"2026-03-08T12:00:00.000Z\"),\n        syncWindowStart: new Date(\"2026-03-08T00:00:00.000Z\"),\n      },\n    );\n\n    expect(operations).toHaveLength(1);\n    expect(operations[0]).toEqual({\n      deleteId: \"orphaned-delete-id\",\n      startTime: new Date(\"2026-03-08T18:00:00.000Z\"),\n      type: \"remove\",\n      uid: \"orphaned-uid\",\n    });\n  });\n\n  it(\"does not remove unmapped non-keeper future events\", () => {\n    const futureRemoteEvent = createRemoteEvent({\n      deleteId: \"future-remote-delete-id\",\n      isKeeperEvent: false,\n      startTime: new Date(\"2026-03-08T18:00:00.000Z\"),\n      uid: \"future-remote-uid\",\n    });\n\n    const operations = buildRemoveOperations(\n      [],\n      [futureRemoteEvent],\n      new Set<string>(),\n      new Set<string>(),\n      {\n        now: new Date(\"2026-03-08T12:00:00.000Z\"),\n        syncWindowStart: new Date(\"2026-03-08T00:00:00.000Z\"),\n      },\n    );\n\n    expect(operations).toHaveLength(0);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/sync-engine/index.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { executeRemoteOperations } from \"../../../src/core/sync-engine/index\";\nimport type { SyncOperation, PushResult, DeleteResult, SyncableEvent } from \"../../../src/core/types\";\nimport type { EventMapping } from \"../../../src/core/events/mappings\";\nimport type { PendingChanges } from \"../../../src/core/sync-engine/types\";\n\nconst makeEvent = (id: string, startTime: Date, endTime: Date): SyncableEvent => ({\n  id,\n  sourceEventUid: `uid-${id}`,\n  startTime,\n  endTime,\n  summary: `Event ${id}`,\n  calendarId: \"cal-1\",\n  calendarName: \"Test Calendar\",\n  calendarUrl: null,\n});\n\nconst makeMapping = (id: string, eventStateId: string, destinationEventUid: string): EventMapping => ({\n  id,\n  eventStateId,\n  calendarId: \"dest-cal-1\",\n  destinationEventUid,\n  deleteIdentifier: destinationEventUid,\n  syncEventHash: null,\n  startTime: new Date(\"2026-03-15T09:00:00Z\"),\n  endTime: new Date(\"2026-03-15T10:00:00Z\"),\n});\n\nconst makeProvider = (overrides: Partial<{\n  pushEvents: (events: SyncableEvent[]) => Promise<PushResult[]>;\n  deleteEvents: (eventIds: string[]) => Promise<DeleteResult[]>;\n  listRemoteEvents: () => Promise<never[]>;\n}> = {}) => ({\n  pushEvents: overrides.pushEvents ?? (() => Promise.resolve([])),\n  deleteEvents: overrides.deleteEvents ?? (() => Promise.resolve([])),\n  listRemoteEvents: overrides.listRemoteEvents ?? (() => Promise.resolve([])),\n});\n\ndescribe(\"executeRemoteOperations\", () => {\n  it(\"accumulates mapping inserts from successful pushes\", async () => {\n    const event = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event }];\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\" }]) });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.added).toBe(1);\n    expect(outcome.result.addFailed).toBe(0);\n    expect(outcome.changes.inserts).toHaveLength(1);\n    expect(outcome.changes.inserts[0]?.eventStateId).toBe(\"ev-1\");\n    expect(outcome.changes.inserts[0]?.destinationEventUid).toBe(\"remote-1\");\n    expect(outcome.changes.deletes).toHaveLength(0);\n  });\n\n  it(\"accumulates mapping deletes from successful removes\", async () => {\n    const mapping = makeMapping(\"map-1\", \"ev-1\", \"remote-1\");\n    const operations: SyncOperation[] = [{ type: \"remove\", uid: \"remote-1\", deleteId: \"remote-1\", startTime: new Date(\"2026-03-15T09:00:00Z\") }];\n    const provider = makeProvider({ deleteEvents: () => Promise.resolve([{ success: true }]) });\n\n    const outcome = await executeRemoteOperations(operations, [mapping], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.removed).toBe(1);\n    expect(outcome.result.removeFailed).toBe(0);\n    expect(outcome.changes.deletes).toHaveLength(1);\n    expect(outcome.changes.deletes[0]).toBe(\"map-1\");\n    expect(outcome.changes.inserts).toHaveLength(0);\n  });\n\n  it(\"counts failed pushes without accumulating changes\", async () => {\n    const event = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event }];\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: false, error: \"rate limited\" }]) });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.added).toBe(0);\n    expect(outcome.result.addFailed).toBe(1);\n    expect(outcome.changes.inserts).toHaveLength(0);\n  });\n\n  it(\"treats success without remoteId as a skip, not a failure\", async () => {\n    const event = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event }];\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true }]) });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.added).toBe(0);\n    expect(outcome.result.addFailed).toBe(0);\n    expect(outcome.changes.inserts).toHaveLength(0);\n  });\n\n  it(\"counts failed deletes without accumulating changes\", async () => {\n    const mapping = makeMapping(\"map-1\", \"ev-1\", \"remote-1\");\n    const operations: SyncOperation[] = [{ type: \"remove\", uid: \"remote-1\", deleteId: \"remote-1\", startTime: new Date(\"2026-03-15T09:00:00Z\") }];\n    const provider = makeProvider({ deleteEvents: () => Promise.resolve([{ success: false, error: \"server error\" }]) });\n\n    const outcome = await executeRemoteOperations(operations, [mapping], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.removed).toBe(0);\n    expect(outcome.result.removeFailed).toBe(1);\n    expect(outcome.changes.deletes).toHaveLength(0);\n  });\n\n  it(\"processes mixed add and remove operations in order\", async () => {\n    const event = makeEvent(\"ev-2\", new Date(\"2026-03-16T09:00:00Z\"), new Date(\"2026-03-16T10:00:00Z\"));\n    const mapping = makeMapping(\"map-1\", \"ev-1\", \"remote-1\");\n    const operations: SyncOperation[] = [\n      { type: \"remove\", uid: \"remote-1\", deleteId: \"remote-1\", startTime: new Date(\"2026-03-15T09:00:00Z\") },\n      { type: \"add\", event },\n    ];\n    const provider = makeProvider({\n      pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-2\" }]),\n      deleteEvents: () => Promise.resolve([{ success: true }]),\n    });\n\n    const outcome = await executeRemoteOperations(operations, [mapping], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.added).toBe(1);\n    expect(outcome.result.removed).toBe(1);\n    expect(outcome.changes.inserts).toHaveLength(1);\n    expect(outcome.changes.deletes).toHaveLength(1);\n  });\n\n  it(\"uses remoteId as deleteIdentifier fallback when pushResult has no deleteId\", async () => {\n    const event = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event }];\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\" }]) });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider);\n\n\n    expect(outcome.changes.inserts[0]?.deleteIdentifier).toBe(\"remote-1\");\n  });\n\n  it(\"uses explicit deleteId from pushResult when provided\", async () => {\n    const event = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event }];\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\", deleteId: \"delete-key-1\" }]) });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider);\n\n\n    expect(outcome.changes.inserts[0]?.deleteIdentifier).toBe(\"delete-key-1\");\n  });\n\n  it(\"returns empty result for zero operations\", async () => {\n    const provider = makeProvider();\n\n    const outcome = await executeRemoteOperations([], [], \"dest-cal-1\", provider);\n\n\n    expect(outcome.result.added).toBe(0);\n    expect(outcome.result.removed).toBe(0);\n    expect(outcome.changes.inserts).toHaveLength(0);\n    expect(outcome.changes.deletes).toHaveLength(0);\n  });\n\n  it(\"still pushes adds but marks superseded when generation is stale\", async () => {\n    const event1 = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event: event1 }];\n\n    let pushCount = 0;\n    const provider = makeProvider({\n      pushEvents: () => {\n        pushCount += 1;\n        return Promise.resolve([{ success: true, remoteId: \"remote-1\" }]);\n      },\n    });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider, () => Promise.resolve(false));\n\n    expect(outcome.superseded).toBe(true);\n    expect(pushCount).toBe(1);\n    expect(outcome.changes.inserts).toHaveLength(1);\n  });\n\n  it(\"skips deletes but returns partial add changes when superseded between adds and deletes\", async () => {\n    const event1 = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const mapping = makeMapping(\"map-1\", \"ev-1\", \"remote-1\");\n    const operations: SyncOperation[] = [\n      { type: \"add\", event: event1 },\n      { type: \"remove\", uid: \"remote-1\", deleteId: \"remote-1\", startTime: new Date(\"2026-03-15T09:00:00Z\") },\n    ];\n\n    let deleteCount = 0;\n    const provider = makeProvider({\n      pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-new\" }]),\n      deleteEvents: () => {\n        deleteCount += 1;\n        return Promise.resolve([{ success: true }]);\n      },\n    });\n\n    const outcome = await executeRemoteOperations(operations, [mapping], \"dest-cal-1\", provider, () => Promise.resolve(false));\n\n    expect(outcome.superseded).toBe(true);\n    expect(outcome.changes.inserts).toHaveLength(1);\n    expect(outcome.changes.deletes).toHaveLength(0);\n    expect(deleteCount).toBe(0);\n  });\n\n  it(\"processes all operations when generation stays current\", async () => {\n    const event1 = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const event2 = makeEvent(\"ev-2\", new Date(\"2026-03-16T09:00:00Z\"), new Date(\"2026-03-16T10:00:00Z\"));\n    const operations: SyncOperation[] = [{ type: \"add\", event: event1 }, { type: \"add\", event: event2 }];\n    const provider = makeProvider({\n      pushEvents: (events) => Promise.resolve(events.map((_ev, idx) => ({ success: true, remoteId: `remote-${idx}` }))),\n    });\n\n    const outcome = await executeRemoteOperations(operations, [], \"dest-cal-1\", provider, () => Promise.resolve(true));\n\n\n    expect(outcome.result.added).toBe(2);\n    expect(outcome.changes.inserts).toHaveLength(2);\n  });\n});\n\ndescribe(\"syncCalendar\", () => {\n  it(\"pushes new events and flushes accumulated changes at the end\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const localEvent = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\" }]) });\n\n    const flushCapture: PendingChanges[] = [];\n\n    const result = await syncCalendar({\n      userId: \"user-1\",\n      calendarId: \"dest-cal-1\",\n      provider,\n      readState: () => Promise.resolve({ localEvents: [localEvent], existingMappings: [], remoteEvents: [] }),\n      isCurrent: () => Promise.resolve(true),\n      flush: (changes) => { flushCapture.push(changes); return Promise.resolve(); },\n    });\n\n    expect(result.added).toBe(1);\n    expect(result.addFailed).toBe(0);\n    expect(flushCapture).toHaveLength(1);\n    expect(flushCapture[0]?.inserts).toHaveLength(1);\n    expect(flushCapture[0]?.inserts[0]?.destinationEventUid).toBe(\"remote-1\");\n  });\n\n  it(\"flushes partial changes even when superseded after remote operations\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const localEvent = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\" }]) });\n\n    let flushCalled = false;\n    let checkCount = 0;\n\n    const result = await syncCalendar({\n      userId: \"user-1\",\n      calendarId: \"dest-cal-1\",\n      provider,\n      readState: () => Promise.resolve({ localEvents: [localEvent], existingMappings: [], remoteEvents: [] }),\n      isCurrent: () => { checkCount += 1; return Promise.resolve(checkCount <= 1); },\n      flush: () => { flushCalled = true; return Promise.resolve(); },\n    });\n\n    expect(result.added).toBe(1);\n    expect(flushCalled).toBe(true);\n  });\n\n  it(\"returns empty result when there are no operations\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const provider = makeProvider();\n    let flushCalled = false;\n\n    const result = await syncCalendar({\n      userId: \"user-1\",\n      calendarId: \"dest-cal-1\",\n      provider,\n      readState: () => Promise.resolve({ localEvents: [], existingMappings: [], remoteEvents: [] }),\n      isCurrent: () => Promise.resolve(true),\n      flush: () => { flushCalled = true; return Promise.resolve(); },\n    });\n\n    expect(result.added).toBe(0);\n    expect(result.removed).toBe(0);\n    expect(flushCalled).toBe(false);\n  });\n\n  it(\"emits a wide event with sync context when onSyncEvent is provided\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const localEvent = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\" }]) });\n\n    const emittedEvents: Record<string, unknown>[] = [];\n\n    await syncCalendar({\n      userId: \"user-1\",\n      calendarId: \"dest-cal-1\",\n      provider,\n      readState: () => Promise.resolve({ localEvents: [localEvent], existingMappings: [], remoteEvents: [] }),\n      isCurrent: () => Promise.resolve(true),\n      flush: () => Promise.resolve(),\n      onSyncEvent: (event) => { emittedEvents.push(event); },\n    });\n\n    expect(emittedEvents).toHaveLength(1);\n\n    const [event] = emittedEvents;\n    expect(event?.[\"calendar.id\"]).toBe(\"dest-cal-1\");\n    expect(event?.[\"local_events.count\"]).toBe(1);\n    expect(event?.[\"remote_events.count\"]).toBe(0);\n    expect(event?.[\"existing_mappings.count\"]).toBe(0);\n    expect(event?.[\"operations.add_count\"]).toBe(1);\n    expect(event?.[\"operations.remove_count\"]).toBe(0);\n    expect(event?.[\"events.added\"]).toBe(1);\n    expect(event?.[\"events.add_failed\"]).toBe(0);\n    expect(event?.[\"events.removed\"]).toBe(0);\n    expect(event?.[\"events.remove_failed\"]).toBe(0);\n    expect(event?.[\"outcome\"]).toBe(\"success\");\n    expect(event?.[\"flushed\"]).toBe(true);\n    expect(typeof event?.[\"duration_ms\"]).toBe(\"number\");\n  });\n\n  it(\"emits a wide event with outcome superseded but flushed when generation becomes stale\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const localEvent = makeEvent(\"ev-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const provider = makeProvider({ pushEvents: () => Promise.resolve([{ success: true, remoteId: \"remote-1\" }]) });\n\n    const emittedEvents: Record<string, unknown>[] = [];\n    let checkCount = 0;\n\n    await syncCalendar({\n      userId: \"user-1\",\n      calendarId: \"dest-cal-1\",\n      provider,\n      readState: () => Promise.resolve({ localEvents: [localEvent], existingMappings: [], remoteEvents: [] }),\n      isCurrent: () => { checkCount += 1; return Promise.resolve(checkCount <= 1); },\n      flush: () => Promise.resolve(),\n      onSyncEvent: (event) => { emittedEvents.push(event); },\n    });\n\n    expect(emittedEvents).toHaveLength(1);\n    expect(emittedEvents[0]?.[\"outcome\"]).toBe(\"superseded\");\n    expect(emittedEvents[0]?.[\"flushed\"]).toBe(true);\n  });\n\n  it(\"emits a wide event with outcome in-sync when there are no operations\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const provider = makeProvider();\n\n    const emittedEvents: Record<string, unknown>[] = [];\n\n    await syncCalendar({\n      userId: \"user-1\",\n      calendarId: \"dest-cal-1\",\n      provider,\n      readState: () => Promise.resolve({ localEvents: [], existingMappings: [], remoteEvents: [] }),\n      isCurrent: () => Promise.resolve(true),\n      flush: () => Promise.resolve(),\n      onSyncEvent: (event) => { emittedEvents.push(event); },\n    });\n\n    expect(emittedEvents).toHaveLength(1);\n    expect(emittedEvents[0]?.[\"outcome\"]).toBe(\"in-sync\");\n    expect(emittedEvents[0]?.[\"flushed\"]).toBe(false);\n  });\n\n  it(\"emits a wide event with error details when sync throws\", async () => {\n    const { syncCalendar } = await import(\"../../../src/core/sync-engine/index\");\n    const provider = makeProvider();\n\n    const emittedEvents: Record<string, unknown>[] = [];\n\n    try {\n      await syncCalendar({\n        userId: \"user-1\",\n        calendarId: \"dest-cal-1\",\n        provider,\n        readState: () => Promise.reject(new Error(\"db connection failed\")),\n        isCurrent: () => Promise.resolve(true),\n        flush: () => Promise.resolve(),\n        onSyncEvent: (event) => { emittedEvents.push(event); },\n      });\n    } catch {\n      // Expected to throw\n    }\n\n    expect(emittedEvents).toHaveLength(1);\n    expect(emittedEvents[0]?.[\"outcome\"]).toBe(\"error\");\n    expect(emittedEvents[0]?.[\"error.message\"]).toBe(\"db connection failed\");\n    expect(typeof emittedEvents[0]?.[\"duration_ms\"]).toBe(\"number\");\n  });\n});\n\ndescribe(\"createRedisGenerationCheck\", () => {\n  it(\"returns true when the generation counter has not been incremented\", async () => {\n    const { createRedisGenerationCheck } = await import(\"../../../src/core/sync-engine/generation\");\n    type GenerationStore = Parameters<typeof createRedisGenerationCheck>[0];\n\n    let counter = 0;\n    const store: GenerationStore = {\n      incr: () => { counter += 1; return Promise.resolve(counter); },\n      get: () => Promise.resolve(String(counter)),\n    };\n\n    const isCurrent = await createRedisGenerationCheck(store, \"cal-1\");\n    expect(await isCurrent()).toBe(true);\n  });\n\n  it(\"returns false when another caller increments the generation\", async () => {\n    const { createRedisGenerationCheck } = await import(\"../../../src/core/sync-engine/generation\");\n    type GenerationStore = Parameters<typeof createRedisGenerationCheck>[0];\n\n    let counter = 0;\n    const store: GenerationStore = {\n      incr: () => { counter += 1; return Promise.resolve(counter); },\n      get: () => Promise.resolve(String(counter)),\n    };\n\n    const isCurrent = await createRedisGenerationCheck(store, \"cal-1\");\n    counter += 1;\n    expect(await isCurrent()).toBe(false);\n  });\n\n  it(\"sets a TTL on the generation key\", async () => {\n    const { createRedisGenerationCheck, GENERATION_TTL_SECONDS } = await import(\"../../../src/core/sync-engine/generation\");\n    type GenerationStore = Parameters<typeof createRedisGenerationCheck>[0];\n\n    let counter = 0;\n    const expireCalls: { key: string; seconds: number }[] = [];\n    const store: GenerationStore = {\n      incr: () => { counter += 1; return Promise.resolve(counter); },\n      get: () => Promise.resolve(String(counter)),\n      expire: (key, seconds) => { expireCalls.push({ key, seconds }); return Promise.resolve(1); },\n    };\n\n    await createRedisGenerationCheck(store, \"cal-1\");\n\n    expect(expireCalls).toHaveLength(1);\n    expect(expireCalls[0]?.key).toBe(\"sync:gen:cal-1\");\n    expect(expireCalls[0]?.seconds).toBe(GENERATION_TTL_SECONDS);\n  });\n});\n\ndescribe(\"createDatabaseFlush\", () => {\n  it(\"batches all inserts and deletes into a single transaction\", async () => {\n    const { createDatabaseFlush } = await import(\"../../../src/core/sync-engine/flush\");\n    const executedOperations: string[] = [];\n\n    const fakeDatabase = {\n      transaction: (callback: (tx: unknown) => Promise<void>) => {\n        const tx = {\n          insert: () => { executedOperations.push(\"insert\"); return { values: () => ({ onConflictDoNothing: () => Promise.resolve() }) }; },\n          delete: () => { executedOperations.push(\"delete\"); return { where: () => Promise.resolve() }; },\n        };\n        return callback(tx);\n      },\n    };\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({\n      inserts: [{\n        eventStateId: \"ev-1\", calendarId: \"cal-1\", destinationEventUid: \"remote-1\",\n        deleteIdentifier: \"remote-1\", syncEventHash: null,\n        startTime: new Date(\"2026-03-15T09:00:00Z\"), endTime: new Date(\"2026-03-15T10:00:00Z\"),\n      }],\n      deletes: [\"map-1\", \"map-2\"],\n    });\n\n    expect(executedOperations).toEqual([\"delete\", \"insert\"]);\n  });\n\n  it(\"skips delete when there are no deletes\", async () => {\n    const { createDatabaseFlush } = await import(\"../../../src/core/sync-engine/flush\");\n    const executedOperations: string[] = [];\n    const fakeDatabase = {\n      transaction: (callback: (tx: unknown) => Promise<void>) => {\n        const tx = {\n          insert: () => { executedOperations.push(\"insert\"); return { values: () => ({ onConflictDoNothing: () => Promise.resolve() }) }; },\n          delete: () => { executedOperations.push(\"delete\"); return { where: () => Promise.resolve() }; },\n        };\n        return callback(tx);\n      },\n    };\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({\n      inserts: [{\n        eventStateId: \"ev-1\", calendarId: \"cal-1\", destinationEventUid: \"remote-1\",\n        deleteIdentifier: \"remote-1\", syncEventHash: null,\n        startTime: new Date(\"2026-03-15T09:00:00Z\"), endTime: new Date(\"2026-03-15T10:00:00Z\"),\n      }],\n      deletes: [],\n    });\n\n    expect(executedOperations).toEqual([\"insert\"]);\n  });\n\n  it(\"skips insert when there are no inserts\", async () => {\n    const { createDatabaseFlush } = await import(\"../../../src/core/sync-engine/flush\");\n    const executedOperations: string[] = [];\n    const fakeDatabase = {\n      transaction: (callback: (tx: unknown) => Promise<void>) => {\n        const tx = {\n          insert: () => { executedOperations.push(\"insert\"); return { values: () => ({ onConflictDoNothing: () => Promise.resolve() }) }; },\n          delete: () => { executedOperations.push(\"delete\"); return { where: () => Promise.resolve() }; },\n        };\n        return callback(tx);\n      },\n    };\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({ inserts: [], deletes: [\"map-1\"] });\n\n    expect(executedOperations).toEqual([\"delete\"]);\n  });\n\n  it(\"does nothing when changes are empty\", async () => {\n    const { createDatabaseFlush } = await import(\"../../../src/core/sync-engine/flush\");\n    let transactionCalled = false;\n    const fakeDatabase = {\n      transaction: () => { transactionCalled = true; return Promise.resolve(); },\n    };\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({ inserts: [], deletes: [] });\n\n    expect(transactionCalled).toBe(false);\n  });\n\n  it(\"chunks deletes into batches to avoid exceeding parameter limits\", async () => {\n    const { createDatabaseFlush, FLUSH_BATCH_SIZE } = await import(\"../../../src/core/sync-engine/flush\");\n    let deleteCallCount = 0;\n\n    const fakeDatabase = {\n      transaction: (callback: (tx: unknown) => Promise<void>) => {\n        const tx = {\n          insert: () => ({ values: () => Promise.resolve() }),\n          delete: () => { deleteCallCount += 1; return { where: () => Promise.resolve() }; },\n        };\n        return callback(tx);\n      },\n    };\n\n    const deleteIds = Array.from({ length: FLUSH_BATCH_SIZE + 10 }, (_entry, idx) => `map-${idx}`);\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({ inserts: [], deletes: deleteIds });\n\n    expect(deleteCallCount).toBe(2);\n  });\n\n  it(\"chunks inserts into batches to avoid exceeding parameter limits\", async () => {\n    const { createDatabaseFlush, FLUSH_BATCH_SIZE } = await import(\"../../../src/core/sync-engine/flush\");\n    let insertCallCount = 0;\n\n    const fakeDatabase = {\n      transaction: (callback: (tx: unknown) => Promise<void>) => {\n        const tx = {\n          insert: () => {\n            insertCallCount += 1;\n            return { values: () => ({ onConflictDoNothing: () => Promise.resolve() }) };\n          },\n          delete: () => ({ where: () => Promise.resolve() }),\n        };\n        return callback(tx);\n      },\n    };\n\n    const inserts = Array.from({ length: FLUSH_BATCH_SIZE + 10 }, (_entry, idx) => ({\n      eventStateId: `ev-${idx}`, calendarId: \"cal-1\", destinationEventUid: `remote-${idx}`,\n      deleteIdentifier: `remote-${idx}`, syncEventHash: null,\n      startTime: new Date(\"2026-03-15T09:00:00Z\"), endTime: new Date(\"2026-03-15T10:00:00Z\"),\n    }));\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({ inserts, deletes: [] });\n\n    expect(insertCallCount).toBe(2);\n  });\n\n  it(\"calls insert once for multiple inserts using bulk values\", async () => {\n    const { createDatabaseFlush } = await import(\"../../../src/core/sync-engine/flush\");\n    let insertCallCount = 0;\n    let valuesReceived: unknown[] = [];\n\n    const fakeDatabase = {\n      transaction: (callback: (tx: unknown) => Promise<void>) => {\n        const tx = {\n          insert: () => {\n            insertCallCount += 1;\n            return {\n              values: (rows: unknown[]) => { valuesReceived = rows; return { onConflictDoNothing: () => Promise.resolve() }; },\n            };\n          },\n          delete: () => ({ where: () => Promise.resolve() }),\n        };\n        return callback(tx);\n      },\n    };\n\n    const flush = createDatabaseFlush(fakeDatabase as never);\n    await flush({\n      inserts: [\n        {\n          eventStateId: \"ev-1\", calendarId: \"cal-1\", destinationEventUid: \"remote-1\",\n          deleteIdentifier: \"remote-1\", syncEventHash: null,\n          startTime: new Date(\"2026-03-15T09:00:00Z\"), endTime: new Date(\"2026-03-15T10:00:00Z\"),\n        },\n        {\n          eventStateId: \"ev-2\", calendarId: \"cal-1\", destinationEventUid: \"remote-2\",\n          deleteIdentifier: \"remote-2\", syncEventHash: null,\n          startTime: new Date(\"2026-03-16T09:00:00Z\"), endTime: new Date(\"2026-03-16T10:00:00Z\"),\n        },\n      ],\n      deletes: [],\n    });\n\n    expect(insertCallCount).toBe(1);\n    expect(valuesReceived).toHaveLength(2);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/sync-engine/ingest.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport type { SourceEvent } from \"../../../src/core/types\";\n\nconst makeSourceEvent = (uid: string, startTime: Date, endTime: Date): SourceEvent => ({\n  uid,\n  startTime,\n  endTime,\n  title: `Event ${uid}`,\n});\n\ninterface ExistingEvent {\n  id: string;\n  sourceEventUid: string | null;\n  startTime: Date;\n  endTime: Date;\n  availability: string | null;\n  isAllDay: boolean | null;\n  sourceEventType: string | null;\n}\n\ndescribe(\"ingestSource\", () => {\n  it(\"accumulates event inserts from new source events and flushes at the end\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const sourceEvent = makeSourceEvent(\"uid-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n\n    const flushCapture: { inserts: unknown[]; deletes: string[] }[] = [];\n\n    const result = await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [sourceEvent] }),\n      readExistingEvents: () => Promise.resolve([]),\n      flush: (changes) => { flushCapture.push(changes); return Promise.resolve(); },\n    });\n\n    expect(result.eventsAdded).toBe(1);\n    expect(result.eventsRemoved).toBe(0);\n    expect(flushCapture).toHaveLength(1);\n    expect(flushCapture[0]?.inserts).toHaveLength(1);\n  });\n\n  it(\"accumulates event deletes when source events are removed\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const existingEvent: ExistingEvent = {\n      id: \"state-1\",\n      sourceEventUid: \"uid-1\",\n      startTime: new Date(\"2026-03-15T09:00:00Z\"),\n      endTime: new Date(\"2026-03-15T10:00:00Z\"),\n      availability: null,\n      isAllDay: null,\n      sourceEventType: null,\n    };\n\n    const flushCapture: { inserts: unknown[]; deletes: string[] }[] = [];\n\n    const result = await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [] }),\n      readExistingEvents: () => Promise.resolve([existingEvent]),\n      flush: (changes) => { flushCapture.push(changes); return Promise.resolve(); },\n    });\n\n    expect(result.eventsAdded).toBe(0);\n    expect(result.eventsRemoved).toBe(1);\n    expect(flushCapture).toHaveLength(1);\n    expect(flushCapture[0]?.deletes).toHaveLength(1);\n    expect(flushCapture[0]?.deletes[0]).toBe(\"state-1\");\n  });\n\n  it(\"does not flush when there are no changes\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    let flushCalled = false;\n\n    const result = await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [] }),\n      readExistingEvents: () => Promise.resolve([]),\n      flush: () => { flushCalled = true; return Promise.resolve(); },\n    });\n\n    expect(result.eventsAdded).toBe(0);\n    expect(result.eventsRemoved).toBe(0);\n    expect(flushCalled).toBe(false);\n  });\n\n  it(\"includes sync token in flush when provided by fetchEvents\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const sourceEvent = makeSourceEvent(\"uid-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n\n    const flushCapture: { syncToken?: string | null }[] = [];\n\n    await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [sourceEvent], nextSyncToken: \"token-abc\" }),\n      readExistingEvents: () => Promise.resolve([]),\n      flush: (changes) => { flushCapture.push(changes); return Promise.resolve(); },\n    });\n\n    expect(flushCapture[0]?.syncToken).toBe(\"token-abc\");\n  });\n\n  it(\"emits a wide event with ingestion context\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const sourceEvent = makeSourceEvent(\"uid-1\", new Date(\"2026-03-15T09:00:00Z\"), new Date(\"2026-03-15T10:00:00Z\"));\n    const emittedEvents: Record<string, unknown>[] = [];\n\n    await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [sourceEvent] }),\n      readExistingEvents: () => Promise.resolve([]),\n      flush: () => Promise.resolve(),\n      onIngestEvent: (event) => { emittedEvents.push(event); },\n    });\n\n    expect(emittedEvents).toHaveLength(1);\n    expect(emittedEvents[0]?.[\"calendar.id\"]).toBe(\"cal-1\");\n    expect(emittedEvents[0]?.[\"events.added\"]).toBe(1);\n    expect(emittedEvents[0]?.[\"outcome\"]).toBe(\"success\");\n    expect(typeof emittedEvents[0]?.[\"duration_ms\"]).toBe(\"number\");\n  });\n\n  it(\"clears sync token and returns empty result when fullSyncRequired is true\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const existingEvent: ExistingEvent = {\n      id: \"state-1\",\n      sourceEventUid: \"uid-1\",\n      startTime: new Date(\"2026-03-15T09:00:00Z\"),\n      endTime: new Date(\"2026-03-15T10:00:00Z\"),\n      availability: null,\n      isAllDay: null,\n      sourceEventType: null,\n    };\n\n    const flushCapture: { inserts: unknown[]; deletes: string[]; syncToken?: string | null }[] = [];\n\n    const result = await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [], fullSyncRequired: true }),\n      readExistingEvents: () => Promise.resolve([existingEvent]),\n      flush: (changes) => { flushCapture.push(changes); return Promise.resolve(); },\n    });\n\n    expect(result.eventsAdded).toBe(0);\n    expect(result.eventsRemoved).toBe(0);\n    expect(flushCapture).toHaveLength(1);\n    expect(flushCapture[0]?.inserts).toHaveLength(0);\n    expect(flushCapture[0]?.deletes).toHaveLength(0);\n    expect(flushCapture[0]?.syncToken).toBeNull();\n  });\n\n  it(\"flushes sync token even when delta sync yields no event changes\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const flushCapture: { inserts: unknown[]; deletes: string[]; syncToken?: string | null }[] = [];\n\n    const result = await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [], isDeltaSync: true, nextSyncToken: \"token-new\" }),\n      readExistingEvents: () => Promise.resolve([]),\n      flush: (changes) => { flushCapture.push(changes); return Promise.resolve(); },\n    });\n\n    expect(result.eventsAdded).toBe(0);\n    expect(result.eventsRemoved).toBe(0);\n    expect(flushCapture).toHaveLength(1);\n    expect(flushCapture[0]?.inserts).toHaveLength(0);\n    expect(flushCapture[0]?.deletes).toHaveLength(0);\n    expect(flushCapture[0]?.syncToken).toBe(\"token-new\");\n  });\n\n  it(\"does not flush sync token when no changes and no sync token provided\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    let flushCalled = false;\n\n    const result = await ingestSource({\n      calendarId: \"cal-1\",\n      fetchEvents: () => Promise.resolve({ events: [] }),\n      readExistingEvents: () => Promise.resolve([]),\n      flush: () => { flushCalled = true; return Promise.resolve(); },\n    });\n\n    expect(result.eventsAdded).toBe(0);\n    expect(result.eventsRemoved).toBe(0);\n    expect(flushCalled).toBe(false);\n  });\n\n  it(\"emits wide event with flushed: false in error path\", async () => {\n    const { ingestSource } = await import(\"../../../src/core/sync-engine/ingest\");\n\n    const emittedEvents: Record<string, unknown>[] = [];\n\n    try {\n      await ingestSource({\n        calendarId: \"cal-1\",\n        fetchEvents: () => Promise.reject(new Error(\"fetch failed\")),\n        readExistingEvents: () => Promise.resolve([]),\n        flush: () => Promise.resolve(),\n        onIngestEvent: (event) => { emittedEvents.push(event); },\n      });\n    } catch {\n      // Expected to throw\n    }\n\n    expect(emittedEvents).toHaveLength(1);\n    expect(emittedEvents[0]?.[\"outcome\"]).toBe(\"error\");\n    expect(emittedEvents[0]?.[\"flushed\"]).toBe(false);\n    expect(emittedEvents[0]?.[\"error.message\"]).toBe(\"fetch failed\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/core/utils/rate-limiter.test.ts",
    "content": "import {\n  afterEach,\n  beforeEach,\n  describe,\n  expect,\n  it,\n  vi,\n} from \"vitest\";\nimport { RateLimiter } from \"../../../src/core/utils/rate-limiter\";\n\nconst flushAsync = async (): Promise<void> => {\n  for (let tick = 0; tick < 10; tick++) {\n    await Promise.resolve();\n  }\n};\n\nconst resolveValue = <TValue>(value: TValue): Promise<TValue> => {\n  const { promise, resolve } = Promise.withResolvers<TValue>();\n  resolve(value);\n  return promise;\n};\n\nconst readNumericField = (target: object, fieldName: string): number => {\n  const value = Reflect.get(target, fieldName);\n  if (typeof value !== \"number\") {\n    throw new TypeError(`Expected '${fieldName}' to be numeric`);\n  }\n  return value;\n};\n\ndescribe(\"RateLimiter\", () => {\n  describe(\"execute\", () => {\n    beforeEach(() => {\n      vi.useFakeTimers();\n    });\n\n    afterEach(() => {\n      vi.useRealTimers();\n    });\n\n    it(\"resolves with the operation result\", async () => {\n      const limiter = new RateLimiter();\n      const result = await limiter.execute(() => Promise.resolve(\"hello\"));\n      expect(result).toBe(\"hello\");\n    });\n\n    it(\"rejects when the operation throws\", () => {\n      const limiter = new RateLimiter();\n      const error = new Error(\"boom\");\n\n      expect(limiter.execute(() => Promise.reject(error))).rejects.toThrow(\"boom\");\n    });\n\n    it(\"runs operations concurrently up to the concurrency limit\", async () => {\n      const limiter = new RateLimiter({ concurrency: 2 });\n      let concurrentCount = 0;\n      let maxConcurrent = 0;\n\n      const createTask = () =>\n        limiter.execute(async () => {\n          concurrentCount++;\n          maxConcurrent = Math.max(maxConcurrent, concurrentCount);\n          await new Promise((resolve) => { setTimeout(resolve, 50); });\n          concurrentCount--;\n        });\n\n      const allDone = Promise.all([createTask(), createTask(), createTask(), createTask()]);\n\n      vi.advanceTimersByTime(50);\n      await flushAsync();\n      vi.advanceTimersByTime(50);\n      await flushAsync();\n\n      await allDone;\n\n      expect(maxConcurrent).toBe(2);\n    });\n\n    it(\"processes queued tasks after earlier tasks complete\", async () => {\n      const limiter = new RateLimiter({ concurrency: 1 });\n      const order: number[] = [];\n\n      const task1 = limiter.execute(async () => {\n        await new Promise((resolve) => { setTimeout(resolve, 20); });\n        order.push(1);\n      });\n\n      const task2 = limiter.execute(() => {\n        order.push(2);\n        return Promise.resolve();\n      });\n\n      const allDone = Promise.all([task1, task2]);\n\n      vi.advanceTimersByTime(20);\n      await flushAsync();\n\n      await allDone;\n      expect(order).toEqual([1, 2]);\n    });\n  });\n\n  describe(\"rate limiting\", () => {\n    it(\"respects requestsPerMinute by delaying excess requests\", async () => {\n      const limiter = new RateLimiter({ concurrency: 10, requestsPerMinute: 2 });\n      const timestamps: number[] = [];\n\n      const createTask = () =>\n        limiter.execute(() => {\n          timestamps.push(Date.now());\n          return Promise.resolve();\n        });\n\n      await Promise.all([createTask(), createTask()]);\n\n      expect(timestamps).toHaveLength(2);\n    });\n  });\n\n  describe(\"reportRateLimit\", () => {\n    beforeEach(() => {\n      vi.useFakeTimers();\n      vi.setSystemTime(new Date(\"2025-01-01T00:00:00.000Z\"));\n    });\n\n    afterEach(() => {\n      vi.useRealTimers();\n    });\n\n    it(\"delays subsequent requests after a rate limit is reported\", async () => {\n      const limiter = new RateLimiter({ concurrency: 1 });\n\n      await limiter.execute(() => Promise.resolve(\"first\"));\n\n      limiter.reportRateLimit();\n\n      let didComplete = false;\n      const secondOperation = limiter.execute(() => resolveValue(\"second\"));\n      const trackedSecondOperation = secondOperation.then((result) => {\n        didComplete = true;\n        return result;\n      });\n\n      await flushAsync();\n      expect(didComplete).toBe(false);\n\n      vi.advanceTimersByTime(999);\n      await flushAsync();\n      expect(didComplete).toBe(false);\n\n      vi.advanceTimersByTime(1);\n      await trackedSecondOperation;\n      expect(didComplete).toBe(true);\n    });\n\n    it(\"resets backoff after a successful operation\", async () => {\n      const limiter = new RateLimiter({ concurrency: 1 });\n\n      await limiter.execute(() => Promise.resolve(\"warmup\"));\n      limiter.reportRateLimit();\n\n      const backoffOperation = limiter.execute(() => Promise.resolve(\"after-backoff\"));\n      vi.advanceTimersByTime(1000);\n      await backoffOperation;\n\n      let didComplete = false;\n      const fastOperation = limiter.execute(() => resolveValue(\"should-be-fast\"));\n      const trackedFastOperation = fastOperation.then((result) => {\n        didComplete = true;\n        return result;\n      });\n\n      await flushAsync();\n      expect(didComplete).toBe(true);\n      await trackedFastOperation;\n    });\n\n    it(\"doubles backoff on consecutive rate limits up to the maximum\", async () => {\n      const limiter = new RateLimiter({ concurrency: 1 });\n\n      await limiter.execute(() => Promise.resolve(\"warmup\"));\n\n      const firstTimestamp = Date.now();\n      limiter.reportRateLimit();\n      expect(readNumericField(limiter, \"backoffUntil\") - firstTimestamp).toBe(1000);\n      expect(readNumericField(limiter, \"backoffMs\")).toBe(2000);\n\n      const secondTimestamp = Date.now();\n      limiter.reportRateLimit();\n      expect(readNumericField(limiter, \"backoffUntil\") - secondTimestamp).toBe(2000);\n      expect(readNumericField(limiter, \"backoffMs\")).toBe(4000);\n    });\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/diff-events-extended.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { diffEvents } from \"../../../src/ics/utils/diff-events\";\nimport type { EventTimeSlot, StoredEventTimeSlot } from \"../../../src/ics/utils/types\";\n\nconst createEvent = (uid: string, startIso = \"2026-03-08T14:00:00.000Z\"): EventTimeSlot => ({\n  endTime: new Date(\"2026-03-08T14:30:00.000Z\"),\n  startTime: new Date(startIso),\n  uid,\n});\n\nconst toStored = (event: EventTimeSlot, id: string): StoredEventTimeSlot => ({\n  ...event,\n  id,\n});\n\ndescribe(\"diffEvents\", () => {\n  it(\"marks new remote events for addition\", () => {\n    const remote = [createEvent(\"uid-1\"), createEvent(\"uid-2\")];\n    const stored: StoredEventTimeSlot[] = [];\n\n    const result = diffEvents(remote, stored);\n\n    expect(result.toAdd).toHaveLength(2);\n    expect(result.toRemove).toHaveLength(0);\n  });\n\n  it(\"marks stored events missing from remote for removal\", () => {\n    const remote: EventTimeSlot[] = [];\n    const stored = [toStored(createEvent(\"uid-1\"), \"id-1\")];\n\n    const result = diffEvents(remote, stored);\n\n    expect(result.toAdd).toHaveLength(0);\n    expect(result.toRemove).toHaveLength(1);\n    const [removedEvent] = result.toRemove;\n    expect(removedEvent).toBeDefined();\n    if (!removedEvent) {\n      throw new TypeError(\"Expected removed event\");\n    }\n    expect(removedEvent.id).toBe(\"id-1\");\n  });\n\n  it(\"returns empty diff when remote and stored match exactly\", () => {\n    const event = createEvent(\"uid-1\");\n    const result = diffEvents([event], [toStored(event, \"id-1\")]);\n\n    expect(result.toAdd).toHaveLength(0);\n    expect(result.toRemove).toHaveLength(0);\n  });\n\n  it(\"returns empty diff for two empty arrays\", () => {\n    const result = diffEvents([], []);\n    expect(result.toAdd).toHaveLength(0);\n    expect(result.toRemove).toHaveLength(0);\n  });\n\n  it(\"detects time change as add + remove for same uid\", () => {\n    const remote = [createEvent(\"uid-1\", \"2026-03-09T10:00:00.000Z\")];\n    const stored = [toStored(createEvent(\"uid-1\", \"2026-03-08T14:00:00.000Z\"), \"id-1\")];\n\n    const result = diffEvents(remote, stored);\n\n    expect(result.toAdd).toHaveLength(1);\n    expect(result.toRemove).toHaveLength(1);\n  });\n\n  it(\"handles null/undefined timezone by treating them as equivalent\", () => {\n    const remote: EventTimeSlot[] = [createEvent(\"uid-1\")];\n    const stored: StoredEventTimeSlot[] = [\n      toStored(createEvent(\"uid-1\"), \"id-1\"),\n    ];\n\n    const result = diffEvents(remote, stored);\n\n    expect(result.toAdd).toHaveLength(0);\n    expect(result.toRemove).toHaveLength(0);\n  });\n\n  it(\"deduplicates remote events with same identity key\", () => {\n    const event = createEvent(\"uid-1\");\n    const result = diffEvents([event, event], []);\n\n    expect(result.toAdd).toHaveLength(1);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/diff-events.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { diffEvents } from \"../../../src/ics/utils/diff-events\";\nimport type { EventTimeSlot, StoredEventTimeSlot } from \"../../../src/ics/utils/types\";\n\nconst createBaseEvent = (): EventTimeSlot => ({\n  endTime: new Date(\"2026-03-08T14:30:00.000Z\"),\n  startTime: new Date(\"2026-03-08T14:00:00.000Z\"),\n  startTimeZone: \"America/Toronto\",\n  uid: \"event-uid-1\",\n});\n\nconst createStoredEvent = (event: EventTimeSlot): StoredEventTimeSlot => ({\n  ...event,\n  id: \"stored-event-id-1\",\n});\n\ndescribe(\"diffEvents\", () => {\n  it(\"does not diff equivalent recurrence payloads with different key order\", () => {\n    const remoteEvent: EventTimeSlot = {\n      ...createBaseEvent(),\n      recurrenceRule: {\n        byDay: [{ day: \"MO\", occurrence: 1 }],\n        frequency: \"WEEKLY\",\n        until: { date: new Date(\"2026-12-31T00:00:00.000Z\") },\n      },\n    };\n\n    const storedEvent = createStoredEvent({\n      ...createBaseEvent(),\n      recurrenceRule: {\n        frequency: \"WEEKLY\",\n        until: { date: \"2026-12-31T00:00:00.000Z\" },\n        byDay: [{ occurrence: 1, day: \"MO\" }],\n      },\n    });\n\n    const result = diffEvents([remoteEvent], [storedEvent]);\n\n    expect(result.toAdd).toHaveLength(0);\n    expect(result.toRemove).toHaveLength(0);\n  });\n\n  it(\"adds and removes when recurrence payload changes\", () => {\n    const remoteEvent: EventTimeSlot = {\n      ...createBaseEvent(),\n      recurrenceRule: {\n        frequency: \"WEEKLY\",\n        interval: 2,\n      },\n    };\n\n    const storedEvent = createStoredEvent({\n      ...createBaseEvent(),\n      recurrenceRule: {\n        frequency: \"WEEKLY\",\n        interval: 1,\n      },\n    });\n\n    const result = diffEvents([remoteEvent], [storedEvent]);\n\n    expect(result.toAdd).toHaveLength(1);\n    expect(result.toRemove).toHaveLength(1);\n  });\n\n  it(\"adds and removes when timezone changes\", () => {\n    const remoteEvent: EventTimeSlot = {\n      ...createBaseEvent(),\n      startTimeZone: \"America/New_York\",\n    };\n\n    const storedEvent = createStoredEvent(createBaseEvent());\n    const result = diffEvents([remoteEvent], [storedEvent]);\n\n    expect(result.toAdd).toHaveLength(1);\n    expect(result.toRemove).toHaveLength(1);\n  });\n\n  it(\"adds and removes when exception dates change\", () => {\n    const remoteEvent: EventTimeSlot = {\n      ...createBaseEvent(),\n      exceptionDates: [{ date: new Date(\"2026-03-15T14:00:00.000Z\") }],\n    };\n\n    const storedEvent = createStoredEvent({\n      ...createBaseEvent(),\n      exceptionDates: [{ date: \"2026-03-22T14:00:00.000Z\" }],\n    });\n\n    const result = diffEvents([remoteEvent], [storedEvent]);\n\n    expect(result.toAdd).toHaveLength(1);\n    expect(result.toRemove).toHaveLength(1);\n  });\n\n  it(\"adds and removes when availability changes\", () => {\n    const remoteEvent: EventTimeSlot = {\n      ...createBaseEvent(),\n      availability: \"free\",\n    };\n\n    const storedEvent = createStoredEvent({\n      ...createBaseEvent(),\n      availability: \"workingElsewhere\",\n    });\n\n    const result = diffEvents([remoteEvent], [storedEvent]);\n\n    expect(result.toAdd).toHaveLength(1);\n    expect(result.toRemove).toHaveLength(1);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/ics-fixtures.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { fixtureManifest, getFixturePath } from \"@keeper.sh/fixtures\";\nimport { diffEvents } from \"../../../src/ics/utils/diff-events\";\nimport { parseIcsCalendar } from \"../../../src/ics/utils/parse-ics-calendar\";\nimport { parseIcsEvents } from \"../../../src/ics/utils/parse-ics-events\";\nimport type { StoredEventTimeSlot } from \"../../../src/ics/utils/types\";\n\nconst enabledFixtures = fixtureManifest.filter((fixtureSource) => fixtureSource.enabled !== false);\n\nconst recurrenceSignalPattern = /^RRULE:|^EXDATE|^RECURRENCE-ID/m;\n\ndescribe(\"ics fixtures parsing\", () => {\n  for (const fixtureSource of enabledFixtures) {\n    it(`parses ${fixtureSource.id}`, async () => {\n      const fixturePath = getFixturePath(fixtureSource);\n      const icsString = await Bun.file(fixturePath).text();\n\n      const parsedCalendar = parseIcsCalendar({ icsString });\n      const parsedEvents = parseIcsEvents(parsedCalendar);\n\n      expect(parsedEvents.length).toBeGreaterThan(0);\n\n      if (fixtureSource.expected?.containsTimeZone) {\n        const hasTimeZone = parsedEvents.some((event) => Boolean(event.startTimeZone));\n        expect(hasTimeZone).toBe(true);\n      }\n\n      if (fixtureSource.expected?.containsRecurrence) {\n        const hasRecurrenceSignal = recurrenceSignalPattern.test(icsString);\n        expect(hasRecurrenceSignal).toBe(true);\n      }\n    });\n  }\n});\n\ndescribe(\"ics fixtures diff stability\", () => {\n  for (const fixtureSource of enabledFixtures) {\n    it(`produces no diff for equivalent stored events in ${fixtureSource.id}`, async () => {\n      const fixturePath = getFixturePath(fixtureSource);\n      const icsString = await Bun.file(fixturePath).text();\n\n      const parsedCalendar = parseIcsCalendar({ icsString });\n      const parsedEvents = parseIcsEvents(parsedCalendar);\n\n      const storedEvents: StoredEventTimeSlot[] = parsedEvents.map((event, index) => ({\n        ...event,\n        id: `${fixtureSource.id}-stored-${index}`,\n      }));\n\n      const diff = diffEvents(parsedEvents, storedEvents);\n      expect(diff.toAdd).toHaveLength(0);\n      expect(diff.toRemove).toHaveLength(0);\n    });\n  }\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/normalize-timezone.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { normalizeTimezone } from \"../../../src/ics/utils/normalize-timezone\";\n\ndescribe(\"normalizeTimezone\", () => {\n  it(\"returns IANA timezone unchanged\", () => {\n    expect(normalizeTimezone(\"America/New_York\")).toBe(\"America/New_York\");\n  });\n\n  it(\"maps Windows 'UTC' to Etc/UTC\", () => {\n    expect(normalizeTimezone(\"UTC\")).toBe(\"Etc/UTC\");\n  });\n\n  it(\"maps 'Eastern Standard Time' to America/New_York\", () => {\n    expect(normalizeTimezone(\"Eastern Standard Time\")).toBe(\"America/New_York\");\n  });\n\n  it(\"maps 'Central Standard Time' to America/Chicago\", () => {\n    expect(normalizeTimezone(\"Central Standard Time\")).toBe(\"America/Chicago\");\n  });\n\n  it(\"maps 'Pacific Standard Time' to America/Los_Angeles\", () => {\n    expect(normalizeTimezone(\"Pacific Standard Time\")).toBe(\"America/Los_Angeles\");\n  });\n\n  it(\"maps 'Mountain Standard Time' to America/Denver\", () => {\n    expect(normalizeTimezone(\"Mountain Standard Time\")).toBe(\"America/Denver\");\n  });\n\n  it(\"maps 'GMT Standard Time' to Europe/London\", () => {\n    expect(normalizeTimezone(\"GMT Standard Time\")).toBe(\"Europe/London\");\n  });\n\n  it(\"maps 'W. Europe Standard Time' to Europe/Berlin\", () => {\n    expect(normalizeTimezone(\"W. Europe Standard Time\")).toBe(\"Europe/Berlin\");\n  });\n\n  it(\"maps 'Tokyo Standard Time' to Asia/Tokyo\", () => {\n    expect(normalizeTimezone(\"Tokyo Standard Time\")).toBe(\"Asia/Tokyo\");\n  });\n\n  it(\"maps 'AUS Eastern Standard Time' to Australia/Sydney\", () => {\n    expect(normalizeTimezone(\"AUS Eastern Standard Time\")).toBe(\"Australia/Sydney\");\n  });\n\n  it(\"returns undefined for undefined input\", () => {\n    expect(normalizeTimezone(globalThis.undefined)).toBeUndefined();\n  });\n\n  it(\"returns unknown timezone as-is when not in mapping\", () => {\n    expect(normalizeTimezone(\"Invented/Timezone\")).toBe(\"Invented/Timezone\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/outlook-windows-timezone.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { parseIcsCalendar } from \"../../../src/ics/utils/parse-ics-calendar\";\nimport { parseIcsEvents } from \"../../../src/ics/utils/parse-ics-events\";\n\nconst OUTLOOK_ICS_WITH_WINDOWS_TIMEZONES = [\n  \"BEGIN:VCALENDAR\",\n  \"METHOD:PUBLISH\",\n  \"PRODID:Microsoft Exchange Server 2010\",\n  \"VERSION:2.0\",\n  \"BEGIN:VTIMEZONE\",\n  \"TZID:Eastern Standard Time\",\n  \"BEGIN:STANDARD\",\n  \"DTSTART:16010101T020000\",\n  \"TZOFFSETFROM:-0400\",\n  \"TZOFFSETTO:-0500\",\n  \"RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11\",\n  \"END:STANDARD\",\n  \"BEGIN:DAYLIGHT\",\n  \"DTSTART:16010101T020000\",\n  \"TZOFFSETFROM:-0500\",\n  \"TZOFFSETTO:-0400\",\n  \"RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3\",\n  \"END:DAYLIGHT\",\n  \"END:VTIMEZONE\",\n  \"BEGIN:VEVENT\",\n  \"UID:outlook-recurring-event-1\",\n  \"SUMMARY:Weekly Standup\",\n  \"RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO;WKST=MO\",\n  \"DTSTART;TZID=Eastern Standard Time:20260209T140000\",\n  \"DTEND;TZID=Eastern Standard Time:20260209T143000\",\n  \"DTSTAMP:20260314T183308Z\",\n  \"END:VEVENT\",\n  \"END:VCALENDAR\",\n].join(\"\\r\\n\");\n\ndescribe(\"outlook windows timezone ICS parsing\", () => {\n  it(\"normalizes Windows timezone IDs to IANA when parsing events\", () => {\n    const calendar = parseIcsCalendar({ icsString: OUTLOOK_ICS_WITH_WINDOWS_TIMEZONES });\n    const events = parseIcsEvents(calendar);\n\n    expect(events).toHaveLength(1);\n\n    const [event] = events;\n    if (!event) {\n      throw new TypeError(\"Expected parsed event\");\n    }\n\n    expect(event.startTimeZone).toBe(\"America/New_York\");\n    expect(event.uid).toBe(\"outlook-recurring-event-1\");\n    expect(event.recurrenceRule).toBeDefined();\n  });\n\n  it(\"does not return Windows timezone ID as startTimeZone\", () => {\n    const calendar = parseIcsCalendar({ icsString: OUTLOOK_ICS_WITH_WINDOWS_TIMEZONES });\n    const events = parseIcsEvents(calendar);\n\n    for (const event of events) {\n      if (event.startTimeZone) {\n        expect(event.startTimeZone).not.toBe(\"Eastern Standard Time\");\n      }\n    }\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/parse-ics-calendar.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { parseIcsCalendar } from \"../../../src/ics/utils/parse-ics-calendar\";\n\ndescribe(\"parseIcsCalendar\", () => {\n  it(\"parses calendar data with malformed recurrence rules\", () => {\n    const parsedCalendar = parseIcsCalendar({\n      icsString: [\n        \"BEGIN:VCALENDAR\",\n        \"VERSION:2.0\",\n        \"PRODID:-//Keeper Test//EN\",\n        \"BEGIN:VEVENT\",\n        \"UID:malformed-rrule\",\n        \"DTSTART:20260310T090000Z\",\n        \"DTEND:20260310T100000Z\",\n        \"RRULE:FREQ=INVALID\",\n        \"SUMMARY:Malformed RRULE\",\n        \"END:VEVENT\",\n        \"END:VCALENDAR\",\n      ].join(\"\\r\\n\"),\n    });\n\n    expect(parsedCalendar.events?.length).toBe(1);\n    expect(parsedCalendar.events?.[0]?.uid).toBe(\"malformed-rrule\");\n  });\n\n  it(\"throws on malformed timezone blocks\", () => {\n    expect(() =>\n      parseIcsCalendar({\n        icsString: [\n          \"BEGIN:VCALENDAR\",\n          \"VERSION:2.0\",\n          \"PRODID:-//Keeper Test//EN\",\n          \"BEGIN:VTIMEZONE\",\n          \"TZID:America/New_York\",\n          \"BEGIN:STANDARD\",\n          \"DTSTART:INVALID\",\n          \"RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\",\n          \"END:STANDARD\",\n          \"END:VTIMEZONE\",\n          \"BEGIN:VEVENT\",\n          \"UID:event-1\",\n          \"DTSTART;TZID=America/New_York:20260310T090000\",\n          \"DURATION:PT30M\",\n          \"SUMMARY:Timezone Event\",\n          \"END:VEVENT\",\n          \"END:VCALENDAR\",\n        ].join(\"\\r\\n\"),\n      }))\n      .toThrow();\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/ics/utils/parse-ics-events.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { parseIcsCalendar } from \"../../../src/ics/utils/parse-ics-calendar\";\nimport { parseIcsEvents } from \"../../../src/ics/utils/parse-ics-events\";\n\nconst createCalendarIcsString = (): string =>\n  [\n    \"BEGIN:VCALENDAR\",\n    \"VERSION:2.0\",\n    \"PRODID:-//Keeper Test//EN\",\n    \"BEGIN:VEVENT\",\n    \"UID:external-event-1\",\n    \"DTSTART;TZID=America/Toronto:20260310T090000\",\n    \"DURATION:PT30M\",\n    \"SUMMARY:Team Sync\",\n    \"DESCRIPTION:Weekly planning\",\n    \"LOCATION:Room 42\",\n    \"RRULE:FREQ=WEEKLY;BYDAY=TU\",\n    \"EXDATE;TZID=America/Toronto:20260317T090000\",\n    \"END:VEVENT\",\n    \"BEGIN:VEVENT\",\n    \"UID:internal-event@keeper.sh\",\n    \"DTSTART:20260311T100000Z\",\n    \"DTEND:20260311T103000Z\",\n    \"SUMMARY:Internal\",\n    \"END:VEVENT\",\n    \"END:VCALENDAR\",\n  ].join(\"\\r\\n\");\n\ndescribe(\"parseIcsEvents\", () => {\n  it(\"parses external events and skips keeper-managed events\", () => {\n    const calendar = parseIcsCalendar({ icsString: createCalendarIcsString() });\n    const parsedEvents = parseIcsEvents(calendar);\n\n    expect(parsedEvents).toHaveLength(1);\n\n    const [parsedEvent] = parsedEvents;\n    if (!parsedEvent) {\n      throw new TypeError(\"Expected parsed event\");\n    }\n\n    expect(parsedEvent.uid).toBe(\"external-event-1\");\n    expect(parsedEvent.title).toBe(\"Team Sync\");\n    expect(parsedEvent.description).toBe(\"Weekly planning\");\n    expect(parsedEvent.location).toBe(\"Room 42\");\n    expect(parsedEvent.startTimeZone).toBe(\"America/Toronto\");\n    expect(parsedEvent.endTime.getTime() - parsedEvent.startTime.getTime()).toBe(30 * 60 * 1000);\n\n    const { recurrenceRule } = parsedEvent;\n    expect(recurrenceRule).toBeDefined();\n    if (!recurrenceRule || typeof recurrenceRule !== \"object\") {\n      throw new TypeError(\"Expected recurrence rule object\");\n    }\n    expect(\"frequency\" in recurrenceRule && recurrenceRule.frequency).toBe(\"WEEKLY\");\n\n    const { exceptionDates } = parsedEvent;\n    expect(exceptionDates).toBeDefined();\n    expect(Array.isArray(exceptionDates)).toBe(true);\n    if (!Array.isArray(exceptionDates)) {\n      throw new TypeError(\"Expected exception dates array\");\n    }\n    expect(exceptionDates).toHaveLength(1);\n  });\n\n  it(\"keeps duplicate UIDs and preserves adversarial time ranges\", () => {\n    const calendar = parseIcsCalendar({\n      icsString: [\n        \"BEGIN:VCALENDAR\",\n        \"VERSION:2.0\",\n        \"PRODID:-//Keeper Test//EN\",\n        \"BEGIN:VEVENT\",\n        \"UID:duplicate-uid\",\n        \"DTSTART:20260310T090000Z\",\n        \"DTEND:20260310T100000Z\",\n        \"SUMMARY:First\",\n        \"END:VEVENT\",\n        \"BEGIN:VEVENT\",\n        \"UID:duplicate-uid\",\n        \"DTSTART:20991231T235900Z\",\n        \"DTEND:19000101T000000Z\",\n        \"SUMMARY:Second\",\n        \"END:VEVENT\",\n        \"END:VCALENDAR\",\n      ].join(\"\\r\\n\"),\n    });\n\n    const parsedEvents = parseIcsEvents(calendar);\n\n    expect(parsedEvents).toHaveLength(2);\n    expect(parsedEvents[0]?.uid).toBe(\"duplicate-uid\");\n    expect(parsedEvents[1]?.uid).toBe(\"duplicate-uid\");\n    expect(parsedEvents[1]?.endTime.getTime()).toBeLessThan(\n      parsedEvents[1]?.startTime.getTime() ?? Number.POSITIVE_INFINITY,\n    );\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/destination/provider.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\ndescribe(\"createCalDAVSyncProvider\", () => {\n  it(\"returns a provider with pushEvents, deleteEvents, and listRemoteEvents\", async () => {\n    const { createCalDAVSyncProvider } = await import(\"../../../../src/providers/caldav/destination/provider\");\n\n    const provider = createCalDAVSyncProvider({\n      calendarUrl: \"https://caldav.example.com/calendar/\",\n      serverUrl: \"https://caldav.example.com\",\n      username: \"user\",\n      password: \"pass\",\n    });\n\n    expect(typeof provider.pushEvents).toBe(\"function\");\n    expect(typeof provider.deleteEvents).toBe(\"function\");\n    expect(typeof provider.listRemoteEvents).toBe(\"function\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/shared/ics-fixtures.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { fixtureManifest, getFixturePath } from \"@keeper.sh/fixtures\";\nimport { parseICalToRemoteEvent } from \"../../../../src/providers/caldav/shared/ics\";\n\nconst enabledFixtures = fixtureManifest.filter((fixtureSource) => fixtureSource.enabled !== false);\n\ndescribe(\"parseICalToRemoteEvent fixtures\", () => {\n  for (const fixtureSource of enabledFixtures) {\n    it(`parses first event from ${fixtureSource.id}`, async () => {\n      const fixturePath = getFixturePath(fixtureSource);\n      const icsString = await Bun.file(fixturePath).text();\n\n      const parsedEvent = parseICalToRemoteEvent(icsString);\n\n      expect(parsedEvent).not.toBeNull();\n      if (!parsedEvent) {\n        throw new Error(`Expected parsed event for fixture ${fixtureSource.id}`);\n      }\n\n      expect(parsedEvent.uid.length).toBeGreaterThan(0);\n      expect(Number.isNaN(parsedEvent.startTime.getTime())).toBe(false);\n      expect(Number.isNaN(parsedEvent.endTime.getTime())).toBe(false);\n      expect(parsedEvent.endTime.getTime()).toBeGreaterThanOrEqual(parsedEvent.startTime.getTime());\n    });\n  }\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/shared/ics.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { eventToICalString, parseICalToRemoteEvent, parseICalToRemoteEvents } from \"../../../../src/providers/caldav/shared/ics\";\nimport { buildSourceEventsToAdd, buildSourceEventStateIdsToRemove } from \"../../../../src/core/source/event-diff\";\nimport type { SourceEvent } from \"../../../../src/core/types\";\n\nconst buildIcs = (vevents: string[]): string => [\n  \"BEGIN:VCALENDAR\",\n  \"VERSION:2.0\",\n  \"PRODID:-//Test//Test//EN\",\n  ...vevents,\n  \"END:VCALENDAR\",\n].join(\"\\r\\n\");\n\nconst buildVevent = (fields: Record<string, string>): string => [\n  \"BEGIN:VEVENT\",\n  ...Object.entries(fields).map(([key, value]) => `${key}:${value}`),\n  \"END:VEVENT\",\n].join(\"\\r\\n\");\n\nconst toSourceEvent = (parsed: ReturnType<typeof parseICalToRemoteEvents>[number]): SourceEvent => ({\n  availability: parsed.availability,\n  description: parsed.description,\n  endTime: parsed.endTime,\n  exceptionDates: parsed.exceptionDates,\n  isAllDay: parsed.isAllDay,\n  location: parsed.location,\n  recurrenceRule: parsed.recurrenceRule,\n  startTime: parsed.startTime,\n  startTimeZone: parsed.startTimeZone,\n  title: parsed.title,\n  uid: parsed.uid,\n});\n\ndescribe(\"eventToICalString\", () => {\n  it(\"serializes all-day free events as transparent DATE events\", () => {\n    const icsString = eventToICalString(\n      {\n        availability: \"free\",\n        calendarId: \"calendar-id\",\n        calendarName: \"Calendar\",\n        calendarUrl: null,\n        endTime: new Date(\"2026-03-09T00:00:00.000Z\"),\n        id: \"event-id\",\n        sourceEventUid: \"source-uid\",\n        startTime: new Date(\"2026-03-08T00:00:00.000Z\"),\n        summary: \"WFH\",\n      },\n      \"destination-uid\",\n    );\n\n    expect(icsString).toContain(\"DTSTART;VALUE=DATE:20260308\");\n    expect(icsString).toContain(\"DTEND;VALUE=DATE:20260309\");\n    expect(icsString).toContain(\"TRANSP:TRANSPARENT\");\n\n    const parsedEvent = parseICalToRemoteEvent(icsString);\n\n    expect(parsedEvent?.availability).toBe(\"free\");\n    expect(parsedEvent?.startTime.toISOString()).toBe(\"2026-03-08T00:00:00.000Z\");\n    expect(parsedEvent?.endTime.toISOString()).toBe(\"2026-03-09T00:00:00.000Z\");\n  });\n});\n\ndescribe(\"parseICalToRemoteEvents\", () => {\n  it(\"returns both master and modified occurrence from a recurring event\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"recurring-abc\",\n        SUMMARY: \"Weekly Sync\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n        RRULE: \"FREQ=WEEKLY;BYDAY=TU\",\n      }),\n      buildVevent({\n        UID: \"recurring-abc\",\n        SUMMARY: \"Weekly Sync (rescheduled)\",\n        DTSTART: \"20260303T140000Z\",\n        DTEND: \"20260303T150000Z\",\n        \"RECURRENCE-ID\": \"20260303T100000Z\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n\n    expect(events).toHaveLength(2);\n\n    const [master, modified] = events;\n\n    expect(master).toBeDefined();\n    expect(master?.title).toBe(\"Weekly Sync\");\n    expect(master?.recurrenceRule).toBeTruthy();\n    expect(modified).toBeDefined();\n    expect(modified?.title).toBe(\"Weekly Sync (rescheduled)\");\n    expect(modified?.startTime).toEqual(new Date(\"2026-03-03T14:00:00.000Z\"));\n  });\n\n  it(\"returns empty array for calendar with no events\", () => {\n    const events = parseICalToRemoteEvents(buildIcs([]));\n    expect(events).toHaveLength(0);\n  });\n\n  it(\"skips events missing a UID\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        SUMMARY: \"No UID\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n      }),\n      buildVevent({\n        UID: \"valid-uid\",\n        SUMMARY: \"Valid\",\n        DTSTART: \"20260102T100000Z\",\n        DTEND: \"20260102T110000Z\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n    expect(events).toHaveLength(1);\n    expect(events[0]?.uid).toBe(\"valid-uid\");\n  });\n\n  it(\"skips events missing DTSTART\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"no-start\",\n        SUMMARY: \"Missing Start\",\n        DTEND: \"20260101T110000Z\",\n      }),\n      buildVevent({\n        UID: \"has-start\",\n        SUMMARY: \"Has Start\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n    expect(events).toHaveLength(1);\n    expect(events[0]?.uid).toBe(\"has-start\");\n  });\n\n  it(\"preserves availability independently per event\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"busy-event\",\n        SUMMARY: \"Busy\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n      }),\n      buildVevent({\n        UID: \"free-event\",\n        SUMMARY: \"Free\",\n        DTSTART: \"20260102T100000Z\",\n        DTEND: \"20260102T110000Z\",\n        TRANSP: \"TRANSPARENT\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n    expect(events[0]?.availability).toBe(\"busy\");\n    expect(events[1]?.availability).toBe(\"free\");\n  });\n\n  it(\"preserves all-day flag independently per event\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"allday\",\n        SUMMARY: \"All Day\",\n        \"DTSTART;VALUE=DATE\": \"20260308\",\n        \"DTEND;VALUE=DATE\": \"20260309\",\n      }),\n      buildVevent({\n        UID: \"timed\",\n        SUMMARY: \"Timed\",\n        DTSTART: \"20260308T100000Z\",\n        DTEND: \"20260308T110000Z\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n    expect(events[0]?.isAllDay).toBe(true);\n    expect(events[1]?.isAllDay).toBe(false);\n  });\n});\n\ndescribe(\"duplicate prevention with multi-VEVENT parsing\", () => {\n  it(\"modified occurrences with same UID but different times are treated as separate events\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T103000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup (moved to afternoon)\",\n        DTSTART: \"20260108T140000Z\",\n        DTEND: \"20260108T143000Z\",\n        \"RECURRENCE-ID\": \"20260108T100000Z\",\n      }),\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup (cancelled and rebooked)\",\n        DTSTART: \"20260115T150000Z\",\n        DTEND: \"20260115T153000Z\",\n        \"RECURRENCE-ID\": \"20260115T100000Z\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n    const sourceEvents = events.map((event) => toSourceEvent(event));\n    const eventsToAdd = buildSourceEventsToAdd([], sourceEvents);\n\n    expect(eventsToAdd).toHaveLength(3);\n  });\n\n  it(\"re-ingesting the same multi-VEVENT data produces zero new events\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T103000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup (moved)\",\n        DTSTART: \"20260108T140000Z\",\n        DTEND: \"20260108T143000Z\",\n        \"RECURRENCE-ID\": \"20260108T100000Z\",\n      }),\n    ]);\n\n    const events = parseICalToRemoteEvents(ics);\n    const sourceEvents = events.map((event) => toSourceEvent(event));\n\n    const firstIngest = buildSourceEventsToAdd([], sourceEvents);\n    expect(firstIngest).toHaveLength(2);\n\n    const existingAfterFirstIngest = firstIngest.map((event, index) => ({\n      id: `state-${index}`,\n      sourceEventUid: event.uid,\n      startTime: event.startTime,\n      endTime: event.endTime,\n      availability: event.availability,\n      isAllDay: event.isAllDay,\n      sourceEventType: \"default\" as const,\n    }));\n\n    const secondIngest = buildSourceEventsToAdd(existingAfterFirstIngest, sourceEvents);\n    expect(secondIngest).toHaveLength(0);\n  });\n\n  it(\"removing one occurrence does not remove the master or other occurrences\", () => {\n    const allThree = buildIcs([\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T103000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup (moved week 2)\",\n        DTSTART: \"20260108T140000Z\",\n        DTEND: \"20260108T143000Z\",\n        \"RECURRENCE-ID\": \"20260108T100000Z\",\n      }),\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup (moved week 3)\",\n        DTSTART: \"20260115T150000Z\",\n        DTEND: \"20260115T153000Z\",\n        \"RECURRENCE-ID\": \"20260115T100000Z\",\n      }),\n    ]);\n\n    const allEvents = parseICalToRemoteEvents(allThree);\n    const existingStates = allEvents.map((event, index) => ({\n      id: `state-${index}`,\n      sourceEventUid: event.uid,\n      startTime: event.startTime,\n      endTime: event.endTime,\n      availability: event.availability,\n      isAllDay: event.isAllDay,\n      sourceEventType: \"default\" as const,\n    }));\n\n    const withOneRemoved = buildIcs([\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T103000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n      buildVevent({\n        UID: \"weekly-123\",\n        SUMMARY: \"Standup (moved week 2)\",\n        DTSTART: \"20260108T140000Z\",\n        DTEND: \"20260108T143000Z\",\n        \"RECURRENCE-ID\": \"20260108T100000Z\",\n      }),\n    ]);\n\n    const reducedEvents = parseICalToRemoteEvents(withOneRemoved);\n    const reducedSourceEvents = reducedEvents.map((event) => toSourceEvent(event));\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingStates, reducedSourceEvents);\n\n    expect(idsToRemove).toHaveLength(1);\n    expect(idsToRemove[0]).toBe(\"state-2\");\n  });\n});\n\ndescribe(\"transition from old single-event to new multi-event parsing\", () => {\n  it(\"does not duplicate master event already ingested by old code\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"weekly-old\",\n        SUMMARY: \"Legacy Meeting\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n      buildVevent({\n        UID: \"weekly-old\",\n        SUMMARY: \"Legacy Meeting (exception)\",\n        DTSTART: \"20260108T140000Z\",\n        DTEND: \"20260108T150000Z\",\n        \"RECURRENCE-ID\": \"20260108T100000Z\",\n      }),\n    ]);\n\n    const oldCodeResult = parseICalToRemoteEvent(ics);\n    expect(oldCodeResult).not.toBeNull();\n\n    if (!oldCodeResult) {\n      throw new Error(\"Expected parsed event\");\n    }\n\n    const existingFromOldCode = [{\n      id: \"old-state-1\",\n      sourceEventUid: oldCodeResult.uid,\n      startTime: oldCodeResult.startTime,\n      endTime: oldCodeResult.endTime,\n      availability: oldCodeResult.availability,\n      isAllDay: oldCodeResult.isAllDay,\n      sourceEventType: \"default\" as const,\n    }];\n\n    const newCodeResults = parseICalToRemoteEvents(ics);\n    const newSourceEvents = newCodeResults.map((event) => toSourceEvent(event));\n    const eventsToAdd = buildSourceEventsToAdd(existingFromOldCode, newSourceEvents);\n\n    expect(eventsToAdd).toHaveLength(1);\n    expect(eventsToAdd[0]?.title).toBe(\"Legacy Meeting (exception)\");\n  });\n\n  it(\"does not remove master event when transitioning to multi-event parsing\", () => {\n    const ics = buildIcs([\n      buildVevent({\n        UID: \"weekly-transition\",\n        SUMMARY: \"Transition Meeting\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n      buildVevent({\n        UID: \"weekly-transition\",\n        SUMMARY: \"Transition Meeting (moved)\",\n        DTSTART: \"20260108T140000Z\",\n        DTEND: \"20260108T150000Z\",\n        \"RECURRENCE-ID\": \"20260108T100000Z\",\n      }),\n    ]);\n\n    const oldCodeResult = parseICalToRemoteEvent(ics);\n\n    if (!oldCodeResult) {\n      throw new Error(\"Expected parsed event\");\n    }\n\n    const existingFromOldCode = [{\n      id: \"old-state-1\",\n      sourceEventUid: oldCodeResult.uid,\n      startTime: oldCodeResult.startTime,\n      endTime: oldCodeResult.endTime,\n      availability: oldCodeResult.availability,\n      isAllDay: oldCodeResult.isAllDay,\n      sourceEventType: \"default\" as const,\n    }];\n\n    const newCodeResults = parseICalToRemoteEvents(ics);\n    const newSourceEvents = newCodeResults.map((event) => toSourceEvent(event));\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingFromOldCode, newSourceEvents);\n\n    expect(idsToRemove).toHaveLength(0);\n  });\n\n  it(\"transitioning from expanded to unexpanded removes orphaned expanded occurrences\", () => {\n    const expandedOccurrence1 = buildIcs([\n      buildVevent({\n        UID: \"weekly-expanded\",\n        SUMMARY: \"Expanded Meeting\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n      }),\n    ]);\n\n    const expandedOccurrence2 = buildIcs([\n      buildVevent({\n        UID: \"weekly-expanded\",\n        SUMMARY: \"Expanded Meeting\",\n        DTSTART: \"20260108T100000Z\",\n        DTEND: \"20260108T110000Z\",\n      }),\n    ]);\n\n    const parsed1 = parseICalToRemoteEvent(expandedOccurrence1);\n    const parsed2 = parseICalToRemoteEvent(expandedOccurrence2);\n\n    if (!parsed1 || !parsed2) {\n      throw new Error(\"Expected parsed events\");\n    }\n\n    const existingFromExpanded = [parsed1, parsed2].map((event, index) => ({\n      id: `expanded-${index}`,\n      sourceEventUid: event.uid,\n      startTime: event.startTime,\n      endTime: event.endTime,\n      availability: event.availability,\n      isAllDay: event.isAllDay,\n      sourceEventType: \"default\" as const,\n    }));\n\n    const unexpandedIcs = buildIcs([\n      buildVevent({\n        UID: \"weekly-expanded\",\n        SUMMARY: \"Expanded Meeting\",\n        DTSTART: \"20260101T100000Z\",\n        DTEND: \"20260101T110000Z\",\n        RRULE: \"FREQ=WEEKLY\",\n      }),\n    ]);\n\n    const newResults = parseICalToRemoteEvents(unexpandedIcs);\n    const newSourceEvents = newResults.map((event) => toSourceEvent(event));\n\n    const idsToRemove = buildSourceEventStateIdsToRemove(existingFromExpanded, newSourceEvents);\n\n    expect(idsToRemove).toHaveLength(1);\n    expect(idsToRemove[0]).toBe(\"expanded-1\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/shared/sync-window.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { getCalDAVSyncWindow } from \"../../../../src/providers/caldav/shared/sync-window\";\n\ndescribe(\"caldav destination sync window\", () => {\n  it(\"includes the seven-day lookback needed for reconciliation\", () => {\n    const startOfToday = new Date(\"2026-03-09T00:00:00.000Z\");\n\n    const window = getCalDAVSyncWindow(2, startOfToday);\n\n    expect(window.start.toISOString()).toBe(\"2026-03-02T00:00:00.000Z\");\n    expect(window.end.toISOString()).toBe(\"2028-03-09T00:00:00.000Z\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/source/auth-error-classification.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { isCalDAVAuthenticationError } from \"../../../../src/providers/caldav/source/auth-error-classification\";\n\ndescribe(\"isCalDAVAuthenticationError\", () => {\n  it(\"returns true for explicit invalid-credentials errors\", () => {\n    expect(isCalDAVAuthenticationError(new Error(\"Invalid credentials\"))).toBe(true);\n  });\n\n  it(\"returns true for structured HTTP 401 status codes\", () => {\n    expect(isCalDAVAuthenticationError({ status: 401 })).toBe(true);\n    expect(isCalDAVAuthenticationError({ statusCode: \"401\" })).toBe(true);\n  });\n\n  it(\"returns false for 403 status codes\", () => {\n    expect(isCalDAVAuthenticationError({ status: 403 })).toBe(false);\n    expect(isCalDAVAuthenticationError({ statusCode: \"403\" })).toBe(false);\n  });\n\n  it(\"returns false for bare 'unauthorized' in error message\", () => {\n    expect(isCalDAVAuthenticationError(new Error(\"Unauthorized\"))).toBe(false);\n    expect(isCalDAVAuthenticationError(new Error(\"unauthorized access to resource\"))).toBe(false);\n  });\n\n  it(\"returns true for 'authentication unauthorized' in error message\", () => {\n    expect(isCalDAVAuthenticationError(new Error(\"authentication unauthorized\"))).toBe(true);\n  });\n\n  it(\"returns true for nested auth failures\", () => {\n    expect(\n      isCalDAVAuthenticationError({\n        cause: {\n          statusCode: 401,\n        },\n      }),\n    ).toBe(true);\n  });\n\n  it(\"returns false for non-auth errors that contain random numbers\", () => {\n    expect(\n      isCalDAVAuthenticationError(\n        new Error(\"Failed query with location 401 Anderson Rd SE Calgary AB\"),\n      ),\n    ).toBe(false);\n  });\n\n  it(\"returns false for non-auth operational errors\", () => {\n    expect(isCalDAVAuthenticationError(new Error(\"cannot find homeUrl\"))).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/source/fetch-adapter.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\ndescribe(\"createCalDAVSourceFetcher\", () => {\n  it(\"returns a fetchEvents function\", async () => {\n    const { createCalDAVSourceFetcher } = await import(\"../../../../src/providers/caldav/source/fetch-adapter\");\n\n    const fetcher = createCalDAVSourceFetcher({\n      calendarUrl: \"https://caldav.example.com/calendar/\",\n      serverUrl: \"https://caldav.example.com\",\n      username: \"user\",\n      password: \"pass\",\n    });\n\n    expect(typeof fetcher.fetchEvents).toBe(\"function\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/caldav/source/sync-window.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { getCalDAVSyncWindow } from \"../../../../src/providers/caldav/source/sync-window\";\n\ndescribe(\"caldav sync window\", () => {\n  it(\"returns a lookback start date seven days before today\", () => {\n    const startOfToday = new Date(\"2026-03-09T00:00:00.000Z\");\n\n    const window = getCalDAVSyncWindow(2, startOfToday);\n\n    expect(window.start.toISOString()).toBe(\"2026-03-02T00:00:00.000Z\");\n    expect(window.end.toISOString()).toBe(\"2028-03-09T00:00:00.000Z\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/destination/provider.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\ndescribe(\"createGoogleSyncProvider\", () => {\n  it(\"returns a provider with pushEvents, deleteEvents, and listRemoteEvents\", async () => {\n    const { createGoogleSyncProvider } = await import(\"../../../../src/providers/google/destination/provider\");\n\n    const provider = createGoogleSyncProvider({\n      accessToken: \"test-token\",\n      refreshToken: \"test-refresh\",\n      accessTokenExpiresAt: new Date(Date.now() + 3_600_000),\n      externalCalendarId: \"primary\",\n      calendarId: \"cal-1\",\n      userId: \"user-1\",\n    });\n\n    expect(typeof provider.pushEvents).toBe(\"function\");\n    expect(typeof provider.deleteEvents).toBe(\"function\");\n    expect(typeof provider.listRemoteEvents).toBe(\"function\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/destination/serialize-event.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { serializeGoogleEvent } from \"../../../../src/providers/google/destination/serialize-event\";\n\ndescribe(\"serializeGoogleEvent\", () => {\n  it(\"returns null for working-elsewhere events\", () => {\n    const event = serializeGoogleEvent(\n      {\n        availability: \"workingElsewhere\",\n        calendarId: \"calendar-id\",\n        calendarName: \"Calendar\",\n        calendarUrl: null,\n        endTime: new Date(\"2026-03-09T00:00:00.000Z\"),\n        id: \"event-id\",\n        location: \"Home\",\n        sourceEventUid: \"source-uid\",\n        startTime: new Date(\"2026-03-08T00:00:00.000Z\"),\n        summary: \"Working elsewhere\",\n      },\n      \"destination-uid\",\n    );\n\n    expect(event).toBeNull();\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/shared/backoff.test.ts",
    "content": "import { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { withBackoff, abortableSleep, computeDelay } from \"../../../../src/providers/google/shared/backoff\";\n\nconst flushAsync = async (): Promise<void> => {\n  for (let tick = 0; tick < 5; tick++) {\n    await Promise.resolve();\n  }\n};\n\nconst advanceBackoff = async (): Promise<void> => {\n  vi.advanceTimersByTime(65_000);\n  await flushAsync();\n};\n\ndescribe(\"computeDelay\", () => {\n  it(\"returns a delay in the range [2^n * 1000, 2^n * 1000 + 1000] for each attempt\", () => {\n    for (let attempt = 0; attempt < 5; attempt++) {\n      const delay = computeDelay(attempt);\n      const baseDelay = 2 ** attempt * 1000;\n      expect(delay).toBeGreaterThanOrEqual(baseDelay);\n      expect(delay).toBeLessThanOrEqual(baseDelay + 1000);\n    }\n  });\n\n  it(\"caps the delay at 64 seconds\", () => {\n    const delay = computeDelay(100);\n    expect(delay).toBeLessThanOrEqual(64_000);\n  });\n});\n\ndescribe(\"abortableSleep\", () => {\n  beforeEach(() => {\n    vi.useFakeTimers();\n  });\n\n  afterEach(() => {\n    vi.useRealTimers();\n  });\n\n  it(\"resolves after the specified delay\", async () => {\n    const promise = abortableSleep(50);\n    vi.advanceTimersByTime(50);\n    await promise;\n  });\n\n  it(\"rejects immediately if the signal is already aborted\", async () => {\n    const controller = new AbortController();\n    controller.abort(\"cancelled\");\n\n    await expect(abortableSleep(10_000, controller.signal)).rejects.toBe(\"cancelled\");\n  });\n\n  it(\"rejects when the signal is aborted during sleep\", async () => {\n    const controller = new AbortController();\n    const sleepPromise = abortableSleep(10_000, controller.signal);\n\n    controller.abort(\"cancelled\");\n\n    await expect(sleepPromise).rejects.toBe(\"cancelled\");\n  });\n\n  it(\"resolves normally when signal is provided but not aborted\", async () => {\n    const controller = new AbortController();\n    const promise = abortableSleep(10, controller.signal);\n    vi.advanceTimersByTime(10);\n    await promise;\n  });\n});\n\ndescribe(\"withBackoff\", () => {\n  beforeEach(() => {\n    vi.useFakeTimers();\n  });\n\n  afterEach(() => {\n    vi.useRealTimers();\n  });\n\n  it(\"returns the result on first success\", async () => {\n    const result = await withBackoff(\n      () => Promise.resolve(\"ok\"),\n      { shouldRetry: () => true },\n    );\n\n    expect(result).toBe(\"ok\");\n  });\n\n  it(\"retries on retryable errors and eventually succeeds\", async () => {\n    let callCount = 0;\n    const operation = () => {\n      callCount++;\n      if (callCount < 3) {\n        return Promise.reject(new Error(\"rate limited\"));\n      }\n      return Promise.resolve(\"recovered\");\n    };\n\n    const promise = withBackoff(operation, {\n      maxRetries: 5,\n      shouldRetry: (error) => error instanceof Error && error.message === \"rate limited\",\n    });\n\n    await advanceBackoff();\n    await advanceBackoff();\n\n    const result = await promise;\n\n    expect(result).toBe(\"recovered\");\n    expect(callCount).toBe(3);\n  });\n\n  it(\"throws immediately for non-retryable errors\", async () => {\n    let callCount = 0;\n    const operation = () => {\n      callCount++;\n      return Promise.reject(new Error(\"auth failed\"));\n    };\n\n    await expect(\n      withBackoff(operation, {\n        shouldRetry: (error) => error instanceof Error && error.message === \"rate limited\",\n      }),\n    ).rejects.toThrow(\"auth failed\");\n\n    expect(callCount).toBe(1);\n  });\n\n  it(\"throws after exhausting all retries\", async () => {\n    let callCount = 0;\n    const operation = () => {\n      callCount++;\n      return Promise.reject(new Error(\"rate limited\"));\n    };\n\n    const promise = withBackoff(operation, {\n      maxRetries: 2,\n      shouldRetry: () => true,\n    });\n\n    await advanceBackoff();\n    await advanceBackoff();\n\n    await expect(promise).rejects.toThrow(\"rate limited\");\n\n    expect(callCount).toBe(3);\n  });\n\n  it(\"aborts during backoff sleep when signal is triggered\", async () => {\n    const controller = new AbortController();\n    let callCount = 0;\n\n    const operation = () => {\n      callCount++;\n      return Promise.reject(new Error(\"rate limited\"));\n    };\n\n    const backoffPromise = withBackoff(operation, {\n      maxRetries: 5,\n      signal: controller.signal,\n      shouldRetry: () => true,\n    });\n\n    await flushAsync();\n    controller.abort(\"job cancelled\");\n\n    await expect(backoffPromise).rejects.toBe(\"job cancelled\");\n    expect(callCount).toBe(1);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/shared/batch.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  buildBatchRequestBody,\n  parseBatchResponseBody,\n  chunkArray,\n  extractResponseBoundary,\n} from \"../../../../src/providers/google/shared/batch\";\nimport type { BatchSubRequest } from \"../../../../src/providers/google/shared/batch\";\n\ndescribe(\"buildBatchRequestBody\", () => {\n  it(\"serializes a single POST sub-request with JSON body\", () => {\n    const subRequests: BatchSubRequest[] = [\n      {\n        method: \"POST\",\n        path: \"/calendar/v3/calendars/primary/events\",\n        body: { summary: \"Test Event\" },\n      },\n    ];\n\n    const result = buildBatchRequestBody(subRequests, \"test_boundary\");\n\n    expect(result).toContain(\"--test_boundary\");\n    expect(result).toContain(\"Content-Type: application/http\");\n    expect(result).toContain(\"Content-ID: <item-0>\");\n    expect(result).toContain(\"POST /calendar/v3/calendars/primary/events HTTP/1.1\");\n    expect(result).toContain('\"summary\":\"Test Event\"');\n    expect(result).toContain(\"--test_boundary--\");\n  });\n\n  it(\"serializes a DELETE sub-request without body\", () => {\n    const subRequests: BatchSubRequest[] = [\n      {\n        method: \"DELETE\",\n        path: \"/calendar/v3/calendars/primary/events/abc123\",\n      },\n    ];\n\n    const result = buildBatchRequestBody(subRequests, \"boundary_del\");\n\n    expect(result).toContain(\"DELETE /calendar/v3/calendars/primary/events/abc123 HTTP/1.1\");\n    expect(result).not.toContain('\"summary\"');\n  });\n\n  it(\"serializes multiple sub-requests with sequential content IDs\", () => {\n    const subRequests: BatchSubRequest[] = [\n      { method: \"POST\", path: \"/events\", body: { summary: \"Event A\" } },\n      { method: \"POST\", path: \"/events\", body: { summary: \"Event B\" } },\n      { method: \"DELETE\", path: \"/events/xyz\" },\n    ];\n\n    const result = buildBatchRequestBody(subRequests, \"multi\");\n\n    expect(result).toContain(\"Content-ID: <item-0>\");\n    expect(result).toContain(\"Content-ID: <item-1>\");\n    expect(result).toContain(\"Content-ID: <item-2>\");\n  });\n\n  it(\"includes custom headers in sub-requests\", () => {\n    const subRequests: BatchSubRequest[] = [\n      {\n        method: \"GET\",\n        path: \"/events\",\n        headers: { \"If-None-Match\": \"etag-value\" },\n      },\n    ];\n\n    const result = buildBatchRequestBody(subRequests, \"hdr\");\n\n    expect(result).toContain(\"If-None-Match: etag-value\");\n  });\n});\n\ndescribe(\"parseBatchResponseBody\", () => {\n  it(\"parses a single successful response\", () => {\n    const responseText = [\n      \"--response_boundary\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-0>\",\n      \"\",\n      \"HTTP/1.1 200 OK\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"id\": \"event123\", \"summary\": \"Test\"}',\n      \"--response_boundary--\",\n    ].join(\"\\r\\n\");\n\n    const results = parseBatchResponseBody(responseText, \"response_boundary\");\n\n    expect(results).toHaveLength(1);\n    expect(results[0]?.statusCode).toBe(200);\n    expect(results[0]?.body).toEqual({ id: \"event123\", summary: \"Test\" });\n  });\n\n  it(\"parses multiple responses preserving order by Content-ID\", () => {\n    const responseText = [\n      \"--batch_resp\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-1>\",\n      \"\",\n      \"HTTP/1.1 201 Created\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"id\": \"second\"}',\n      \"--batch_resp\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-0>\",\n      \"\",\n      \"HTTP/1.1 200 OK\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"id\": \"first\"}',\n      \"--batch_resp--\",\n    ].join(\"\\r\\n\");\n\n    const results = parseBatchResponseBody(responseText, \"batch_resp\");\n\n    expect(results).toHaveLength(2);\n    expect(results[0]?.statusCode).toBe(200);\n    expect(results[0]?.body).toEqual({ id: \"first\" });\n    expect(results[1]?.statusCode).toBe(201);\n    expect(results[1]?.body).toEqual({ id: \"second\" });\n  });\n\n  it(\"parses error responses with status codes\", () => {\n    const responseText = [\n      \"--err_bound\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-0>\",\n      \"\",\n      \"HTTP/1.1 404 Not Found\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"error\": {\"message\": \"Not Found\", \"code\": 404}}',\n      \"--err_bound--\",\n    ].join(\"\\r\\n\");\n\n    const results = parseBatchResponseBody(responseText, \"err_bound\");\n\n    expect(results).toHaveLength(1);\n    expect(results[0]?.statusCode).toBe(404);\n  });\n\n  it(\"handles 204 No Content responses with empty body\", () => {\n    const responseText = [\n      \"--del_bound\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-0>\",\n      \"\",\n      \"HTTP/1.1 204 No Content\",\n      \"\",\n      \"\",\n      \"--del_bound--\",\n    ].join(\"\\r\\n\");\n\n    const results = parseBatchResponseBody(responseText, \"del_bound\");\n\n    expect(results).toHaveLength(1);\n    expect(results[0]?.statusCode).toBe(204);\n  });\n\n  it(\"handles mixed success and failure responses\", () => {\n    const responseText = [\n      \"--mixed\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-0>\",\n      \"\",\n      \"HTTP/1.1 200 OK\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"id\": \"ok\"}',\n      \"--mixed\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-1>\",\n      \"\",\n      \"HTTP/1.1 429 Too Many Requests\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"error\": {\"message\": \"Rate Limit Exceeded\"}}',\n      \"--mixed\",\n      \"Content-Type: application/http\",\n      \"Content-ID: <response-item-2>\",\n      \"\",\n      \"HTTP/1.1 201 Created\",\n      \"Content-Type: application/json\",\n      \"\",\n      '{\"id\": \"created\"}',\n      \"--mixed--\",\n    ].join(\"\\r\\n\");\n\n    const results = parseBatchResponseBody(responseText, \"mixed\");\n\n    expect(results).toHaveLength(3);\n    expect(results[0]?.statusCode).toBe(200);\n    expect(results[1]?.statusCode).toBe(429);\n    expect(results[2]?.statusCode).toBe(201);\n  });\n});\n\ndescribe(\"chunkArray\", () => {\n  it(\"chunks array into groups of specified size\", () => {\n    const items = [1, 2, 3, 4, 5];\n    const chunks = chunkArray(items, 2);\n\n    expect(chunks).toHaveLength(3);\n    expect(chunks[0]).toEqual([1, 2]);\n    expect(chunks[1]).toEqual([3, 4]);\n    expect(chunks[2]).toEqual([5]);\n  });\n\n  it(\"returns single chunk when array fits within size\", () => {\n    const items = [1, 2, 3];\n    const chunks = chunkArray(items, 50);\n\n    expect(chunks).toHaveLength(1);\n    expect(chunks[0]).toEqual([1, 2, 3]);\n  });\n\n  it(\"returns empty array for empty input\", () => {\n    const chunks = chunkArray([], 10);\n    expect(chunks).toHaveLength(0);\n  });\n});\n\ndescribe(\"extractResponseBoundary\", () => {\n  it(\"extracts boundary from Content-Type header\", () => {\n    const boundary = extractResponseBoundary(\"multipart/mixed; boundary=batch_abc123\");\n    expect(boundary).toBe(\"batch_abc123\");\n  });\n\n  it(\"returns null for missing Content-Type\", () => {\n    const boundary = extractResponseBoundary(null);\n    expect(boundary).toBeNull();\n  });\n\n  it(\"returns null when no boundary parameter present\", () => {\n    const boundary = extractResponseBoundary(\"application/json\");\n    expect(boundary).toBeNull();\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/shared/errors.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { isAuthError, isRateLimitApiError, isRateLimitResponseStatus } from \"../../../../src/providers/google/shared/errors\";\n\ndescribe(\"isAuthError\", () => {\n  it(\"returns true for unauthenticated 401 responses\", () => {\n    expect(isAuthError(401, { status: \"UNAUTHENTICATED\" })).toBe(true);\n  });\n\n  it(\"returns false for generic permission denied responses\", () => {\n    expect(\n      isAuthError(403, {\n        message: \"The caller does not have permission\",\n        status: \"PERMISSION_DENIED\",\n      }),\n    ).toBe(false);\n  });\n\n  it(\"returns true for legacy insufficientPermissions reasons\", () => {\n    expect(\n      isAuthError(403, {\n        status: \"PERMISSION_DENIED\",\n        errors: [{ reason: \"insufficientPermissions\" }],\n      }),\n    ).toBe(true);\n  });\n\n  it(\"returns true for google rpc ACCESS_TOKEN_SCOPE_INSUFFICIENT reasons\", () => {\n    expect(\n      isAuthError(403, {\n        status: \"PERMISSION_DENIED\",\n        details: [{ reason: \"ACCESS_TOKEN_SCOPE_INSUFFICIENT\" }],\n      }),\n    ).toBe(true);\n  });\n});\n\ndescribe(\"isRateLimitResponseStatus\", () => {\n  it(\"returns true for 403\", () => {\n    expect(isRateLimitResponseStatus(403)).toBe(true);\n  });\n\n  it(\"returns true for 429\", () => {\n    expect(isRateLimitResponseStatus(429)).toBe(true);\n  });\n\n  it(\"returns false for 401\", () => {\n    expect(isRateLimitResponseStatus(401)).toBe(false);\n  });\n\n  it(\"returns false for 500\", () => {\n    expect(isRateLimitResponseStatus(500)).toBe(false);\n  });\n});\n\ndescribe(\"isRateLimitApiError\", () => {\n  it(\"returns true for 429 regardless of error body\", () => {\n    expect(isRateLimitApiError(429)).toBe(true);\n    expect(isRateLimitApiError(429, {})).toBe(true);\n  });\n\n  it(\"returns true for 403 with legacy rateLimitExceeded reason\", () => {\n    expect(\n      isRateLimitApiError(403, {\n        errors: [{ reason: \"rateLimitExceeded\" }],\n      }),\n    ).toBe(true);\n  });\n\n  it(\"returns true for 403 with legacy userRateLimitExceeded reason\", () => {\n    expect(\n      isRateLimitApiError(403, {\n        errors: [{ reason: \"userRateLimitExceeded\" }],\n      }),\n    ).toBe(true);\n  });\n\n  it(\"returns true for 403 with ErrorInfo RATE_LIMIT_EXCEEDED reason\", () => {\n    expect(\n      isRateLimitApiError(403, {\n        details: [{ reason: \"RATE_LIMIT_EXCEEDED\" }],\n      }),\n    ).toBe(true);\n  });\n\n  it(\"returns true for 403 with rateLimitExceeded in message\", () => {\n    expect(\n      isRateLimitApiError(403, {\n        message: \"Quota exceeded for quota metric 'Queries'... rateLimitExceeded\",\n      }),\n    ).toBe(true);\n  });\n\n  it(\"returns false for 403 with unrelated PERMISSION_DENIED reason\", () => {\n    expect(\n      isRateLimitApiError(403, {\n        status: \"PERMISSION_DENIED\",\n        errors: [{ reason: \"insufficientPermissions\" }],\n      }),\n    ).toBe(false);\n  });\n\n  it(\"returns false for 403 with no rate limit indicators\", () => {\n    expect(\n      isRateLimitApiError(403, {\n        message: \"The caller does not have permission\",\n      }),\n    ).toBe(false);\n  });\n\n  it(\"returns false for non-rate-limit status codes\", () => {\n    expect(isRateLimitApiError(401, { errors: [{ reason: \"rateLimitExceeded\" }] })).toBe(false);\n    expect(isRateLimitApiError(500, { errors: [{ reason: \"rateLimitExceeded\" }] })).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/source/fetch-adapter.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\ndescribe(\"createGoogleSourceFetcher\", () => {\n  it(\"returns a fetchEvents function that retrieves and parses Google Calendar events\", async () => {\n    const { createGoogleSourceFetcher } = await import(\"../../../../src/providers/google/source/fetch-adapter\");\n\n    const fetcher = createGoogleSourceFetcher({\n      accessToken: \"test-token\",\n      externalCalendarId: \"primary\",\n      syncToken: null,\n    });\n\n    expect(typeof fetcher.fetchEvents).toBe(\"function\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/source/provider.test.ts",
    "content": "import { afterEach, describe, expect, it } from \"vitest\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { ProcessEventsOptions } from \"../../../../src/core/oauth/source-provider\";\nimport type { SourceEvent, SourceSyncResult } from \"../../../../src/core/types\";\nimport { GoogleCalendarSourceProvider } from \"../../../../src/providers/google/source/provider\";\n\nconst originalFetch = globalThis.fetch;\n\nconst createJsonResponse = (body: unknown, status = 200): Response =>\n  Response.json(body, { status });\n\nconst getUrlAsString = (input: Request | URL | string) => {\n  if (input instanceof Request) {\n    return input.url;\n  }\n\n  if (input instanceof URL) {\n    return input.toString();\n  }\n\n  return input;\n};\n\nclass TestableGoogleCalendarSourceProvider extends GoogleCalendarSourceProvider {\n  runProcessEvents(events: SourceEvent[], options: ProcessEventsOptions): Promise<SourceSyncResult> {\n    return this.processEvents(events, options);\n  }\n}\n\ndescribe(\"GoogleCalendarSourceProvider\", () => {\n  afterEach(() => {\n    globalThis.fetch = originalFetch;\n  });\n\n  it(\"removes out-of-range events directly without triggering full resync\", async () => {\n    let outOfRangeDeleteCalled = false;\n    const mockDatabase = {\n      delete: () => {\n        outOfRangeDeleteCalled = true;\n        return {\n          where: () => Promise.resolve(),\n        };\n      },\n      select: () => ({\n        from: () => ({\n          where: () => Promise.resolve([]),\n        }),\n      }),\n      update: () => ({\n        set: () => ({\n          where: () => Promise.resolve(),\n        }),\n      }),\n    };\n\n    const provider = new TestableGoogleCalendarSourceProvider(\n      {\n        accessToken: \"access-token\",\n        accessTokenExpiresAt: new Date(\"2099-01-01T00:00:00.000Z\"),\n        calendarAccountId: \"account-1\",\n        calendarId: \"calendar-1\",\n        database: mockDatabase as unknown as BunSQLDatabase,\n        excludeFocusTime: false,\n        excludeOutOfOffice: false,\n        externalCalendarId: \"calendar@example.com\",\n        oauthCredentialId: \"credential-1\",\n        originalName: \"Original Calendar\",\n        refreshToken: \"refresh-token\",\n        sourceName: \"Calendar\",\n        syncToken: \"delta-sync-token\",\n        userId: \"user-1\",\n      },\n      {\n        refreshAccessToken: () => Promise.reject(new Error(\"refreshAccessToken should not be called\")),\n      },\n    );\n\n    const result = await provider.runProcessEvents([], { isDeltaSync: true });\n\n    expect(result.fullSyncRequired).toBeUndefined();\n    expect(outOfRangeDeleteCalled).toBe(true);\n  });\n\n  it(\"applies source-state removals inside a transaction during full sync\", async () => {\n    let outOfRangeDeleteCalls = 0;\n    let transactionCalls = 0;\n    let transactionDeleteCalls = 0;\n\n    const transactionDatabase = {\n      delete: () => {\n        transactionDeleteCalls += 1;\n        return {\n          where: () => Promise.resolve(),\n        };\n      },\n      insert: () => ({\n        values: () => ({\n          onConflictDoUpdate: () => Promise.resolve(),\n        }),\n      }),\n    };\n\n    const mockDatabase = {\n      delete: () => {\n        outOfRangeDeleteCalls += 1;\n        return {\n          where: () => Promise.resolve(),\n        };\n      },\n      select: () => ({\n        from: () => ({\n          where: () => Promise.resolve([{\n            availability: \"busy\",\n            endTime: new Date(\"2026-03-12T15:00:00.000Z\"),\n            id: \"event-state-1\",\n            isAllDay: false,\n            sourceEventType: \"default\",\n            sourceEventUid: \"source-uid-1\",\n            startTime: new Date(\"2026-03-12T14:00:00.000Z\"),\n          }]),\n        }),\n      }),\n      transaction: async (\n        callback: (database: typeof transactionDatabase) => Promise<void>,\n      ) => {\n        transactionCalls += 1;\n        await callback(transactionDatabase);\n      },\n      update: () => ({\n        set: () => ({\n          where: () => Promise.resolve(),\n        }),\n      }),\n    };\n\n    const provider = new TestableGoogleCalendarSourceProvider(\n      {\n        accessToken: \"access-token\",\n        accessTokenExpiresAt: new Date(\"2099-01-01T00:00:00.000Z\"),\n        calendarAccountId: \"account-1\",\n        calendarId: \"calendar-1\",\n        database: mockDatabase as unknown as BunSQLDatabase,\n        excludeFocusTime: false,\n        excludeOutOfOffice: false,\n        externalCalendarId: \"calendar@example.com\",\n        oauthCredentialId: \"credential-1\",\n        originalName: \"Original Calendar\",\n        refreshToken: \"refresh-token\",\n        sourceName: \"Calendar\",\n        syncToken: null,\n        userId: \"user-1\",\n      },\n      {\n        refreshAccessToken: () => Promise.reject(new Error(\"refreshAccessToken should not be called\")),\n      },\n    );\n\n    const result = await provider.runProcessEvents([], { isDeltaSync: false });\n\n    expect(result.eventsRemoved).toBe(1);\n    expect(transactionCalls).toBe(1);\n    expect(outOfRangeDeleteCalls).toBe(1);\n    expect(transactionDeleteCalls).toBe(1);\n  });\n\n  it(\"continues fetching events when calendar metadata cannot be fetched\", async () => {\n    const requestedUrls: string[] = [];\n\n    const queuedFetch = (input: Request | URL | string) => {\n      const url = getUrlAsString(input);\n      requestedUrls.push(url);\n\n      return Promise.resolve(createJsonResponse({\n        items: [\n          {\n            end: {\n              dateTime: \"2026-03-08T15:00:00.000Z\",\n              timeZone: \"America/Toronto\",\n            },\n            iCalUID: \"external-uid-1\",\n            id: \"event-1\",\n            start: {\n              dateTime: \"2026-03-08T14:00:00.000Z\",\n              timeZone: \"America/Toronto\",\n            },\n            status: \"confirmed\",\n            summary: \"Planning Session\",\n          },\n        ],\n        nextSyncToken: \"next-sync-token\",\n      }));\n    };\n    queuedFetch.preconnect = originalFetch.preconnect;\n    globalThis.fetch = queuedFetch;\n\n    const provider = new GoogleCalendarSourceProvider(\n      {\n        accessToken: \"access-token\",\n        accessTokenExpiresAt: new Date(\"2099-01-01T00:00:00.000Z\"),\n        calendarAccountId: \"account-1\",\n        calendarId: \"calendar-1\",\n        database: {} as never,\n        excludeFocusTime: false,\n        excludeOutOfOffice: false,\n        externalCalendarId: \"calendar@example.com\",\n        oauthCredentialId: \"credential-1\",\n        originalName: \"Original Calendar\",\n        refreshToken: \"refresh-token\",\n        sourceName: \"Calendar\",\n        syncToken: null,\n        userId: \"user-1\",\n      },\n      {\n        refreshAccessToken: () => Promise.reject(new Error(\"refreshAccessToken should not be called\")),\n      },\n    );\n\n    const result = await provider.fetchEvents(null);\n\n    expect(result.fullSyncRequired).toBe(false);\n    expect(result.events).toHaveLength(1);\n    expect(result.nextSyncToken).toBe(\"next-sync-token\");\n    expect(requestedUrls).toHaveLength(1);\n    expect(requestedUrls[0]).toContain(\"/events\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/google/source/utils/fetch-events.test.ts",
    "content": "import { afterEach, describe, expect, it } from \"vitest\";\nimport { EventsFetchError, fetchCalendarEvents, parseGoogleEvents } from \"../../../../../src/providers/google/source/utils/fetch-events\";\nimport type { GoogleCalendarEvent } from \"../../../../../src/providers/google/source/types\";\n\nconst createGoogleEvent = (overrides: Partial<GoogleCalendarEvent>): GoogleCalendarEvent => ({\n  end: {\n    dateTime: \"2026-03-08T15:00:00.000Z\",\n    timeZone: \"America/Toronto\",\n  },\n  iCalUID: \"external-uid-1\",\n  id: \"google-event-id-1\",\n  start: {\n    dateTime: \"2026-03-08T14:00:00.000Z\",\n    timeZone: \"America/Toronto\",\n  },\n  status: \"confirmed\",\n  summary: \"Planning Session\",\n  ...overrides,\n});\n\nconst originalFetch = globalThis.fetch;\n\nconst resolveInputUrl = (input: Request | URL | string): string => {\n  if (input instanceof URL) {\n    return input.toString();\n  }\n  if (typeof input === \"string\") {\n    return input;\n  }\n  return input.url;\n};\n\nconst createJsonResponse = (body: unknown, status = 200): Response =>\n  Response.json(body, { status });\n\nconst createFetchQueue = (\n  queuedResponses: Response[],\n  requestedUrls: string[],\n): typeof fetch => {\n  let requestCount = 0;\n\n  const queuedFetch = (input: Request | URL | string): Promise<Response> => {\n    requestedUrls.push(resolveInputUrl(input));\n\n    const nextResponse = queuedResponses[requestCount];\n    requestCount += 1;\n\n    if (!nextResponse) {\n      throw new Error(\"Unexpected fetch invocation\");\n    }\n\n    return Promise.resolve(nextResponse);\n  };\n\n  queuedFetch.preconnect = originalFetch.preconnect;\n  return queuedFetch;\n};\n\nafterEach(() => {\n  globalThis.fetch = originalFetch;\n});\n\ndescribe(\"fetchCalendarEvents\", () => {\n  it(\"collects paged events and cancelled UIDs during delta sync\", async () => {\n    const requestedUrls: string[] = [];\n\n    globalThis.fetch = createFetchQueue(\n      [\n        createJsonResponse({\n          items: [\n            { iCalUID: \"ext-uid-1\", id: \"event-1\", status: \"confirmed\" },\n            { iCalUID: \"cancelled-uid\", id: \"event-2\", status: \"cancelled\" },\n          ],\n          nextPageToken: \"next-page-token\",\n          nextSyncToken: \"sync-token-1\",\n        }),\n        createJsonResponse({\n          items: [\n            { id: \"cancelled-by-id\", status: \"cancelled\" },\n            { iCalUID: \"ext-uid-2\", id: \"event-3\", status: \"confirmed\" },\n          ],\n          nextSyncToken: \"sync-token-2\",\n        }),\n      ],\n      requestedUrls,\n    );\n\n    const fetchResult = await fetchCalendarEvents({\n      accessToken: \"token\",\n      calendarId: \"calendar-id\",\n      syncToken: \"existing-sync-token\",\n    });\n\n    expect(fetchResult.fullSyncRequired).toBe(false);\n    expect(fetchResult.isDeltaSync).toBe(true);\n    expect(fetchResult.nextSyncToken).toBe(\"sync-token-2\");\n    expect(fetchResult.events.map((event) => event.id)).toEqual([\"event-1\", \"event-3\"]);\n    expect(fetchResult.cancelledEventUids).toEqual([\"cancelled-uid\", \"cancelled-by-id\"]);\n    expect(requestedUrls).toHaveLength(2);\n\n    const [firstRequestUrl] = requestedUrls;\n    if (!firstRequestUrl) {\n      throw new Error(\"Expected first request URL\");\n    }\n\n    const firstRequestSearchParams = new URL(firstRequestUrl).searchParams;\n    expect(firstRequestSearchParams.get(\"syncToken\")).toBe(\"existing-sync-token\");\n    expect(firstRequestSearchParams.get(\"timeMin\")).toBeNull();\n    expect(firstRequestSearchParams.get(\"timeMax\")).toBeNull();\n    expect(firstRequestSearchParams.get(\"maxResults\")).toBe(\"250\");\n    expect(firstRequestSearchParams.get(\"pageToken\")).toBeNull();\n\n    const [, secondRequestUrl] = requestedUrls;\n    if (!secondRequestUrl) {\n      throw new Error(\"Expected second request URL\");\n    }\n\n    const secondRequestSearchParams = new URL(secondRequestUrl).searchParams;\n    expect(secondRequestSearchParams.get(\"pageToken\")).toBe(\"next-page-token\");\n  });\n\n  it(\"returns full-sync-required when Google responds with gone\", async () => {\n    const requestedUrls: string[] = [];\n\n    globalThis.fetch = createFetchQueue(\n      [new Response(null, { status: 410 })],\n      requestedUrls,\n    );\n\n    const fetchResult = await fetchCalendarEvents({\n      accessToken: \"token\",\n      calendarId: \"calendar-id\",\n      syncToken: \"existing-sync-token\",\n    });\n\n    expect(fetchResult).toEqual({ events: [], fullSyncRequired: true });\n    expect(requestedUrls).toHaveLength(1);\n  });\n\n  it(\"throws auth-required error details on unauthorized response\", async () => {\n    const errorBody = JSON.stringify({\n      error: {\n        code: 401,\n        message: \"Request is missing required authentication credential.\",\n        status: \"UNAUTHENTICATED\",\n        errors: [{ reason: \"authError\" }],\n      },\n    });\n    globalThis.fetch = createFetchQueue([\n      new Response(errorBody, { status: 401, headers: { \"Content-Type\": \"application/json\" } }),\n    ], []);\n\n    try {\n      await fetchCalendarEvents({\n        accessToken: \"token\",\n        calendarId: \"calendar-id\",\n        syncToken: \"existing-sync-token\",\n      });\n      throw new Error(\"Expected fetchCalendarEvents to throw\");\n    } catch (error) {\n      expect(error).toBeInstanceOf(EventsFetchError);\n\n      if (!(error instanceof EventsFetchError)) {\n        throw error;\n      }\n\n      expect(error.status).toBe(401);\n      expect(error.authRequired).toBe(true);\n      expect(error.message).toContain(\"Failed to fetch events: 401\");\n    }\n  });\n});\n\ndescribe(\"parseGoogleEvents\", () => {\n  it(\"filters keeper events and keeps typed Google events for later reconciliation\", () => {\n    const externalEvent = createGoogleEvent({ iCalUID: \"external-uid-1\" });\n    const keeperEvent = createGoogleEvent({\n      iCalUID: \"generated-event@keeper.sh\",\n      id: \"google-event-id-2\",\n    });\n    const focusTimeEvent = createGoogleEvent({\n      eventType: \"focusTime\",\n      iCalUID: \"external-uid-2\",\n      id: \"google-event-id-3\",\n    });\n\n    const parsedEvents = parseGoogleEvents([externalEvent, keeperEvent, focusTimeEvent]);\n\n    expect(parsedEvents).toHaveLength(2);\n    expect(parsedEvents[0]?.uid).toBe(\"external-uid-1\");\n    expect(parsedEvents[1]?.sourceEventType).toBe(\"focusTime\");\n  });\n\n  it(\"uses end timezone when start timezone is absent\", () => {\n    const googleEvent = createGoogleEvent({\n      end: {\n        dateTime: \"2026-03-08T15:00:00.000Z\",\n        timeZone: \"America/Vancouver\",\n      },\n      iCalUID: \"external-uid-4\",\n      start: {\n        dateTime: \"2026-03-08T14:00:00.000Z\",\n      },\n    });\n\n    const parsedEvents = parseGoogleEvents([googleEvent]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.startTimeZone).toBe(\"America/Vancouver\");\n  });\n\n  it(\"marks working location events as working elsewhere\", () => {\n    const googleEvent = createGoogleEvent({\n      eventType: \"workingLocation\",\n      iCalUID: \"external-uid-5\",\n    });\n\n    const parsedEvents = parseGoogleEvents([googleEvent]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.availability).toBe(\"workingElsewhere\");\n    expect(parsedEvents[0]?.sourceEventType).toBe(\"workingLocation\");\n  });\n\n  it(\"marks transparent events as free\", () => {\n    const googleEvent = createGoogleEvent({\n      iCalUID: \"external-uid-6\",\n      transparency: \"transparent\",\n    });\n\n    const parsedEvents = parseGoogleEvents([googleEvent]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.availability).toBe(\"free\");\n  });\n\n  it(\"defaults regular events to busy availability\", () => {\n    const googleEvent = createGoogleEvent({\n      iCalUID: \"external-uid-7\",\n    });\n\n    const parsedEvents = parseGoogleEvents([googleEvent]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.availability).toBe(\"busy\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/outlook/destination/provider.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\ndescribe(\"createOutlookSyncProvider\", () => {\n  it(\"returns a provider with pushEvents, deleteEvents, and listRemoteEvents\", async () => {\n    const { createOutlookSyncProvider } = await import(\"../../../../src/providers/outlook/destination/provider\");\n\n    const provider = createOutlookSyncProvider({\n      accessToken: \"test-token\",\n      refreshToken: \"test-refresh\",\n      accessTokenExpiresAt: new Date(Date.now() + 3_600_000),\n      externalCalendarId: \"external-cal-1\",\n      calendarId: \"cal-1\",\n      userId: \"user-1\",\n    });\n\n    expect(typeof provider.pushEvents).toBe(\"function\");\n    expect(typeof provider.deleteEvents).toBe(\"function\");\n    expect(typeof provider.listRemoteEvents).toBe(\"function\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/outlook/destination/serialize-event.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { serializeOutlookEvent } from \"../../../../src/providers/outlook/destination/serialize-event\";\n\ndescribe(\"serializeOutlookEvent\", () => {\n  it(\"serializes all-day working-elsewhere events with native availability\", () => {\n    const event = serializeOutlookEvent({\n      availability: \"workingElsewhere\",\n      calendarId: \"calendar-id\",\n      calendarName: \"Calendar\",\n      calendarUrl: null,\n      endTime: new Date(\"2026-03-09T00:00:00.000Z\"),\n      id: \"event-id\",\n      sourceEventUid: \"source-uid\",\n      startTime: new Date(\"2026-03-08T00:00:00.000Z\"),\n      startTimeZone: \"UTC\",\n      summary: \"Working elsewhere\",\n    });\n\n    expect(event.isAllDay).toBe(true);\n    expect(event.showAs).toBe(\"workingElsewhere\");\n    expect(event.start).toEqual({ dateTime: \"2026-03-08T00:00:00.000\", timeZone: \"UTC\" });\n    expect(event.end).toEqual({ dateTime: \"2026-03-09T00:00:00.000\", timeZone: \"UTC\" });\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/outlook/source/fetch-adapter.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\ndescribe(\"createOutlookSourceFetcher\", () => {\n  it(\"returns a fetchEvents function\", async () => {\n    const { createOutlookSourceFetcher } = await import(\"../../../../src/providers/outlook/source/fetch-adapter\");\n\n    const fetcher = createOutlookSourceFetcher({\n      accessToken: \"test-token\",\n      externalCalendarId: \"calendar-id\",\n      syncToken: null,\n    });\n\n    expect(typeof fetcher.fetchEvents).toBe(\"function\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/outlook/source/provider.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type { ProcessEventsOptions } from \"../../../../src/core/oauth/source-provider\";\nimport type { SourceEvent, SourceSyncResult } from \"../../../../src/core/types\";\nimport { OutlookSourceProvider } from \"../../../../src/providers/outlook/source/provider\";\n\nclass TestableOutlookSourceProvider extends OutlookSourceProvider {\n  runProcessEvents(events: SourceEvent[], options: ProcessEventsOptions): Promise<SourceSyncResult> {\n    return this.processEvents(events, options);\n  }\n}\n\ndescribe(\"OutlookSourceProvider\", () => {\n  it(\"removes out-of-range events directly without triggering full resync\", async () => {\n    let outOfRangeDeleteCalled = false;\n    const mockDatabase = {\n      delete: () => {\n        outOfRangeDeleteCalled = true;\n        return {\n          where: () => Promise.resolve(),\n        };\n      },\n      select: () => ({\n        from: () => ({\n          where: () => Promise.resolve([]),\n        }),\n      }),\n      update: () => ({\n        set: () => ({\n          where: () => Promise.resolve(),\n        }),\n      }),\n    };\n\n    const provider = new TestableOutlookSourceProvider(\n      {\n        accessToken: \"access-token\",\n        accessTokenExpiresAt: new Date(\"2099-01-01T00:00:00.000Z\"),\n        calendarAccountId: \"account-1\",\n        calendarId: \"calendar-1\",\n        database: mockDatabase as unknown as BunSQLDatabase,\n        deltaLink: \"delta-link-token\",\n        externalCalendarId: \"calendar@example.com\",\n        oauthCredentialId: \"credential-1\",\n        originalName: \"Original Calendar\",\n        refreshToken: \"refresh-token\",\n        sourceName: \"Calendar\",\n        syncToken: \"delta-link-token\",\n        userId: \"user-1\",\n      },\n      {\n        refreshAccessToken: () => Promise.reject(new Error(\"refreshAccessToken should not be called\")),\n      },\n    );\n\n    const result = await provider.runProcessEvents([], { isDeltaSync: true });\n\n    expect(result.fullSyncRequired).toBeUndefined();\n    expect(outOfRangeDeleteCalled).toBe(true);\n  });\n\n  it(\"applies source-state removals inside a transaction during full sync\", async () => {\n    let outOfRangeDeleteCalls = 0;\n    let transactionCalls = 0;\n    let transactionDeleteCalls = 0;\n\n    const transactionDatabase = {\n      delete: () => {\n        transactionDeleteCalls += 1;\n        return {\n          where: () => Promise.resolve(),\n        };\n      },\n      insert: () => ({\n        values: () => ({\n          onConflictDoUpdate: () => Promise.resolve(),\n        }),\n      }),\n    };\n\n    const mockDatabase = {\n      delete: () => {\n        outOfRangeDeleteCalls += 1;\n        return {\n          where: () => Promise.resolve(),\n        };\n      },\n      select: () => ({\n        from: () => ({\n          where: () => Promise.resolve([{\n            availability: \"busy\",\n            endTime: new Date(\"2026-03-12T15:00:00.000Z\"),\n            id: \"event-state-1\",\n            isAllDay: false,\n            sourceEventType: \"default\",\n            sourceEventUid: \"source-uid-1\",\n            startTime: new Date(\"2026-03-12T14:00:00.000Z\"),\n          }]),\n        }),\n      }),\n      transaction: async (\n        callback: (database: typeof transactionDatabase) => Promise<void>,\n      ) => {\n        transactionCalls += 1;\n        await callback(transactionDatabase);\n      },\n      update: () => ({\n        set: () => ({\n          where: () => Promise.resolve(),\n        }),\n      }),\n    };\n\n    const provider = new TestableOutlookSourceProvider(\n      {\n        accessToken: \"access-token\",\n        accessTokenExpiresAt: new Date(\"2099-01-01T00:00:00.000Z\"),\n        calendarAccountId: \"account-1\",\n        calendarId: \"calendar-1\",\n        database: mockDatabase as unknown as BunSQLDatabase,\n        deltaLink: null,\n        externalCalendarId: \"calendar@example.com\",\n        oauthCredentialId: \"credential-1\",\n        originalName: \"Original Calendar\",\n        refreshToken: \"refresh-token\",\n        sourceName: \"Calendar\",\n        syncToken: null,\n        userId: \"user-1\",\n      },\n      {\n        refreshAccessToken: () => Promise.reject(new Error(\"refreshAccessToken should not be called\")),\n      },\n    );\n\n    const result = await provider.runProcessEvents([], { isDeltaSync: false });\n\n    expect(result.eventsRemoved).toBe(1);\n    expect(transactionCalls).toBe(1);\n    expect(outOfRangeDeleteCalls).toBe(1);\n    expect(transactionDeleteCalls).toBe(1);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/providers/outlook/source/utils/fetch-events.test.ts",
    "content": "import { afterEach, describe, expect, it } from \"vitest\";\nimport { EventsFetchError, fetchCalendarEvents, parseOutlookEvents } from \"../../../../../src/providers/outlook/source/utils/fetch-events\";\nimport type { OutlookCalendarEvent } from \"../../../../../src/providers/outlook/source/types\";\n\nconst createOutlookEvent = (\n  overrides: Partial<OutlookCalendarEvent>,\n): OutlookCalendarEvent => ({\n  end: {\n    dateTime: \"2026-03-08T15:00:00\",\n    timeZone: \"UTC\",\n  },\n  iCalUId: \"external-uid-1\",\n  id: \"outlook-event-id-1\",\n  start: {\n    dateTime: \"2026-03-08T14:00:00\",\n    timeZone: \"UTC\",\n  },\n  subject: \"Outlook Planning\",\n  ...overrides,\n});\n\nconst originalFetch = globalThis.fetch;\n\nconst resolveInputUrl = (input: Request | URL | string): string => {\n  if (input instanceof URL) {\n    return input.toString();\n  }\n  if (typeof input === \"string\") {\n    return input;\n  }\n  return input.url;\n};\n\nconst createJsonResponse = (body: unknown, status = 200): Response =>\n  Response.json(body, { status });\n\nconst createFetchQueue = (\n  queuedResponses: Response[],\n  requestedUrls: string[],\n): typeof fetch => {\n  let requestCount = 0;\n\n  const queuedFetch = (input: Request | URL | string): Promise<Response> => {\n    requestedUrls.push(resolveInputUrl(input));\n\n    const nextResponse = queuedResponses[requestCount];\n    requestCount += 1;\n\n    if (!nextResponse) {\n      throw new Error(\"Unexpected fetch invocation\");\n    }\n\n    return Promise.resolve(nextResponse);\n  };\n\n  queuedFetch.preconnect = originalFetch.preconnect;\n  return queuedFetch;\n};\n\nafterEach(() => {\n  globalThis.fetch = originalFetch;\n});\n\ndescribe(\"fetchCalendarEvents\", () => {\n  it(\"collects paged events and removals during delta sync\", async () => {\n    const requestedUrls: string[] = [];\n\n    const initialDeltaLink = \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$deltatoken=original\";\n    const nextPageLink = \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$skiptoken=next-page\";\n\n    globalThis.fetch = createFetchQueue(\n      [\n        createJsonResponse({\n          \"@odata.deltaLink\": \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$deltatoken=first\",\n          \"@odata.nextLink\": nextPageLink,\n          value: [\n            { iCalUId: \"ext-uid-1\", id: \"event-1\" },\n            { \"@removed\": { reason: \"deleted\" }, iCalUId: \"removed-uid\", id: \"event-2\" },\n          ],\n        }),\n        createJsonResponse({\n          \"@odata.deltaLink\": \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$deltatoken=final\",\n          value: [\n            { \"@removed\": { reason: \"deleted\" }, id: \"removed-by-id\" },\n            { iCalUId: \"ext-uid-2\", id: \"event-3\" },\n          ],\n        }),\n      ],\n      requestedUrls,\n    );\n\n    const fetchResult = await fetchCalendarEvents({\n      accessToken: \"token\",\n      calendarId: \"calendar-id\",\n      deltaLink: initialDeltaLink,\n    });\n\n    expect(fetchResult.fullSyncRequired).toBe(false);\n    expect(fetchResult.isDeltaSync).toBe(true);\n    expect(fetchResult.nextDeltaLink).toContain(\"deltatoken=final\");\n    expect(fetchResult.events.map((event) => event.id)).toEqual([\"event-1\", \"event-3\"]);\n    expect(fetchResult.cancelledEventUids).toEqual([\"removed-uid\", \"removed-by-id\"]);\n    expect(requestedUrls).toEqual([initialDeltaLink, nextPageLink]);\n  });\n\n  it(\"builds initial range URL when running full sync\", async () => {\n    const requestedUrls: string[] = [];\n\n    globalThis.fetch = createFetchQueue(\n      [\n        createJsonResponse({\n          \"@odata.deltaLink\": \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$deltatoken=final\",\n          value: [],\n        }),\n      ],\n      requestedUrls,\n    );\n\n    await fetchCalendarEvents({\n      accessToken: \"token\",\n      calendarId: \"calendar/id:with chars\",\n      timeMax: new Date(\"2026-06-02T00:00:00.000Z\"),\n      timeMin: new Date(\"2026-06-01T00:00:00.000Z\"),\n    });\n\n    const [firstRequestUrl] = requestedUrls;\n    if (!firstRequestUrl) {\n      throw new Error(\"Expected first request URL\");\n    }\n\n    const parsedUrl = new URL(firstRequestUrl);\n    expect(parsedUrl.pathname).toContain(\n      \"/me/calendars/calendar%2Fid%3Awith%20chars/calendarView/delta\",\n    );\n    expect(parsedUrl.searchParams.get(\"startDateTime\")).toBe(\"2026-06-01T00:00:00.000Z\");\n    expect(parsedUrl.searchParams.get(\"endDateTime\")).toBe(\"2026-06-02T00:00:00.000Z\");\n    expect(parsedUrl.searchParams.get(\"$select\")).toBe(\n      \"id,iCalUId,subject,body,location,start,end,isAllDay,showAs,categories\",\n    );\n  });\n\n  it(\"returns full-sync-required when Microsoft responds with gone\", async () => {\n    globalThis.fetch = createFetchQueue([new Response(null, { status: 410 })], []);\n\n    const fetchResult = await fetchCalendarEvents({\n      accessToken: \"token\",\n      calendarId: \"calendar-id\",\n      deltaLink: \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$deltatoken=original\",\n    });\n\n    expect(fetchResult).toEqual({ events: [], fullSyncRequired: true });\n  });\n\n  it(\"throws auth-required error details on forbidden response\", async () => {\n    globalThis.fetch = createFetchQueue([new Response(null, { status: 403 })], []);\n\n    try {\n      await fetchCalendarEvents({\n        accessToken: \"token\",\n        calendarId: \"calendar-id\",\n        deltaLink: \"https://graph.microsoft.com/v1.0/me/calendars/cal-1/calendarView/delta?$deltatoken=original\",\n      });\n      throw new Error(\"Expected fetchCalendarEvents to throw\");\n    } catch (error) {\n      expect(error).toBeInstanceOf(EventsFetchError);\n\n      if (!(error instanceof EventsFetchError)) {\n        throw error;\n      }\n\n      expect(error.status).toBe(403);\n      expect(error.authRequired).toBe(true);\n      expect(error.message).toContain(\"Failed to fetch events: 403\");\n    }\n  });\n});\n\ndescribe(\"parseOutlookEvents\", () => {\n  it(\"parses valid events and normalizes UTC date strings\", () => {\n    const parsedEvents = parseOutlookEvents([createOutlookEvent({})]);\n\n    expect(parsedEvents).toHaveLength(1);\n\n    const [parsedEvent] = parsedEvents;\n    if (!parsedEvent) {\n      throw new Error(\"Expected parsed event\");\n    }\n\n    expect(parsedEvent.uid).toBe(\"external-uid-1\");\n    expect(parsedEvent.startTime.toISOString()).toBe(\"2026-03-08T14:00:00.000Z\");\n    expect(parsedEvent.endTime.toISOString()).toBe(\"2026-03-08T15:00:00.000Z\");\n    expect(parsedEvent.startTimeZone).toBe(\"UTC\");\n  });\n\n  it(\"skips keeper-managed and malformed events\", () => {\n    const validEvent = createOutlookEvent({\n      iCalUId: \"external-uid-2\",\n      id: \"outlook-event-id-2\",\n    });\n    const keeperEvent = createOutlookEvent({\n      iCalUId: \"internal-event@keeper.sh\",\n      id: \"outlook-event-id-3\",\n    });\n    const malformedEvent = createOutlookEvent({\n      end: { dateTime: \"2026-03-08T15:00:00\" },\n      iCalUId: \"external-uid-3\",\n      id: \"outlook-event-id-4\",\n      start: { dateTime: \"2026-03-08T14:00:00\", timeZone: \"UTC\" },\n    });\n\n    const parsedEvents = parseOutlookEvents([validEvent, keeperEvent, malformedEvent]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.uid).toBe(\"external-uid-2\");\n  });\n\n  it(\"skips events marked with the keeper category\", () => {\n    const validEvent = createOutlookEvent({\n      iCalUId: \"external-uid-6\",\n      id: \"outlook-event-id-6\",\n    });\n\n    const keeperCategoryEvent = createOutlookEvent({\n      categories: [\"keeper.sh\"],\n      iCalUId: \"external-uid-7\",\n      id: \"outlook-event-id-7\",\n    });\n\n    const parsedEvents = parseOutlookEvents([validEvent, keeperCategoryEvent]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.uid).toBe(\"external-uid-6\");\n  });\n\n  it(\"preserves working elsewhere availability\", () => {\n    const parsedEvents = parseOutlookEvents([\n      createOutlookEvent({\n        iCalUId: \"external-uid-4\",\n        showAs: \"workingElsewhere\",\n      }),\n    ]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.availability).toBe(\"workingElsewhere\");\n  });\n\n  it(\"preserves free availability\", () => {\n    const parsedEvents = parseOutlookEvents([\n      createOutlookEvent({\n        iCalUId: \"external-uid-5\",\n        showAs: \"free\",\n      }),\n    ]);\n\n    expect(parsedEvents).toHaveLength(1);\n    expect(parsedEvents[0]?.availability).toBe(\"free\");\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tests/utils/safe-fetch.test.ts",
    "content": "import { describe, it, expect, vi, beforeEach, afterEach } from \"vitest\";\nimport { validateUrlSafety, createSafeFetch, UrlSafetyError } from \"../../src/utils/safe-fetch\";\nimport type { SafeFetchOptions } from \"../../src/utils/safe-fetch\";\n\nconst { mockResolve4, mockResolve6 } = vi.hoisted(() => ({\n  mockResolve4: vi.fn<(hostname: string) => Promise<string[]>>(),\n  mockResolve6: vi.fn<(hostname: string) => Promise<string[]>>(),\n}));\n\nvi.mock(\"node:dns/promises\", () => ({\n  resolve4: mockResolve4,\n  resolve6: mockResolve6,\n}));\n\nconst enabledOptions: SafeFetchOptions = { blockPrivateResolution: true };\n\nbeforeEach(() => {\n  mockResolve4.mockReset();\n  mockResolve6.mockReset();\n\n  mockResolve6.mockRejectedValue(new Error(\"no AAAA records\"));\n});\n\ndescribe(\"validateUrlSafety\", () => {\n  describe(\"scheme validation (always enforced)\", () => {\n    it(\"rejects file:// URLs\", async () => {\n      await expect(validateUrlSafety(\"file:///etc/passwd\")).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects ftp:// URLs\", async () => {\n      await expect(validateUrlSafety(\"ftp://server/file\")).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects data: URLs\", async () => {\n      await expect(validateUrlSafety(\"data:text/html,<h1>test</h1>\")).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects non-http schemes even without blockPrivateResolution\", async () => {\n      await expect(validateUrlSafety(\"file:///etc/passwd\", {})).rejects.toThrow(UrlSafetyError);\n    });\n  });\n\n  describe(\"when blockPrivateResolution is true\", () => {\n    it(\"allows http:// URLs with public IPs\", async () => {\n      mockResolve4.mockResolvedValue([\"93.184.216.34\"]);\n      await expect(validateUrlSafety(\"http://example.com/cal.ics\", enabledOptions)).resolves.toBeUndefined();\n    });\n\n    it(\"allows https:// URLs with public IPs\", async () => {\n      mockResolve4.mockResolvedValue([\"93.184.216.34\"]);\n      await expect(validateUrlSafety(\"https://example.com/cal.ics\", enabledOptions)).resolves.toBeUndefined();\n    });\n\n    it(\"rejects loopback IPv4\", async () => {\n      await expect(validateUrlSafety(\"http://127.0.0.1/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects loopback IPv6\", async () => {\n      await expect(validateUrlSafety(\"http://[::1]/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects private 10.x.x.x\", async () => {\n      await expect(validateUrlSafety(\"http://10.0.0.1/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects private 172.16.x.x\", async () => {\n      await expect(validateUrlSafety(\"http://172.16.0.1/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects private 192.168.x.x\", async () => {\n      await expect(validateUrlSafety(\"http://192.168.1.1/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects link-local 169.254.x.x (AWS metadata)\", async () => {\n      await expect(validateUrlSafety(\"http://169.254.169.254/latest/meta-data/\", enabledOptions)).rejects.toThrow(\n        UrlSafetyError,\n      );\n    });\n\n    it(\"rejects 0.0.0.0\", async () => {\n      await expect(validateUrlSafety(\"http://0.0.0.0/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"allows public IP literals\", async () => {\n      await expect(validateUrlSafety(\"http://93.184.216.34/cal.ics\", enabledOptions)).resolves.toBeUndefined();\n    });\n\n    it(\"rejects hostnames resolving to private IPs\", async () => {\n      mockResolve4.mockResolvedValue([\"192.168.1.1\"]);\n      await expect(validateUrlSafety(\"http://evil.example.com/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects hostnames resolving to loopback\", async () => {\n      mockResolve4.mockResolvedValue([\"127.0.0.1\"]);\n      await expect(validateUrlSafety(\"http://evil.example.com/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects if any resolved address is private\", async () => {\n      mockResolve4.mockResolvedValue([\"93.184.216.34\", \"10.0.0.1\"]);\n      await expect(validateUrlSafety(\"http://mixed.example.com/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"allows hostnames resolving to public IPs\", async () => {\n      mockResolve4.mockResolvedValue([\"93.184.216.34\"]);\n      await expect(validateUrlSafety(\"https://calendar.google.com/basic.ics\", enabledOptions)).resolves.toBeUndefined();\n    });\n\n    it(\"rejects hostnames that resolve to no addresses\", async () => {\n      mockResolve4.mockRejectedValue(new Error(\"ENOTFOUND\"));\n      mockResolve6.mockRejectedValue(new Error(\"ENOTFOUND\"));\n      await expect(validateUrlSafety(\"http://nonexistent.example.com/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"checks IPv6 resolution too\", async () => {\n      mockResolve4.mockRejectedValue(new Error(\"no A records\"));\n      mockResolve6.mockResolvedValue([\"::1\"]);\n      await expect(validateUrlSafety(\"http://ipv6only.example.com/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"rejects IPv4-mapped IPv6 private addresses\", async () => {\n      mockResolve4.mockRejectedValue(new Error(\"no A records\"));\n      mockResolve6.mockResolvedValue([\"::ffff:127.0.0.1\"]);\n      await expect(validateUrlSafety(\"http://mapped.example.com/\", enabledOptions)).rejects.toThrow(UrlSafetyError);\n    });\n  });\n\n  describe(\"allowedPrivateHosts\", () => {\n    it(\"allows a private IP with port when host:port is in the whitelist\", async () => {\n      const options: SafeFetchOptions = { blockPrivateResolution: true, allowedPrivateHosts: new Set([\"192.168.1.50:5232\"]) };\n      await expect(validateUrlSafety(\"http://192.168.1.50:5232/\", options)).resolves.toBeUndefined();\n    });\n\n    it(\"allows a private IP on default port when hostname is in the whitelist\", async () => {\n      const options: SafeFetchOptions = { blockPrivateResolution: true, allowedPrivateHosts: new Set([\"192.168.1.50\"]) };\n      await expect(validateUrlSafety(\"http://192.168.1.50/\", options)).resolves.toBeUndefined();\n    });\n\n    it(\"allows a private hostname with port when host:port is in the whitelist\", async () => {\n      mockResolve4.mockResolvedValue([\"10.0.0.5\"]);\n      const options: SafeFetchOptions = { blockPrivateResolution: true, allowedPrivateHosts: new Set([\"radicale.local:5232\"]) };\n      await expect(validateUrlSafety(\"http://radicale.local:5232/\", options)).resolves.toBeUndefined();\n    });\n\n    it(\"rejects when port differs from whitelist entry\", async () => {\n      const options: SafeFetchOptions = { blockPrivateResolution: true, allowedPrivateHosts: new Set([\"192.168.1.50:5232\"]) };\n      await expect(validateUrlSafety(\"http://192.168.1.50:9999/\", options)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"still rejects private IPs not in the whitelist\", async () => {\n      const options: SafeFetchOptions = { blockPrivateResolution: true, allowedPrivateHosts: new Set([\"192.168.1.50\"]) };\n      await expect(validateUrlSafety(\"http://10.0.0.1/\", options)).rejects.toThrow(UrlSafetyError);\n    });\n\n    it(\"still rejects non-http schemes even with whitelist\", async () => {\n      const options: SafeFetchOptions = { blockPrivateResolution: true, allowedPrivateHosts: new Set([\"anything\"]) };\n      await expect(validateUrlSafety(\"file:///etc/passwd\", options)).rejects.toThrow(UrlSafetyError);\n    });\n  });\n\n  describe(\"when blockPrivateResolution is false (default)\", () => {\n    it(\"allows private IP literals\", async () => {\n      await expect(validateUrlSafety(\"http://192.168.1.1/\")).resolves.toBeUndefined();\n    });\n\n    it(\"allows loopback\", async () => {\n      await expect(validateUrlSafety(\"http://127.0.0.1/\")).resolves.toBeUndefined();\n    });\n\n    it(\"allows hostnames resolving to private IPs\", async () => {\n      mockResolve4.mockResolvedValue([\"10.0.0.1\"]);\n      await expect(validateUrlSafety(\"http://radicale.local/\")).resolves.toBeUndefined();\n    });\n  });\n});\n\ntype FetchFn = (input: string | Request | URL, init?: RequestInit) => Promise<Response>;\n\nconst installMockFetch = (mockFn: ReturnType<typeof vi.fn<FetchFn>>): void => {\n  Object.assign(globalThis, { fetch: mockFn });\n};\n\ndescribe(\"createSafeFetch\", () => {\n  const originalFetch = globalThis.fetch;\n\n  afterEach(() => {\n    globalThis.fetch = originalFetch;\n  });\n\n  it(\"sets redirect to manual\", async () => {\n    mockResolve4.mockResolvedValue([\"93.184.216.34\"]);\n\n    const mockFetch = vi.fn<FetchFn>();\n    mockFetch.mockResolvedValue(new Response(\"ok\", { status: 200 }));\n    installMockFetch(mockFetch);\n\n    const safeFetch = createSafeFetch(enabledOptions);\n    await safeFetch(\"https://example.com/cal.ics\");\n\n    expect(mockFetch).toHaveBeenCalledTimes(1);\n    const callInit = mockFetch.mock.calls[0]?.[1];\n    expect(callInit?.redirect).toBe(\"manual\");\n  });\n\n  it(\"rejects redirects to private IPs\", async () => {\n    mockResolve4.mockResolvedValueOnce([\"93.184.216.34\"]);\n\n    const mockFetch = vi.fn<FetchFn>();\n    mockFetch.mockResolvedValueOnce(\n      new Response(null, {\n        status: 302,\n        headers: { location: \"http://127.0.0.1/internal\" },\n      }),\n    );\n    installMockFetch(mockFetch);\n\n    const safeFetch = createSafeFetch(enabledOptions);\n    await expect(safeFetch(\"https://example.com/cal.ics\")).rejects.toThrow(UrlSafetyError);\n  });\n\n  it(\"follows safe redirects\", async () => {\n    mockResolve4.mockResolvedValue([\"93.184.216.34\"]);\n\n    const mockFetch = vi.fn<FetchFn>();\n    mockFetch.mockResolvedValueOnce(\n      new Response(null, {\n        status: 301,\n        headers: { location: \"https://example.com/new-cal.ics\" },\n      }),\n    );\n    mockFetch.mockResolvedValueOnce(new Response(\"calendar data\", { status: 200 }));\n    installMockFetch(mockFetch);\n\n    const safeFetch = createSafeFetch(enabledOptions);\n    const response = await safeFetch(\"https://example.com/cal.ics\");\n\n    expect(response.status).toBe(200);\n    expect(mockFetch).toHaveBeenCalledTimes(2);\n  });\n\n  it(\"enforces max redirect depth\", async () => {\n    mockResolve4.mockResolvedValue([\"93.184.216.34\"]);\n\n    const mockFetch = vi.fn<FetchFn>();\n    mockFetch.mockImplementation(() =>\n      Promise.resolve(\n        new Response(null, {\n          status: 302,\n          headers: { location: \"https://example.com/redirect\" },\n        }),\n      ),\n    );\n    installMockFetch(mockFetch);\n\n    const safeFetch = createSafeFetch(enabledOptions);\n    await expect(safeFetch(\"https://example.com/cal.ics\")).rejects.toThrow(\"Too many redirects\");\n  });\n\n  it(\"rejects initial request to private IP when enabled\", async () => {\n    const safeFetch = createSafeFetch(enabledOptions);\n    await expect(safeFetch(\"http://10.0.0.1/internal\")).rejects.toThrow(UrlSafetyError);\n  });\n\n  it(\"allows private IPs when blockPrivateResolution is false\", async () => {\n    const mockFetch = vi.fn<FetchFn>();\n    mockFetch.mockResolvedValue(new Response(\"ok\", { status: 200 }));\n    installMockFetch(mockFetch);\n\n    const safeFetch = createSafeFetch();\n    const response = await safeFetch(\"http://10.0.0.1/cal.ics\");\n\n    expect(response.status).toBe(200);\n  });\n\n  it(\"allows whitelisted private hosts when enabled\", async () => {\n    const mockFetch = vi.fn<FetchFn>();\n    mockFetch.mockResolvedValue(new Response(\"ok\", { status: 200 }));\n    installMockFetch(mockFetch);\n\n    const safeFetch = createSafeFetch({ blockPrivateResolution: true, allowedPrivateHosts: new Set([\"10.0.0.1\"]) });\n    const response = await safeFetch(\"http://10.0.0.1/cal.ics\");\n\n    expect(response.status).toBe(200);\n  });\n});\n"
  },
  {
    "path": "packages/calendar/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/calendar/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/constants/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/constants\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/constants/src/constants/http.ts",
    "content": "export const HTTP_STATUS = {\n  BAD_GATEWAY: 502,\n  BAD_REQUEST: 400,\n  CONFLICT: 409,\n  CREATED: 201,\n  FORBIDDEN: 403,\n  INTERNAL_SERVER_ERROR: 500,\n  METHOD_NOT_ALLOWED: 405,\n  NOT_FOUND: 404,\n  NOT_IMPLEMENTED: 501,\n  NO_CONTENT: 204,\n  OK: 200,\n  PAYMENT_REQUIRED: 402,\n  SERVICE_UNAVAILABLE: 503,\n  TOO_MANY_REQUESTS: 429,\n  UNAUTHORIZED: 401,\n} as const;\n\nexport type HttpStatus = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\n"
  },
  {
    "path": "packages/constants/src/constants/scopes.ts",
    "content": "const KEEPER_API_READ_SCOPE = \"keeper.read\";\nconst KEEPER_API_SOURCE_SCOPE = \"keeper.sources.read\";\nconst KEEPER_API_DESTINATION_SCOPE = \"keeper.destinations.read\";\nconst KEEPER_API_MAPPING_SCOPE = \"keeper.mappings.read\";\nconst KEEPER_API_EVENT_SCOPE = \"keeper.events.read\";\nconst KEEPER_API_SYNC_SCOPE = \"keeper.sync-status.read\";\n\nconst KEEPER_API_SCOPES = [\n  KEEPER_API_READ_SCOPE,\n  KEEPER_API_SOURCE_SCOPE,\n  KEEPER_API_DESTINATION_SCOPE,\n  KEEPER_API_MAPPING_SCOPE,\n  KEEPER_API_EVENT_SCOPE,\n  KEEPER_API_SYNC_SCOPE,\n];\n\nconst KEEPER_API_RESOURCE_SCOPES = [...KEEPER_API_SCOPES];\n\nconst KEEPER_API_DEFAULT_SCOPE = [\"offline_access\", ...KEEPER_API_RESOURCE_SCOPES].join(\" \");\n\nexport {\n  KEEPER_API_DEFAULT_SCOPE,\n  KEEPER_API_DESTINATION_SCOPE,\n  KEEPER_API_EVENT_SCOPE,\n  KEEPER_API_MAPPING_SCOPE,\n  KEEPER_API_READ_SCOPE,\n  KEEPER_API_RESOURCE_SCOPES,\n  KEEPER_API_SCOPES,\n  KEEPER_API_SOURCE_SCOPE,\n  KEEPER_API_SYNC_SCOPE,\n};\n"
  },
  {
    "path": "packages/constants/src/constants/time.ts",
    "content": "const MS_PER_SECOND = 1000;\nconst SECONDS_PER_MINUTE = 60;\nconst MINUTES_PER_HOUR = 60;\nconst HOURS_PER_DAY = 24;\nconst DAYS_PER_WEEK = 7;\nconst REFRESH_BUFFER_MINUTES = 5;\nconst RATE_LIMIT_SECONDS = 60;\n\nconst MS_PER_MINUTE = SECONDS_PER_MINUTE * MS_PER_SECOND;\nconst MS_PER_HOUR = MINUTES_PER_HOUR * MS_PER_MINUTE;\nconst MS_PER_DAY = HOURS_PER_DAY * MS_PER_HOUR;\nconst MS_PER_WEEK = DAYS_PER_WEEK * MS_PER_DAY;\n\nconst SECONDS_PER_HOUR = MINUTES_PER_HOUR * SECONDS_PER_MINUTE;\nconst SECONDS_PER_DAY = HOURS_PER_DAY * SECONDS_PER_HOUR;\n\nconst TOOLTIP_CLEAR_DELAY_MS = 1500;\nconst TOAST_TIMEOUT_MS = 3000;\nconst WEBSOCKET_RECONNECT_DELAY_MS = 3000;\nconst TOKEN_TTL_MS = 30_000;\nconst TOKEN_REFRESH_BUFFER_MS = REFRESH_BUFFER_MINUTES * MS_PER_MINUTE;\nconst RATE_LIMIT_DELAY_MS = RATE_LIMIT_SECONDS * MS_PER_SECOND;\nconst SYNC_TTL_SECONDS = SECONDS_PER_DAY;\n\nconst KEEPER_EVENT_SUFFIX = \"@keeper.sh\";\nconst KEEPER_USER_EVENT_SUFFIX = \"@user.keeper.sh\";\nconst KEEPER_CATEGORY = \"keeper.sh\";\n\nexport {\n  MS_PER_SECOND,\n  MS_PER_MINUTE,\n  MS_PER_HOUR,\n  MS_PER_DAY,\n  MS_PER_WEEK,\n  SECONDS_PER_MINUTE,\n  SECONDS_PER_HOUR,\n  SECONDS_PER_DAY,\n  TOOLTIP_CLEAR_DELAY_MS,\n  TOAST_TIMEOUT_MS,\n  WEBSOCKET_RECONNECT_DELAY_MS,\n  TOKEN_TTL_MS,\n  TOKEN_REFRESH_BUFFER_MS,\n  RATE_LIMIT_DELAY_MS,\n  SYNC_TTL_SECONDS,\n  KEEPER_EVENT_SUFFIX,\n  KEEPER_USER_EVENT_SUFFIX,\n  KEEPER_CATEGORY,\n};\n"
  },
  {
    "path": "packages/constants/src/index.ts",
    "content": "export * from \"./constants/time\";\nexport * from \"./constants/http\";\nexport * from \"./constants/scopes\";\n"
  },
  {
    "path": "packages/constants/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/data-schemas/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/data-schemas\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"types\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./client\": \"./src/client.ts\"\n  },\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"arktype\": \"^2.2.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/data-schemas/src/client.ts",
    "content": "interface SocketMessage {\n  data?: unknown;\n  event: string;\n}\n\ninterface SyncAggregate {\n  progressPercent: number;\n  seq: number;\n  syncEventsProcessed: number;\n  syncEventsRemaining: number;\n  syncEventsTotal: number;\n  syncing: boolean;\n  lastSyncedAt?: string | null;\n}\n\nconst isSocketMessage = (value: unknown): value is SocketMessage => {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  return \"event\" in value && typeof value.event === \"string\";\n};\n\nconst isSyncAggregate = (value: unknown): value is SyncAggregate => {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n\n  return (\n    \"progressPercent\" in value &&\n    typeof value.progressPercent === \"number\" &&\n    \"seq\" in value &&\n    typeof value.seq === \"number\" &&\n    \"syncEventsProcessed\" in value &&\n    typeof value.syncEventsProcessed === \"number\" &&\n    \"syncEventsRemaining\" in value &&\n    typeof value.syncEventsRemaining === \"number\" &&\n    \"syncEventsTotal\" in value &&\n    typeof value.syncEventsTotal === \"number\" &&\n    \"syncing\" in value &&\n    typeof value.syncing === \"boolean\"\n  );\n};\n\nexport { type SocketMessage, type SyncAggregate, isSocketMessage, isSyncAggregate };\n"
  },
  {
    "path": "packages/data-schemas/src/index.ts",
    "content": "import { type } from \"arktype\";\n\nconst proxyableMethods = type(\"'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS'\");\n\ntype ProxyableMethods = typeof proxyableMethods.infer;\n\nconst planSchema = type(\"'free' | 'pro'\");\ntype Plan = typeof planSchema.infer;\n\nconst billingPeriodSchema = type(\"'monthly' | 'yearly'\");\ntype BillingPeriod = typeof billingPeriodSchema.infer;\n\nconst feedbackRequestSchema = type({\n  message: \"string\",\n  type: \"'feedback' | 'report'\",\n  \"wantsFollowUp?\": \"boolean\",\n  \"+\": \"reject\",\n});\ntype FeedbackRequest = typeof feedbackRequestSchema.infer;\n\nconst createSourceSchema = type({\n  name: \"string\",\n  url: \"string\",\n  \"+\": \"reject\",\n});\n\ntype CreateSource = typeof createSourceSchema.infer;\n\nconst stringSchema = type(\"string\");\n\nconst googleEventSchema = type({\n  \"description?\": \"string\",\n  \"end?\": { \"date?\": \"string\", \"dateTime?\": \"string\", \"timeZone?\": \"string\" },\n  \"eventType?\": \"string\",\n  \"iCalUID?\": \"string\",\n  \"id?\": \"string\",\n  \"location?\": \"string\",\n  \"recurrence?\": \"string[]\",\n  \"start?\": { \"date?\": \"string\", \"dateTime?\": \"string\", \"timeZone?\": \"string\" },\n  \"status?\": \"'confirmed' | 'tentative' | 'cancelled'\",\n  \"summary?\": \"string\",\n  \"transparency?\": \"string\",\n  \"visibility?\": \"string\",\n  \"workingLocationProperties?\": {\n    \"customLocation?\": { \"label?\": \"string\" },\n    \"homeOffice?\": \"unknown\",\n    \"officeLocation?\": { \"buildingId?\": \"string\", \"deskId?\": \"string\", \"floorId?\": \"string\", \"floorSectionId?\": \"string\", \"label?\": \"string\" },\n    \"type?\": \"string\",\n  },\n});\ntype GoogleEvent = typeof googleEventSchema.infer;\n\nconst googleEventListSchema = type({\n  \"items?\": googleEventSchema.array(),\n  \"nextPageToken?\": \"string\",\n  \"nextSyncToken?\": \"string\",\n});\ntype GoogleEventList = typeof googleEventListSchema.infer;\n\nconst googleAttendeeSchema = type({\n  \"email?\": \"string\",\n  \"responseStatus?\": \"string\",\n  \"self?\": \"boolean\",\n});\ntype GoogleAttendee = typeof googleAttendeeSchema.infer;\n\nconst googleEventWithAttendeesSchema = googleEventSchema.and({\n  \"attendees?\": googleAttendeeSchema.array(),\n  \"organizer?\": { \"email?\": \"string\", \"displayName?\": \"string\" },\n});\ntype GoogleEventWithAttendees = typeof googleEventWithAttendeesSchema.infer;\n\nconst googleEventWithAttendeesListSchema = type({\n  \"items?\": googleEventWithAttendeesSchema.array(),\n  \"nextPageToken?\": \"string\",\n});\ntype GoogleEventWithAttendeesList = typeof googleEventWithAttendeesListSchema.infer;\n\nconst googleApiErrorSchema = type({\n  \"error?\": {\n    \"code?\": \"number\",\n    \"message?\": \"string\",\n    \"status?\": \"string\",\n    \"errors?\": type({ \"reason?\": \"string\" }).array(),\n    \"details?\": type({ \"reason?\": \"string\" }).array(),\n  },\n});\ntype GoogleApiError = typeof googleApiErrorSchema.infer;\n\nconst googleTokenResponseSchema = type({\n  access_token: \"string\",\n  expires_in: \"number\",\n  \"refresh_token?\": \"string\",\n  scope: \"string\",\n  token_type: \"string\",\n});\ntype GoogleTokenResponse = typeof googleTokenResponseSchema.infer;\n\nconst googleUserInfoSchema = type({\n  email: \"string\",\n  \"family_name?\": \"string\",\n  \"given_name?\": \"string\",\n  id: \"string\",\n  \"name?\": \"string\",\n  \"picture?\": \"string\",\n  \"verified_email?\": \"boolean\",\n});\ntype GoogleUserInfo = typeof googleUserInfoSchema.infer;\n\nconst microsoftTokenResponseSchema = type({\n  access_token: \"string\",\n  expires_in: \"number\",\n  \"refresh_token?\": \"string\",\n  scope: \"string\",\n  token_type: \"string\",\n});\ntype MicrosoftTokenResponse = typeof microsoftTokenResponseSchema.infer;\n\nconst microsoftUserInfoSchema = type({\n  \"displayName?\": \"string\",\n  id: \"string\",\n  \"mail?\": \"string | null\",\n  \"userPrincipalName?\": \"string\",\n});\ntype MicrosoftUserInfo = typeof microsoftUserInfoSchema.infer;\n\nconst outlookEventSchema = type({\n  \"@removed?\": { \"reason?\": \"'deleted' | 'changed'\" },\n  \"body?\": type({ \"content?\": \"string\", \"contentType?\": \"string\" }).or(type(\"null\")),\n  \"categories?\": \"string[]\",\n  \"end?\": { \"dateTime?\": \"string\", \"timeZone?\": \"string\" },\n  \"iCalUId?\": \"string | null\",\n  \"id?\": \"string\",\n  \"isAllDay?\": \"boolean\",\n  \"location?\": { \"displayName?\": \"string\" },\n  \"showAs?\": \"string\",\n  \"start?\": { \"dateTime?\": \"string\", \"timeZone?\": \"string\" },\n  \"subject?\": \"string\",\n});\ntype OutlookEvent = typeof outlookEventSchema.infer;\n\nconst outlookEventListSchema = type({\n  \"@odata.deltaLink?\": \"string\",\n  \"@odata.nextLink?\": \"string\",\n  \"value?\": outlookEventSchema.array(),\n});\ntype OutlookEventList = typeof outlookEventListSchema.infer;\n\nconst outlookCalendarViewEventSchema = type({\n  \"id?\": \"string\",\n  \"iCalUId?\": \"string | null\",\n  \"subject?\": \"string\",\n  \"bodyPreview?\": \"string\",\n  \"location?\": { \"displayName?\": \"string\" },\n  \"start?\": { \"dateTime?\": \"string\", \"timeZone?\": \"string\" },\n  \"end?\": { \"dateTime?\": \"string\", \"timeZone?\": \"string\" },\n  \"isAllDay?\": \"boolean\",\n  \"responseStatus?\": { \"response?\": \"string\" },\n  \"organizer?\": { \"emailAddress?\": { \"address?\": \"string\", \"name?\": \"string\" } },\n});\ntype OutlookCalendarViewEvent = typeof outlookCalendarViewEventSchema.infer;\n\nconst outlookCalendarViewListSchema = type({\n  \"value?\": outlookCalendarViewEventSchema.array(),\n  \"@odata.nextLink?\": \"string\",\n});\ntype OutlookCalendarViewList = typeof outlookCalendarViewListSchema.infer;\n\nconst microsoftApiErrorSchema = type({\n  \"error?\": { \"code?\": \"string\", \"message?\": \"string\" },\n});\ntype MicrosoftApiError = typeof microsoftApiErrorSchema.infer;\n\nconst authSocialProvidersSchema = type({\n  google: \"boolean\",\n  microsoft: \"boolean\",\n  \"+\": \"reject\",\n});\ntype AuthSocialProviders = typeof authSocialProvidersSchema.infer;\n\nconst authCapabilitiesSchema = type({\n  commercialMode: \"boolean\",\n  credentialMode: \"'email' | 'username'\",\n  requiresEmailVerification: \"boolean\",\n  socialProviders: authSocialProvidersSchema,\n  supportsChangePassword: \"boolean\",\n  supportsPasskeys: \"boolean\",\n  supportsPasswordReset: \"boolean\",\n  \"+\": \"reject\",\n});\ntype AuthCapabilities = typeof authCapabilitiesSchema.infer;\n\nconst socketMessageSchema = type({\n  \"data?\": \"unknown\",\n  event: \"string\",\n});\ntype SocketMessage = typeof socketMessageSchema.infer;\n\nconst syncOperationSchema = type({\n  eventTime: \"string\",\n  type: \"'add' | 'remove'\",\n});\ntype SyncOperation = typeof syncOperationSchema.infer;\n\nconst syncStatusSchema = type({\n  destinationId: \"string\",\n  \"error?\": \"string\",\n  inSync: \"boolean\",\n  \"lastOperation?\": syncOperationSchema,\n  \"lastSyncedAt?\": \"string\",\n  localEventCount: \"number\",\n  \"needsReauthentication?\": \"boolean\",\n  \"progress?\": { current: \"number\", total: \"number\" },\n  remoteEventCount: \"number\",\n  \"stage?\": \"'fetching' | 'comparing' | 'processing' | 'error'\",\n  status: \"'idle' | 'syncing' | 'error'\",\n});\ntype SyncStatus = typeof syncStatusSchema.infer;\n\nconst syncAggregateSchema = type({\n  progressPercent: \"number\",\n  seq: \"number\",\n  syncEventsProcessed: \"number\",\n  syncEventsRemaining: \"number\",\n  syncEventsTotal: \"number\",\n  syncing: \"boolean\",\n  \"lastSyncedAt?\": \"string | null\",\n});\ntype SyncAggregate = typeof syncAggregateSchema.infer;\n\nconst broadcastMessageSchema = type({\n  data: \"unknown\",\n  event: \"string\",\n  userId: \"string\",\n});\ntype BroadcastMessage = typeof broadcastMessageSchema.infer;\n\nconst userSchema = type({\n  \"email?\": \"string\",\n  \"emailVerified?\": \"boolean\",\n  id: \"string\",\n  \"name?\": \"string\",\n  \"username?\": \"string\",\n});\ntype User = typeof userSchema.infer;\n\nconst signUpBodySchema = type({\n  email: \"string\",\n  \"name?\": \"string\",\n  \"password?\": \"string\",\n  \"+\": \"reject\",\n});\ntype SignUpBody = typeof signUpBodySchema.infer;\n\nconst caldavDiscoverRequestSchema = type({\n  password: \"string\",\n  serverUrl: \"string\",\n  username: \"string\",\n  \"+\": \"reject\",\n});\ntype CalDAVDiscoverRequest = typeof caldavDiscoverRequestSchema.infer;\n\nconst caldavConnectRequestSchema = type({\n  calendarUrl: \"string\",\n  password: \"string\",\n  \"provider?\": \"string\",\n  serverUrl: \"string\",\n  username: \"string\",\n  \"+\": \"reject\",\n});\ntype CalDAVConnectRequest = typeof caldavConnectRequestSchema.infer;\n\nconst updateSourceDestinationsSchema = type({\n  destinationIds: \"string[]\",\n  \"+\": \"reject\",\n});\ntype UpdateSourceDestinations = typeof updateSourceDestinationsSchema.infer;\n\nconst checkoutSuccessEventSchema = type({\n  \"currency?\": \"string\",\n  \"id?\": \"string\",\n  \"totalAmount?\": \"number\",\n});\ntype CheckoutSuccessEvent = typeof checkoutSuccessEventSchema.infer;\n\nconst googleCalendarListEntrySchema = type({\n  accessRole: \"'freeBusyReader' | 'reader' | 'writer' | 'owner'\",\n  \"backgroundColor?\": \"string\",\n  \"description?\": \"string\",\n  \"foregroundColor?\": \"string\",\n  id: \"string\",\n  \"primary?\": \"boolean\",\n  summary: \"string\",\n});\ntype GoogleCalendarListEntry = typeof googleCalendarListEntrySchema.infer;\n\nconst googleCalendarListResponseSchema = type({\n  items: googleCalendarListEntrySchema.array(),\n  kind: \"'calendar#calendarList'\",\n  \"nextPageToken?\": \"string\",\n});\ntype GoogleCalendarListResponse = typeof googleCalendarListResponseSchema.infer;\n\nconst createOAuthSourceSchema = type({\n  \"destinationId?\": \"string\",\n  externalCalendarId: \"string\",\n  name: \"string\",\n  \"oauthSourceCredentialId?\": \"string\",\n  \"syncFocusTime?\": \"boolean\",\n  \"syncOutOfOffice?\": \"boolean\",\n  \"+\": \"reject\",\n});\ntype CreateOAuthSource = typeof createOAuthSourceSchema.infer;\n\nconst createCalDAVSourceSchema = type({\n  authMethod: \"'basic' | 'digest'\",\n  calendarUrl: \"string\",\n  name: \"string\",\n  password: \"string\",\n  provider: \"'caldav' | 'fastmail' | 'icloud'\",\n  serverUrl: \"string\",\n  username: \"string\",\n  \"+\": \"reject\",\n});\ntype CreateCalDAVSource = typeof createCalDAVSourceSchema.infer;\n\nconst caldavDiscoverSourceSchema = type({\n  password: \"string\",\n  serverUrl: \"string\",\n  username: \"string\",\n  \"+\": \"reject\",\n});\ntype CalDAVDiscoverSource = typeof caldavDiscoverSourceSchema.infer;\n\nconst oauthCalendarSourceSchema = type({\n  createdAt: \"string\",\n  destinationId: \"string\",\n  email: \"string | null\",\n  externalCalendarId: \"string\",\n  id: \"string\",\n  name: \"string\",\n  provider: \"string\",\n});\ntype OAuthCalendarSource = typeof oauthCalendarSourceSchema.infer;\n\nconst updateOAuthSourceDestinationsSchema = type({\n  destinationIds: \"string[]\",\n  \"+\": \"reject\",\n});\ntype UpdateOAuthSourceDestinations = typeof updateOAuthSourceDestinationsSchema.infer;\n\nexport {\n  proxyableMethods,\n  planSchema,\n  billingPeriodSchema,\n  feedbackRequestSchema,\n  createSourceSchema,\n  stringSchema,\n  googleEventSchema,\n  googleEventListSchema,\n  googleAttendeeSchema,\n  googleEventWithAttendeesSchema,\n  googleEventWithAttendeesListSchema,\n  googleApiErrorSchema,\n  googleTokenResponseSchema,\n  googleUserInfoSchema,\n  microsoftTokenResponseSchema,\n  microsoftUserInfoSchema,\n  outlookEventSchema,\n  outlookEventListSchema,\n  outlookCalendarViewEventSchema,\n  outlookCalendarViewListSchema,\n  microsoftApiErrorSchema,\n  authSocialProvidersSchema,\n  authCapabilitiesSchema,\n  socketMessageSchema,\n  syncOperationSchema,\n  syncStatusSchema,\n  syncAggregateSchema,\n  broadcastMessageSchema,\n  userSchema,\n  signUpBodySchema,\n  caldavDiscoverRequestSchema,\n  caldavConnectRequestSchema,\n  updateSourceDestinationsSchema,\n  checkoutSuccessEventSchema,\n  googleCalendarListEntrySchema,\n  googleCalendarListResponseSchema,\n  createOAuthSourceSchema,\n  createCalDAVSourceSchema,\n  caldavDiscoverSourceSchema,\n  oauthCalendarSourceSchema,\n  updateOAuthSourceDestinationsSchema,\n};\n\nexport type {\n  ProxyableMethods,\n  Plan,\n  BillingPeriod,\n  FeedbackRequest,\n  CreateSource,\n  GoogleEvent,\n  GoogleEventList,\n  GoogleAttendee,\n  GoogleEventWithAttendees,\n  GoogleEventWithAttendeesList,\n  GoogleApiError,\n  GoogleTokenResponse,\n  GoogleUserInfo,\n  MicrosoftTokenResponse,\n  MicrosoftUserInfo,\n  OutlookEvent,\n  OutlookEventList,\n  OutlookCalendarViewEvent,\n  OutlookCalendarViewList,\n  MicrosoftApiError,\n  AuthSocialProviders,\n  AuthCapabilities,\n  SocketMessage,\n  SyncOperation,\n  SyncStatus,\n  SyncAggregate,\n  BroadcastMessage,\n  User,\n  SignUpBody,\n  CalDAVDiscoverRequest,\n  CalDAVConnectRequest,\n  UpdateSourceDestinations,\n  CheckoutSuccessEvent,\n  GoogleCalendarListEntry,\n  GoogleCalendarListResponse,\n  CreateOAuthSource,\n  CreateCalDAVSource,\n  CalDAVDiscoverSource,\n  OAuthCalendarSource,\n  UpdateOAuthSourceDestinations,\n};\n"
  },
  {
    "path": "packages/data-schemas/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/database/drizzle/0000_slimy_justice.sql",
    "content": "CREATE TABLE \"calendar_snapshots\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"ical\" text\n);\n"
  },
  {
    "path": "packages/database/drizzle/0001_complete_golden_guardian.sql",
    "content": "CREATE TABLE \"remote_ical_sources\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"url\" text\n);\n--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD COLUMN \"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0002_striped_queen_noir.sql",
    "content": "CREATE TABLE \"calendars\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"userId\" uuid NOT NULL,\n\t\"remoteUrl\" text NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"event_states\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"calendarId\" uuid NOT NULL,\n\t\"startTime\" timestamp NOT NULL,\n\t\"endTime\" timestamp NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"users\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"remote_ical_sources\" ALTER COLUMN \"url\" SET NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD COLUMN \"userId\" uuid NOT NULL;--> statement-breakpoint\nALTER TABLE \"remote_ical_sources\" ADD COLUMN \"userId\" uuid NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD CONSTRAINT \"calendars_userId_users_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"users\"(\"id\") ON DELETE no action ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD CONSTRAINT \"event_states_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE no action ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD CONSTRAINT \"calendar_snapshots_userId_users_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"users\"(\"id\") ON DELETE no action ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"remote_ical_sources\" ADD CONSTRAINT \"remote_ical_sources_userId_users_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"users\"(\"id\") ON DELETE no action ON UPDATE no action;"
  },
  {
    "path": "packages/database/drizzle/0003_nervous_vulcan.sql",
    "content": "ALTER TABLE \"calendar_snapshots\" ADD COLUMN \"public\" boolean DEFAULT false NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0004_strong_midnight.sql",
    "content": "ALTER TABLE \"calendar_snapshots\" ADD COLUMN \"json\" jsonb;"
  },
  {
    "path": "packages/database/drizzle/0005_dusty_nomad.sql",
    "content": "CREATE TABLE \"account\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"accountId\" text NOT NULL,\n\t\"providerId\" text NOT NULL,\n\t\"accessToken\" text,\n\t\"refreshToken\" text,\n\t\"accessTokenExpiresAt\" timestamp,\n\t\"refreshTokenExpiresAt\" timestamp,\n\t\"scope\" text,\n\t\"idToken\" text,\n\t\"password\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"session\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"token\" text NOT NULL,\n\t\"expiresAt\" timestamp NOT NULL,\n\t\"ipAddress\" text,\n\t\"userAgent\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\tCONSTRAINT \"session_token_unique\" UNIQUE(\"token\")\n);\n--> statement-breakpoint\nCREATE TABLE \"user\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"email\" text NOT NULL,\n\t\"emailVerified\" boolean DEFAULT false NOT NULL,\n\t\"image\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\tCONSTRAINT \"user_email_unique\" UNIQUE(\"email\")\n);\n--> statement-breakpoint\nCREATE TABLE \"verification\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"identifier\" text NOT NULL,\n\t\"value\" text NOT NULL,\n\t\"expiresAt\" timestamp NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"account\" ADD CONSTRAINT \"account_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"session\" ADD CONSTRAINT \"session_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;"
  },
  {
    "path": "packages/database/drizzle/0006_curious_orphan.sql",
    "content": "ALTER TABLE \"user\" ADD COLUMN \"username\" text;--> statement-breakpoint\nALTER TABLE \"user\" ADD CONSTRAINT \"user_username_unique\" UNIQUE(\"username\");"
  },
  {
    "path": "packages/database/drizzle/0007_heavy_pretty_boy.sql",
    "content": "DROP TABLE IF EXISTS \"users\" CASCADE;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" DROP CONSTRAINT IF EXISTS \"calendar_snapshots_userId_users_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"calendars\" DROP CONSTRAINT IF EXISTS \"calendars_userId_users_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"event_states\" DROP CONSTRAINT IF EXISTS \"event_states_calendarId_calendars_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"remote_ical_sources\" DROP CONSTRAINT IF EXISTS \"remote_ical_sources_userId_users_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ALTER COLUMN \"userId\" SET DATA TYPE text;--> statement-breakpoint\nALTER TABLE \"calendars\" ALTER COLUMN \"userId\" SET DATA TYPE text;--> statement-breakpoint\nALTER TABLE \"remote_ical_sources\" ALTER COLUMN \"userId\" SET DATA TYPE text;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD CONSTRAINT \"calendar_snapshots_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD CONSTRAINT \"calendars_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD CONSTRAINT \"event_states_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"remote_ical_sources\" ADD CONSTRAINT \"remote_ical_sources_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;\n"
  },
  {
    "path": "packages/database/drizzle/0008_vengeful_azazel.sql",
    "content": "ALTER TABLE \"remote_ical_sources\" ADD COLUMN \"name\" text NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0009_daily_thor_girl.sql",
    "content": "ALTER TABLE \"calendar_snapshots\" DROP CONSTRAINT \"calendar_snapshots_userId_user_id_fk\";\n--> statement-breakpoint\nDELETE FROM \"calendar_snapshots\";\n--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD COLUMN \"sourceId\" uuid NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD CONSTRAINT \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\" FOREIGN KEY (\"sourceId\") REFERENCES \"public\".\"remote_ical_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" DROP COLUMN \"userId\";"
  },
  {
    "path": "packages/database/drizzle/0010_heavy_prima.sql",
    "content": "ALTER TABLE \"calendar_snapshots\" ALTER COLUMN \"ical\" SET NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" DROP COLUMN \"json\";"
  },
  {
    "path": "packages/database/drizzle/0011_round_gorilla_man.sql",
    "content": "ALTER TABLE \"calendars\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nDROP TABLE \"calendars\" CASCADE;--> statement-breakpoint\nDELETE FROM \"event_states\";--> statement-breakpoint\nALTER TABLE \"event_states\" ADD COLUMN \"sourceId\" uuid NOT NULL;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD CONSTRAINT \"event_states_sourceId_remote_ical_sources_id_fk\" FOREIGN KEY (\"sourceId\") REFERENCES \"public\".\"remote_ical_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"event_states\" DROP COLUMN \"calendarId\";"
  },
  {
    "path": "packages/database/drizzle/0012_vengeful_thena.sql",
    "content": "CREATE TABLE \"user_subscriptions\" (\n\t\"userId\" text PRIMARY KEY NOT NULL,\n\t\"plan\" text DEFAULT 'free' NOT NULL,\n\t\"polarSubscriptionId\" text,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"user_subscriptions\" ADD CONSTRAINT \"user_subscriptions_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;"
  },
  {
    "path": "packages/database/drizzle/0013_parallel_union_jack.sql",
    "content": "CREATE TABLE \"sync_status\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"provider\" text NOT NULL,\n\t\"localEventCount\" integer DEFAULT 0 NOT NULL,\n\t\"remoteEventCount\" integer DEFAULT 0 NOT NULL,\n\t\"lastSyncedAt\" timestamp,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"sync_status\" ADD CONSTRAINT \"sync_status_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"sync_status_user_provider_idx\" ON \"sync_status\" USING btree (\"userId\",\"provider\");--> statement-breakpoint\nCREATE INDEX \"event_states_start_time_idx\" ON \"event_states\" USING btree (\"startTime\");"
  },
  {
    "path": "packages/database/drizzle/0014_modern_talon.sql",
    "content": "ALTER TABLE \"remote_ical_sources\" ADD COLUMN \"deletedAt\" timestamp;"
  },
  {
    "path": "packages/database/drizzle/0015_unique_impossible_man.sql",
    "content": "ALTER TABLE \"remote_ical_sources\" DROP COLUMN \"deletedAt\";"
  },
  {
    "path": "packages/database/drizzle/0016_salty_nextwave.sql",
    "content": "CREATE TABLE \"passkey\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"name\" text,\n\t\"publicKey\" text NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"webauthnUserID\" text NOT NULL,\n\t\"counter\" integer NOT NULL,\n\t\"deviceType\" text NOT NULL,\n\t\"backedUp\" boolean NOT NULL,\n\t\"transports\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"passkey\" ADD CONSTRAINT \"passkey_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;"
  },
  {
    "path": "packages/database/drizzle/0017_outstanding_eddie_brock.sql",
    "content": "ALTER TABLE \"passkey\" ADD COLUMN \"credentialID\" text NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0018_whole_loa.sql",
    "content": "ALTER TABLE \"passkey\" ALTER COLUMN \"createdAt\" DROP DEFAULT;--> statement-breakpoint\nALTER TABLE \"passkey\" ALTER COLUMN \"createdAt\" DROP NOT NULL;--> statement-breakpoint\nALTER TABLE \"passkey\" ADD COLUMN \"aaguid\" text;--> statement-breakpoint\nALTER TABLE \"passkey\" DROP COLUMN \"webauthnUserID\";"
  },
  {
    "path": "packages/database/drizzle/0019_tearful_doctor_doom.sql",
    "content": "CREATE TABLE \"calendar_destinations\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"provider\" text NOT NULL,\n\t\"accountId\" text NOT NULL,\n\t\"email\" text,\n\t\"accessToken\" text NOT NULL,\n\t\"refreshToken\" text NOT NULL,\n\t\"accessTokenExpiresAt\" timestamp NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" ADD CONSTRAINT \"calendar_destinations_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"calendar_destinations_user_provider_idx\" ON \"calendar_destinations\" USING btree (\"userId\",\"provider\");--> statement-breakpoint\nINSERT INTO \"calendar_destinations\" (\"id\", \"userId\", \"provider\", \"accountId\", \"accessToken\", \"refreshToken\", \"accessTokenExpiresAt\", \"createdAt\", \"updatedAt\")\nSELECT gen_random_uuid(), \"userId\", 'google', \"accountId\", \"accessToken\", \"refreshToken\", \"accessTokenExpiresAt\", \"createdAt\", \"updatedAt\"\nFROM \"account\"\nWHERE \"providerId\" = 'google'\n  AND \"accessToken\" IS NOT NULL\n  AND \"refreshToken\" IS NOT NULL\n  AND \"accessTokenExpiresAt\" IS NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0020_huge_talon.sql",
    "content": "DROP INDEX \"calendar_destinations_user_provider_idx\";--> statement-breakpoint\nCREATE UNIQUE INDEX \"calendar_destinations_user_provider_account_idx\" ON \"calendar_destinations\" USING btree (\"userId\",\"provider\",\"accountId\");"
  },
  {
    "path": "packages/database/drizzle/0021_icy_white_queen.sql",
    "content": "TRUNCATE TABLE \"sync_status\";--> statement-breakpoint\nALTER TABLE \"sync_status\" DROP CONSTRAINT \"sync_status_userId_user_id_fk\";--> statement-breakpoint\nDROP INDEX \"sync_status_user_provider_idx\";--> statement-breakpoint\nALTER TABLE \"sync_status\" ADD COLUMN \"destinationId\" uuid NOT NULL;--> statement-breakpoint\nALTER TABLE \"sync_status\" ADD CONSTRAINT \"sync_status_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"sync_status_destination_idx\" ON \"sync_status\" USING btree (\"destinationId\");--> statement-breakpoint\nALTER TABLE \"sync_status\" DROP COLUMN \"userId\";--> statement-breakpoint\nALTER TABLE \"sync_status\" DROP COLUMN \"provider\";"
  },
  {
    "path": "packages/database/drizzle/0022_lazy_avengers.sql",
    "content": "DROP INDEX \"calendar_destinations_user_provider_account_idx\";--> statement-breakpoint\nDELETE FROM \"calendar_destinations\" a USING \"calendar_destinations\" b\nWHERE a.id > b.id\n  AND a.provider = b.provider\n  AND a.\"accountId\" = b.\"accountId\";--> statement-breakpoint\nCREATE UNIQUE INDEX \"calendar_destinations_provider_account_idx\" ON \"calendar_destinations\" USING btree (\"provider\",\"accountId\");"
  },
  {
    "path": "packages/database/drizzle/0023_lyrical_genesis.sql",
    "content": "CREATE TABLE \"caldav_credentials\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"serverUrl\" text NOT NULL,\n\t\"calendarUrl\" text NOT NULL,\n\t\"username\" text NOT NULL,\n\t\"encryptedPassword\" text NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_credentials\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"accessToken\" text NOT NULL,\n\t\"refreshToken\" text NOT NULL,\n\t\"expiresAt\" timestamp NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" ADD COLUMN \"oauthCredentialId\" uuid;--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" ADD COLUMN \"caldavCredentialId\" uuid;--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" ADD CONSTRAINT \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\" FOREIGN KEY (\"oauthCredentialId\") REFERENCES \"public\".\"oauth_credentials\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" ADD CONSTRAINT \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\" FOREIGN KEY (\"caldavCredentialId\") REFERENCES \"public\".\"caldav_credentials\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" DROP COLUMN \"accessToken\";--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" DROP COLUMN \"refreshToken\";--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" DROP COLUMN \"accessTokenExpiresAt\";"
  },
  {
    "path": "packages/database/drizzle/0024_aberrant_wallop.sql",
    "content": "CREATE TABLE \"event_mappings\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"eventStateId\" uuid NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"destinationEventUid\" text NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"event_states\" ADD COLUMN \"sourceEventUid\" text;--> statement-breakpoint\nALTER TABLE \"event_mappings\" ADD CONSTRAINT \"event_mappings_eventStateId_event_states_id_fk\" FOREIGN KEY (\"eventStateId\") REFERENCES \"public\".\"event_states\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"event_mappings\" ADD CONSTRAINT \"event_mappings_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"event_mappings_event_dest_idx\" ON \"event_mappings\" USING btree (\"eventStateId\",\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"event_mappings_destination_idx\" ON \"event_mappings\" USING btree (\"destinationId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"event_states_identity_idx\" ON \"event_states\" USING btree (\"sourceId\",\"sourceEventUid\",\"startTime\",\"endTime\");"
  },
  {
    "path": "packages/database/drizzle/0025_powerful_sentinels.sql",
    "content": "DELETE FROM \"event_mappings\";--> statement-breakpoint\nALTER TABLE \"event_mappings\" ADD COLUMN \"startTime\" timestamp NOT NULL;--> statement-breakpoint\nALTER TABLE \"event_mappings\" ADD COLUMN \"endTime\" timestamp NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0026_typical_impossible_man.sql",
    "content": "ALTER TABLE \"event_mappings\" ADD COLUMN \"deleteIdentifier\" text;--> statement-breakpoint\nUPDATE \"event_mappings\" SET \"deleteIdentifier\" = \"destinationEventUid\" WHERE \"deleteIdentifier\" IS NULL;"
  },
  {
    "path": "packages/database/drizzle/0027_loose_hydra.sql",
    "content": "ALTER TABLE \"calendar_destinations\" ADD COLUMN \"needsReauthentication\" boolean DEFAULT false NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0028_lush_sumo.sql",
    "content": "CREATE TABLE \"source_destination_mappings\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"sourceId\" uuid NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD CONSTRAINT \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\" FOREIGN KEY (\"sourceId\") REFERENCES \"public\".\"remote_ical_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD CONSTRAINT \"source_destination_mappings_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"source_destination_mapping_idx\" ON \"source_destination_mappings\" USING btree (\"sourceId\",\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"source_destination_mappings_source_idx\" ON \"source_destination_mappings\" USING btree (\"sourceId\");--> statement-breakpoint\nCREATE INDEX \"source_destination_mappings_destination_idx\" ON \"source_destination_mappings\" USING btree (\"destinationId\");--> statement-breakpoint\nINSERT INTO \"source_destination_mappings\" (\"sourceId\", \"destinationId\")\nSELECT sources.id, destinations.id\nFROM \"remote_ical_sources\" sources\nINNER JOIN \"calendar_destinations\" destinations ON sources.\"userId\" = destinations.\"userId\"\nON CONFLICT DO NOTHING;"
  },
  {
    "path": "packages/database/drizzle/0029_huge_yellow_claw.sql",
    "content": "ALTER TABLE \"calendar_snapshots\" ADD COLUMN \"contentHash\" text;"
  },
  {
    "path": "packages/database/drizzle/0030_youthful_speed.sql",
    "content": "CREATE TABLE \"oauth_calendar_sources\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"externalCalendarId\" text NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"provider\" text NOT NULL,\n\t\"syncToken\" text,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_event_mappings\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"deleteIdentifier\" text,\n\t\"destinationEventUid\" text NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"endTime\" timestamp NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"oauthEventStateId\" uuid NOT NULL,\n\t\"startTime\" timestamp NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_event_states\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"endTime\" timestamp NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"oauthSourceId\" uuid NOT NULL,\n\t\"sourceEventUid\" text,\n\t\"startTime\" timestamp NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_source_destination_mappings\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"oauthSourceId\" uuid NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"oauth_calendar_sources\" ADD CONSTRAINT \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_calendar_sources\" ADD CONSTRAINT \"oauth_calendar_sources_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_event_mappings\" ADD CONSTRAINT \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_event_mappings\" ADD CONSTRAINT \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\" FOREIGN KEY (\"oauthEventStateId\") REFERENCES \"public\".\"oauth_event_states\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_event_states\" ADD CONSTRAINT \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\" FOREIGN KEY (\"oauthSourceId\") REFERENCES \"public\".\"oauth_calendar_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_source_destination_mappings\" ADD CONSTRAINT \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_source_destination_mappings\" ADD CONSTRAINT \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\" FOREIGN KEY (\"oauthSourceId\") REFERENCES \"public\".\"oauth_calendar_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"oauth_calendar_sources_user_calendar_idx\" ON \"oauth_calendar_sources\" USING btree (\"userId\",\"destinationId\",\"externalCalendarId\");--> statement-breakpoint\nCREATE INDEX \"oauth_calendar_sources_user_idx\" ON \"oauth_calendar_sources\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"oauth_calendar_sources_destination_idx\" ON \"oauth_calendar_sources\" USING btree (\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"oauth_calendar_sources_provider_idx\" ON \"oauth_calendar_sources\" USING btree (\"provider\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"oauth_event_mappings_event_dest_idx\" ON \"oauth_event_mappings\" USING btree (\"oauthEventStateId\",\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"oauth_event_mappings_destination_idx\" ON \"oauth_event_mappings\" USING btree (\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"oauth_event_states_start_time_idx\" ON \"oauth_event_states\" USING btree (\"startTime\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"oauth_event_states_identity_idx\" ON \"oauth_event_states\" USING btree (\"oauthSourceId\",\"sourceEventUid\",\"startTime\",\"endTime\");--> statement-breakpoint\nCREATE INDEX \"oauth_event_states_source_idx\" ON \"oauth_event_states\" USING btree (\"oauthSourceId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"oauth_source_destination_mapping_idx\" ON \"oauth_source_destination_mappings\" USING btree (\"oauthSourceId\",\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"oauth_source_destination_mappings_source_idx\" ON \"oauth_source_destination_mappings\" USING btree (\"oauthSourceId\");--> statement-breakpoint\nCREATE INDEX \"oauth_source_destination_mappings_destination_idx\" ON \"oauth_source_destination_mappings\" USING btree (\"destinationId\");"
  },
  {
    "path": "packages/database/drizzle/0031_glorious_joshua_kane.sql",
    "content": "CREATE TABLE \"caldav_event_mappings\" (\n\t\"caldavEventStateId\" uuid NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"deleteIdentifier\" text,\n\t\"destinationEventUid\" text NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"endTime\" timestamp NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"startTime\" timestamp NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"caldav_event_states\" (\n\t\"caldavSourceId\" uuid NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"endTime\" timestamp NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"sourceEventUid\" text,\n\t\"startTime\" timestamp NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"caldav_source_credentials\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"encryptedPassword\" text NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"serverUrl\" text NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"username\" text NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"caldav_source_destination_mappings\" (\n\t\"caldavSourceId\" uuid NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"destinationId\" uuid NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"caldav_sources\" (\n\t\"calendarUrl\" text NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"credentialId\" uuid NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"provider\" text NOT NULL,\n\t\"syncToken\" text,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_source_credentials\" (\n\t\"accessToken\" text NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"email\" text,\n\t\"expiresAt\" timestamp NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"needsReauthentication\" boolean DEFAULT false NOT NULL,\n\t\"provider\" text NOT NULL,\n\t\"refreshToken\" text NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\nDROP INDEX \"oauth_calendar_sources_user_calendar_idx\";--> statement-breakpoint\nALTER TABLE \"oauth_calendar_sources\" ALTER COLUMN \"destinationId\" DROP NOT NULL;--> statement-breakpoint\nALTER TABLE \"oauth_calendar_sources\" ADD COLUMN \"oauthSourceCredentialId\" uuid;--> statement-breakpoint\nALTER TABLE \"caldav_event_mappings\" ADD CONSTRAINT \"caldav_event_mappings_caldavEventStateId_caldav_event_states_id_fk\" FOREIGN KEY (\"caldavEventStateId\") REFERENCES \"public\".\"caldav_event_states\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"caldav_event_mappings\" ADD CONSTRAINT \"caldav_event_mappings_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"caldav_event_states\" ADD CONSTRAINT \"caldav_event_states_caldavSourceId_caldav_sources_id_fk\" FOREIGN KEY (\"caldavSourceId\") REFERENCES \"public\".\"caldav_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"caldav_source_destination_mappings\" ADD CONSTRAINT \"caldav_source_destination_mappings_caldavSourceId_caldav_sources_id_fk\" FOREIGN KEY (\"caldavSourceId\") REFERENCES \"public\".\"caldav_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"caldav_source_destination_mappings\" ADD CONSTRAINT \"caldav_source_destination_mappings_destinationId_calendar_destinations_id_fk\" FOREIGN KEY (\"destinationId\") REFERENCES \"public\".\"calendar_destinations\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"caldav_sources\" ADD CONSTRAINT \"caldav_sources_credentialId_caldav_source_credentials_id_fk\" FOREIGN KEY (\"credentialId\") REFERENCES \"public\".\"caldav_source_credentials\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"caldav_sources\" ADD CONSTRAINT \"caldav_sources_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_source_credentials\" ADD CONSTRAINT \"oauth_source_credentials_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"caldav_event_mappings_event_dest_idx\" ON \"caldav_event_mappings\" USING btree (\"caldavEventStateId\",\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"caldav_event_mappings_destination_idx\" ON \"caldav_event_mappings\" USING btree (\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"caldav_event_states_start_time_idx\" ON \"caldav_event_states\" USING btree (\"startTime\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"caldav_event_states_identity_idx\" ON \"caldav_event_states\" USING btree (\"caldavSourceId\",\"sourceEventUid\",\"startTime\",\"endTime\");--> statement-breakpoint\nCREATE INDEX \"caldav_event_states_source_idx\" ON \"caldav_event_states\" USING btree (\"caldavSourceId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"caldav_source_destination_mapping_idx\" ON \"caldav_source_destination_mappings\" USING btree (\"caldavSourceId\",\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"caldav_source_destination_mappings_source_idx\" ON \"caldav_source_destination_mappings\" USING btree (\"caldavSourceId\");--> statement-breakpoint\nCREATE INDEX \"caldav_source_destination_mappings_destination_idx\" ON \"caldav_source_destination_mappings\" USING btree (\"destinationId\");--> statement-breakpoint\nCREATE INDEX \"caldav_sources_user_idx\" ON \"caldav_sources\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"caldav_sources_provider_idx\" ON \"caldav_sources\" USING btree (\"provider\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"caldav_sources_user_calendar_idx\" ON \"caldav_sources\" USING btree (\"userId\",\"calendarUrl\");--> statement-breakpoint\nCREATE INDEX \"oauth_source_credentials_user_idx\" ON \"oauth_source_credentials\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"oauth_source_credentials_provider_idx\" ON \"oauth_source_credentials\" USING btree (\"provider\");--> statement-breakpoint\nALTER TABLE \"oauth_calendar_sources\" ADD CONSTRAINT \"oauth_calendar_sources_oauthSourceCredentialId_oauth_source_credentials_id_fk\" FOREIGN KEY (\"oauthSourceCredentialId\") REFERENCES \"public\".\"oauth_source_credentials\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"oauth_calendar_sources_credential_idx\" ON \"oauth_calendar_sources\" USING btree (\"oauthSourceCredentialId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"oauth_calendar_sources_user_calendar_idx\" ON \"oauth_calendar_sources\" USING btree (\"userId\",\"externalCalendarId\",\"provider\");"
  },
  {
    "path": "packages/database/drizzle/0032_dapper_patch.sql",
    "content": "CREATE TABLE \"calendar_sources\" (\n\t\"caldavCredentialId\" uuid,\n\t\"calendarUrl\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"externalCalendarId\" text,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"oauthCredentialId\" uuid,\n\t\"provider\" text,\n\t\"sourceType\" text NOT NULL,\n\t\"syncToken\" text,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"url\" text,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD CONSTRAINT \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\" FOREIGN KEY (\"caldavCredentialId\") REFERENCES \"public\".\"caldav_source_credentials\"(\"id\") ON DELETE set null ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD CONSTRAINT \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\" FOREIGN KEY (\"oauthCredentialId\") REFERENCES \"public\".\"oauth_source_credentials\"(\"id\") ON DELETE set null ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD CONSTRAINT \"calendar_sources_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"calendar_sources_user_idx\" ON \"calendar_sources\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"calendar_sources_type_idx\" ON \"calendar_sources\" USING btree (\"sourceType\");--> statement-breakpoint\nCREATE INDEX \"calendar_sources_provider_idx\" ON \"calendar_sources\" USING btree (\"provider\");--> statement-breakpoint\nINSERT INTO \"calendar_sources\" (\"id\", \"userId\", \"sourceType\", \"name\", \"url\", \"createdAt\", \"updatedAt\")\nSELECT \"id\", \"userId\", 'ical', \"name\", \"url\", \"createdAt\", \"createdAt\"\nFROM \"remote_ical_sources\";\n--> statement-breakpoint\nINSERT INTO \"calendar_sources\" (\"id\", \"userId\", \"sourceType\", \"provider\", \"name\", \"externalCalendarId\", \"oauthCredentialId\", \"syncToken\", \"createdAt\", \"updatedAt\")\nSELECT \"id\", \"userId\", 'oauth', \"provider\", \"name\", \"externalCalendarId\", \"oauthSourceCredentialId\", \"syncToken\", \"createdAt\", COALESCE(\"updatedAt\", \"createdAt\")\nFROM \"oauth_calendar_sources\";\n--> statement-breakpoint\nINSERT INTO \"calendar_sources\" (\"id\", \"userId\", \"sourceType\", \"provider\", \"name\", \"calendarUrl\", \"caldavCredentialId\", \"syncToken\", \"createdAt\", \"updatedAt\")\nSELECT \"id\", \"userId\", 'caldav', \"provider\", \"name\", \"calendarUrl\", \"credentialId\", \"syncToken\", \"createdAt\", COALESCE(\"updatedAt\", \"createdAt\")\nFROM \"caldav_sources\";\n--> statement-breakpoint\nALTER TABLE \"event_states\" DROP CONSTRAINT \"event_states_sourceId_remote_ical_sources_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" DROP CONSTRAINT \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"event_states\" ADD CONSTRAINT \"event_states_sourceId_calendar_sources_id_fk\" FOREIGN KEY (\"sourceId\") REFERENCES \"public\".\"calendar_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD CONSTRAINT \"source_destination_mappings_sourceId_calendar_sources_id_fk\" FOREIGN KEY (\"sourceId\") REFERENCES \"public\".\"calendar_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"event_states_source_idx\" ON \"event_states\" USING btree (\"sourceId\");\n--> statement-breakpoint\nINSERT INTO \"event_states\" (\"sourceId\", \"sourceEventUid\", \"startTime\", \"endTime\", \"createdAt\")\nSELECT \"oauthSourceId\", \"sourceEventUid\", \"startTime\", \"endTime\", \"createdAt\"\nFROM \"oauth_event_states\";\n--> statement-breakpoint\nINSERT INTO \"event_states\" (\"sourceId\", \"sourceEventUid\", \"startTime\", \"endTime\", \"createdAt\")\nSELECT \"caldavSourceId\", \"sourceEventUid\", \"startTime\", \"endTime\", \"createdAt\"\nFROM \"caldav_event_states\";\n--> statement-breakpoint\nINSERT INTO \"source_destination_mappings\" (\"sourceId\", \"destinationId\", \"createdAt\")\nSELECT \"oauthSourceId\", \"destinationId\", \"createdAt\"\nFROM \"oauth_source_destination_mappings\"\nON CONFLICT (\"sourceId\", \"destinationId\") DO NOTHING;\n--> statement-breakpoint\nINSERT INTO \"source_destination_mappings\" (\"sourceId\", \"destinationId\", \"createdAt\")\nSELECT \"caldavSourceId\", \"destinationId\", \"createdAt\"\nFROM \"caldav_source_destination_mappings\"\nON CONFLICT (\"sourceId\", \"destinationId\") DO NOTHING;\n--> statement-breakpoint\nINSERT INTO \"event_mappings\" (\"eventStateId\", \"destinationId\", \"destinationEventUid\", \"deleteIdentifier\", \"startTime\", \"endTime\", \"createdAt\")\nSELECT es.\"id\", oem.\"destinationId\", oem.\"destinationEventUid\", oem.\"deleteIdentifier\", oem.\"startTime\", oem.\"endTime\", oem.\"createdAt\"\nFROM \"oauth_event_mappings\" oem\nJOIN \"oauth_event_states\" oes ON oes.\"id\" = oem.\"oauthEventStateId\"\nJOIN \"event_states\" es ON es.\"sourceId\" = oes.\"oauthSourceId\"\n  AND es.\"sourceEventUid\" = oes.\"sourceEventUid\"\n  AND es.\"startTime\" = oes.\"startTime\"\n  AND es.\"endTime\" = oes.\"endTime\"\nON CONFLICT (\"eventStateId\", \"destinationId\") DO NOTHING;\n--> statement-breakpoint\nINSERT INTO \"event_mappings\" (\"eventStateId\", \"destinationId\", \"destinationEventUid\", \"deleteIdentifier\", \"startTime\", \"endTime\", \"createdAt\")\nSELECT es.\"id\", cem.\"destinationId\", cem.\"destinationEventUid\", cem.\"deleteIdentifier\", cem.\"startTime\", cem.\"endTime\", cem.\"createdAt\"\nFROM \"caldav_event_mappings\" cem\nJOIN \"caldav_event_states\" ces ON ces.\"id\" = cem.\"caldavEventStateId\"\nJOIN \"event_states\" es ON es.\"sourceId\" = ces.\"caldavSourceId\"\n  AND es.\"sourceEventUid\" = ces.\"sourceEventUid\"\n  AND es.\"startTime\" = ces.\"startTime\"\n  AND es.\"endTime\" = ces.\"endTime\"\nON CONFLICT (\"eventStateId\", \"destinationId\") DO NOTHING;\n"
  },
  {
    "path": "packages/database/drizzle/0033_square_tomorrow_man.sql",
    "content": "DROP TABLE IF EXISTS \"caldav_event_mappings\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"caldav_event_states\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"caldav_source_destination_mappings\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"caldav_sources\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"oauth_calendar_sources\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"oauth_event_mappings\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"oauth_event_states\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"oauth_source_destination_mappings\" CASCADE;--> statement-breakpoint\nDROP TABLE IF EXISTS \"remote_ical_sources\" CASCADE;--> statement-breakpoint\n-- Update calendar_snapshots FK to point to unified calendar_sources\nALTER TABLE \"calendar_snapshots\" DROP CONSTRAINT IF EXISTS \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\";\n--> statement-breakpoint\nDO $$\nBEGIN\n  IF NOT EXISTS (\n    SELECT 1 FROM pg_constraint WHERE conname = 'calendar_snapshots_sourceId_calendar_sources_id_fk'\n  ) THEN\n    ALTER TABLE \"calendar_snapshots\" ADD CONSTRAINT \"calendar_snapshots_sourceId_calendar_sources_id_fk\" FOREIGN KEY (\"sourceId\") REFERENCES \"public\".\"calendar_sources\"(\"id\") ON DELETE cascade ON UPDATE no action;\n  END IF;\nEND $$;\n"
  },
  {
    "path": "packages/database/drizzle/0034_dumb_clanker.sql",
    "content": "DELETE FROM event_states WHERE \"sourceEventUid\" LIKE '%@keeper.sh';\n"
  },
  {
    "path": "packages/database/drizzle/0035_known_silk_fever.sql",
    "content": "ALTER TABLE \"calendar_sources\" ADD COLUMN \"excludeFocusTime\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD COLUMN \"excludeOutOfOffice\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD COLUMN \"excludeWorkingLocation\" boolean DEFAULT false NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0036_late_bastion.sql",
    "content": "ALTER TABLE \"calendar_sources\" ADD COLUMN IF NOT EXISTS \"excludeFocusTime\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD COLUMN IF NOT EXISTS \"excludeOutOfOffice\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" ADD COLUMN IF NOT EXISTS \"excludeWorkingLocation\" boolean DEFAULT false NOT NULL;\n"
  },
  {
    "path": "packages/database/drizzle/0037_thankful_machine_man.sql",
    "content": "-- Phase 1: Create new tables\nCREATE TABLE \"calendar_accounts\" (\n\t\"accountId\" text,\n\t\"authType\" text NOT NULL,\n\t\"caldavCredentialId\" uuid,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"email\" text,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"needsReauthentication\" boolean DEFAULT false NOT NULL,\n\t\"oauthCredentialId\" uuid,\n\t\"provider\" text NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"calendars\" (\n\t\"accountId\" uuid NOT NULL,\n\t\"calendarType\" text NOT NULL,\n\t\"calendarUrl\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"excludeFocusTime\" boolean DEFAULT false NOT NULL,\n\t\"excludeOutOfOffice\" boolean DEFAULT false NOT NULL,\n\t\"excludeWorkingLocation\" boolean DEFAULT false NOT NULL,\n\t\"externalCalendarId\" text,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"role\" text NOT NULL,\n\t\"syncToken\" text,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"url\" text,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\n-- Phase 2: Add new columns to oauth_credentials (temporarily nullable for provider/userId)\nALTER TABLE \"oauth_credentials\" ADD COLUMN \"email\" text;--> statement-breakpoint\nALTER TABLE \"oauth_credentials\" ADD COLUMN \"needsReauthentication\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"oauth_credentials\" ADD COLUMN \"provider\" text;--> statement-breakpoint\nALTER TABLE \"oauth_credentials\" ADD COLUMN \"userId\" text;\n--> statement-breakpoint\n-- Phase 3: Populate oauth_credentials new columns from calendar_destinations\nUPDATE \"oauth_credentials\" oc\nSET \"provider\" = cd.\"provider\", \"userId\" = cd.\"userId\", \"email\" = cd.\"email\"\nFROM \"calendar_destinations\" cd\nWHERE cd.\"oauthCredentialId\" = oc.\"id\";\n--> statement-breakpoint\n-- Phase 4: Merge oauth_source_credentials into oauth_credentials\nINSERT INTO \"oauth_credentials\" (\"id\", \"accessToken\", \"refreshToken\", \"expiresAt\", \"email\", \"needsReauthentication\", \"provider\", \"userId\", \"createdAt\", \"updatedAt\")\nSELECT \"id\", \"accessToken\", \"refreshToken\", \"expiresAt\", \"email\", \"needsReauthentication\", \"provider\", \"userId\", \"createdAt\", \"updatedAt\"\nFROM \"oauth_source_credentials\"\nON CONFLICT (\"id\") DO NOTHING;\n--> statement-breakpoint\n-- Phase 4.1: Re-run destination backfill for any still-null rows\nUPDATE \"oauth_credentials\" oc\nSET \"provider\" = cd.\"provider\", \"userId\" = cd.\"userId\", \"email\" = COALESCE(oc.\"email\", cd.\"email\")\nFROM \"calendar_destinations\" cd\nWHERE cd.\"oauthCredentialId\" = oc.\"id\"\n  AND (oc.\"provider\" IS NULL OR oc.\"userId\" IS NULL OR oc.\"email\" IS NULL);\n--> statement-breakpoint\n-- Phase 4.2: Remove orphaned destination credentials with no owner data\nDELETE FROM \"oauth_credentials\" oc\nWHERE (oc.\"provider\" IS NULL OR oc.\"userId\" IS NULL)\n  AND NOT EXISTS (\n    SELECT 1\n    FROM \"calendar_destinations\" cd\n    WHERE cd.\"oauthCredentialId\" = oc.\"id\"\n  );\n--> statement-breakpoint\n-- Phase 4.3: Merge caldav_source_credentials into caldav_credentials\nWITH source_credential_calendar_urls AS (\n  SELECT\n    cs.\"caldavCredentialId\" AS \"credentialId\",\n    MIN(cs.\"calendarUrl\") AS \"calendarUrl\"\n  FROM \"calendar_sources\" cs\n  WHERE cs.\"sourceType\" = 'caldav'\n    AND cs.\"caldavCredentialId\" IS NOT NULL\n  GROUP BY cs.\"caldavCredentialId\"\n)\nINSERT INTO \"caldav_credentials\" (\"id\", \"serverUrl\", \"calendarUrl\", \"username\", \"encryptedPassword\", \"createdAt\", \"updatedAt\")\nSELECT\n  csc.\"id\",\n  csc.\"serverUrl\",\n  COALESCE(urls.\"calendarUrl\", csc.\"serverUrl\"),\n  csc.\"username\",\n  csc.\"encryptedPassword\",\n  csc.\"createdAt\",\n  csc.\"updatedAt\"\nFROM \"caldav_source_credentials\" csc\nLEFT JOIN source_credential_calendar_urls urls ON urls.\"credentialId\" = csc.\"id\"\nON CONFLICT (\"id\") DO NOTHING;\n--> statement-breakpoint\n-- Phase 5: Make columns NOT NULL (all rows should be populated now)\nALTER TABLE \"oauth_credentials\" ALTER COLUMN \"provider\" SET NOT NULL;--> statement-breakpoint\nALTER TABLE \"oauth_credentials\" ALTER COLUMN \"userId\" SET NOT NULL;\n--> statement-breakpoint\n-- Phase 6: Data migration — create calendar_accounts + calendars from OAuth destinations\n-- Use calendar_destinations.id as calendars.id so all existing FKs resolve automatically\nWITH oauth_destination_account_keys AS (\n  SELECT\n    \"userId\",\n    \"provider\",\n    \"accountId\",\n    \"oauthCredentialId\",\n    \"email\",\n    bool_or(\"needsReauthentication\") AS \"needsReauthentication\",\n    MIN(\"createdAt\") AS \"createdAt\",\n    MAX(\"updatedAt\") AS \"updatedAt\"\n  FROM \"calendar_destinations\"\n  WHERE \"oauthCredentialId\" IS NOT NULL\n  GROUP BY \"userId\", \"provider\", \"accountId\", \"oauthCredentialId\", \"email\"\n),\ndest_accounts AS (\n  INSERT INTO \"calendar_accounts\" (\"id\", \"userId\", \"provider\", \"authType\", \"accountId\", \"email\", \"oauthCredentialId\", \"needsReauthentication\", \"createdAt\", \"updatedAt\")\n  SELECT gen_random_uuid(), \"userId\", \"provider\", 'oauth', \"accountId\", \"email\", \"oauthCredentialId\", \"needsReauthentication\", \"createdAt\", \"updatedAt\"\n  FROM oauth_destination_account_keys\n  RETURNING \"id\" AS account_id, \"userId\", \"provider\", \"accountId\"\n)\nINSERT INTO \"calendars\" (\"id\", \"accountId\", \"calendarType\", \"name\", \"role\", \"userId\", \"createdAt\", \"updatedAt\")\nSELECT\n  cd.\"id\",\n  da.account_id,\n  'oauth',\n  COALESCE(\n    NULLIF(btrim(cd.\"email\"), ''),\n    NULLIF(btrim(cd.\"accountId\"), ''),\n    CASE lower(cd.\"provider\")\n      WHEN 'caldav' THEN 'CalDAV'\n      WHEN 'icloud' THEN 'iCloud'\n      ELSE initcap(replace(replace(cd.\"provider\", '_', ' '), '-', ' '))\n    END\n  ),\n  'destination',\n  cd.\"userId\",\n  cd.\"createdAt\",\n  cd.\"updatedAt\"\nFROM \"calendar_destinations\" cd\nJOIN dest_accounts da ON da.\"userId\" = cd.\"userId\" AND da.\"provider\" = cd.\"provider\" AND da.\"accountId\" = cd.\"accountId\"\nWHERE cd.\"oauthCredentialId\" IS NOT NULL;\n--> statement-breakpoint\n-- Phase 7: Data migration — create calendar_accounts + calendars from CalDAV destinations\nWITH caldav_destination_account_keys AS (\n  SELECT\n    \"userId\",\n    \"provider\",\n    \"accountId\",\n    \"caldavCredentialId\",\n    \"email\",\n    bool_or(\"needsReauthentication\") AS \"needsReauthentication\",\n    MIN(\"createdAt\") AS \"createdAt\",\n    MAX(\"updatedAt\") AS \"updatedAt\"\n  FROM \"calendar_destinations\"\n  WHERE \"caldavCredentialId\" IS NOT NULL\n  GROUP BY \"userId\", \"provider\", \"accountId\", \"caldavCredentialId\", \"email\"\n),\ncaldav_dest_accounts AS (\n  INSERT INTO \"calendar_accounts\" (\"id\", \"userId\", \"provider\", \"authType\", \"accountId\", \"email\", \"caldavCredentialId\", \"needsReauthentication\", \"createdAt\", \"updatedAt\")\n  SELECT gen_random_uuid(), \"userId\", \"provider\", 'caldav', \"accountId\", \"email\", \"caldavCredentialId\", \"needsReauthentication\", \"createdAt\", \"updatedAt\"\n  FROM caldav_destination_account_keys\n  RETURNING \"id\" AS account_id, \"userId\", \"provider\", \"accountId\"\n)\nINSERT INTO \"calendars\" (\"id\", \"accountId\", \"calendarType\", \"calendarUrl\", \"name\", \"role\", \"userId\", \"createdAt\", \"updatedAt\")\nSELECT\n  cd.\"id\",\n  cda.account_id,\n  'caldav',\n  cred.\"calendarUrl\",\n  COALESCE(\n    NULLIF(btrim(cd.\"email\"), ''),\n    NULLIF(btrim(cd.\"accountId\"), ''),\n    CASE lower(cd.\"provider\")\n      WHEN 'caldav' THEN 'CalDAV'\n      WHEN 'icloud' THEN 'iCloud'\n      ELSE initcap(replace(replace(cd.\"provider\", '_', ' '), '-', ' '))\n    END\n  ),\n  'destination',\n  cd.\"userId\",\n  cd.\"createdAt\",\n  cd.\"updatedAt\"\nFROM \"calendar_destinations\" cd\nJOIN caldav_dest_accounts cda ON cda.\"userId\" = cd.\"userId\" AND cda.\"provider\" = cd.\"provider\" AND cda.\"accountId\" = cd.\"accountId\"\nLEFT JOIN \"caldav_credentials\" cred ON cd.\"caldavCredentialId\" = cred.\"id\"\nWHERE cd.\"caldavCredentialId\" IS NOT NULL;\n--> statement-breakpoint\n-- Phase 7.1: Build source calendar ID remap for collisions with destination IDs\nCREATE TEMP TABLE \"tmp_source_calendar_id_map\" AS\nSELECT\n  cs.\"id\" AS \"oldId\",\n  CASE\n    WHEN EXISTS (\n      SELECT 1\n      FROM \"calendars\" c\n      WHERE c.\"id\" = cs.\"id\"\n    ) THEN gen_random_uuid()\n    ELSE cs.\"id\"\n  END AS \"newId\"\nFROM \"calendar_sources\" cs;\n--> statement-breakpoint\n-- Phase 8: Data migration — create calendar_accounts + calendars from OAuth sources\nWITH oauth_source_account_keys AS (\n  SELECT\n    cs.\"userId\",\n    COALESCE(cs.\"provider\", 'unknown') AS \"provider\",\n    cs.\"oauthCredentialId\",\n    MIN(cs.\"createdAt\") AS \"createdAt\",\n    MAX(cs.\"updatedAt\") AS \"updatedAt\"\n  FROM \"calendar_sources\" cs\n  WHERE cs.\"sourceType\" = 'oauth' AND cs.\"oauthCredentialId\" IS NOT NULL\n  GROUP BY cs.\"userId\", COALESCE(cs.\"provider\", 'unknown'), cs.\"oauthCredentialId\"\n),\noauth_src_accounts AS (\n  INSERT INTO \"calendar_accounts\" (\"id\", \"userId\", \"provider\", \"authType\", \"oauthCredentialId\", \"createdAt\", \"updatedAt\")\n  SELECT gen_random_uuid(), \"userId\", \"provider\", 'oauth', \"oauthCredentialId\", \"createdAt\", \"updatedAt\"\n  FROM oauth_source_account_keys\n  RETURNING \"id\" AS account_id, \"userId\", \"provider\", \"oauthCredentialId\"\n)\nINSERT INTO \"calendars\" (\"id\", \"accountId\", \"calendarType\", \"externalCalendarId\", \"name\", \"role\", \"syncToken\", \"excludeFocusTime\", \"excludeOutOfOffice\", \"excludeWorkingLocation\", \"userId\", \"createdAt\", \"updatedAt\")\nSELECT id_map.\"newId\", osa.account_id, 'oauth', cs.\"externalCalendarId\", cs.\"name\", 'source', cs.\"syncToken\", cs.\"excludeFocusTime\", cs.\"excludeOutOfOffice\", cs.\"excludeWorkingLocation\", cs.\"userId\", cs.\"createdAt\", cs.\"updatedAt\"\nFROM \"calendar_sources\" cs\nJOIN \"tmp_source_calendar_id_map\" id_map ON id_map.\"oldId\" = cs.\"id\"\nJOIN oauth_src_accounts osa ON osa.\"userId\" = cs.\"userId\" AND osa.\"oauthCredentialId\" = cs.\"oauthCredentialId\" AND osa.\"provider\" = COALESCE(cs.\"provider\", 'unknown')\nWHERE cs.\"sourceType\" = 'oauth' AND cs.\"oauthCredentialId\" IS NOT NULL;\n--> statement-breakpoint\n-- Phase 9: Data migration — create calendar_accounts + calendars from CalDAV sources\nWITH caldav_source_account_keys AS (\n  SELECT\n    cs.\"userId\",\n    COALESCE(cs.\"provider\", 'caldav') AS \"provider\",\n    cs.\"caldavCredentialId\",\n    MIN(cs.\"createdAt\") AS \"createdAt\",\n    MAX(cs.\"updatedAt\") AS \"updatedAt\"\n  FROM \"calendar_sources\" cs\n  JOIN \"caldav_credentials\" cc ON cc.\"id\" = cs.\"caldavCredentialId\"\n  WHERE cs.\"sourceType\" = 'caldav' AND cs.\"caldavCredentialId\" IS NOT NULL\n  GROUP BY cs.\"userId\", COALESCE(cs.\"provider\", 'caldav'), cs.\"caldavCredentialId\"\n),\ncaldav_src_accounts AS (\n  INSERT INTO \"calendar_accounts\" (\"id\", \"userId\", \"provider\", \"authType\", \"caldavCredentialId\", \"createdAt\", \"updatedAt\")\n  SELECT gen_random_uuid(), \"userId\", \"provider\", 'caldav', \"caldavCredentialId\", \"createdAt\", \"updatedAt\"\n  FROM caldav_source_account_keys\n  RETURNING \"id\" AS account_id, \"userId\", \"provider\", \"caldavCredentialId\"\n)\nINSERT INTO \"calendars\" (\"id\", \"accountId\", \"calendarType\", \"calendarUrl\", \"name\", \"role\", \"syncToken\", \"userId\", \"createdAt\", \"updatedAt\")\nSELECT id_map.\"newId\", csa.account_id, 'caldav', cs.\"calendarUrl\", cs.\"name\", 'source', cs.\"syncToken\", cs.\"userId\", cs.\"createdAt\", cs.\"updatedAt\"\nFROM \"calendar_sources\" cs\nJOIN \"tmp_source_calendar_id_map\" id_map ON id_map.\"oldId\" = cs.\"id\"\nJOIN caldav_src_accounts csa ON csa.\"userId\" = cs.\"userId\" AND csa.\"caldavCredentialId\" = cs.\"caldavCredentialId\" AND csa.\"provider\" = COALESCE(cs.\"provider\", 'caldav')\nWHERE cs.\"sourceType\" = 'caldav' AND cs.\"caldavCredentialId\" IS NOT NULL;\n--> statement-breakpoint\n-- Phase 10: Data migration — create calendar_accounts + calendars from ICS sources\nWITH ics_account_keys AS (\n  SELECT\n    \"userId\",\n    MIN(\"createdAt\") AS \"createdAt\",\n    MAX(\"updatedAt\") AS \"updatedAt\"\n  FROM \"calendar_sources\"\n  WHERE \"sourceType\" = 'ical'\n  GROUP BY \"userId\"\n),\nics_accounts AS (\n  INSERT INTO \"calendar_accounts\" (\"id\", \"userId\", \"provider\", \"authType\", \"createdAt\", \"updatedAt\")\n  SELECT gen_random_uuid(), \"userId\", 'ics', 'none', \"createdAt\", \"updatedAt\"\n  FROM ics_account_keys\n  RETURNING \"id\" AS account_id, \"userId\"\n)\nINSERT INTO \"calendars\" (\"id\", \"accountId\", \"calendarType\", \"name\", \"role\", \"url\", \"syncToken\", \"userId\", \"createdAt\", \"updatedAt\")\nSELECT id_map.\"newId\", ia.account_id, 'ical', cs.\"name\", 'source', cs.\"url\", cs.\"syncToken\", cs.\"userId\", cs.\"createdAt\", cs.\"updatedAt\"\nFROM \"calendar_sources\" cs\nJOIN \"tmp_source_calendar_id_map\" id_map ON id_map.\"oldId\" = cs.\"id\"\nJOIN ics_accounts ia ON ia.\"userId\" = cs.\"userId\"\nWHERE cs.\"sourceType\" = 'ical';\n--> statement-breakpoint\n-- Phase 10.1: Merge duplicate calendar accounts by logical identity\nCREATE TEMP TABLE \"tmp_calendar_account_id_map\" AS\nWITH ranked_calendar_accounts AS (\n  SELECT\n    calendar_account.\"id\" AS \"oldAccountId\",\n    FIRST_VALUE(calendar_account.\"id\") OVER (\n      PARTITION BY\n        calendar_account.\"userId\",\n        calendar_account.\"provider\",\n        calendar_account.\"authType\",\n        COALESCE(\n          NULLIF(lower(btrim(calendar_account.\"email\")), ''),\n          NULLIF(lower(btrim(calendar_account.\"accountId\")), ''),\n          calendar_account.\"oauthCredentialId\"::text,\n          calendar_account.\"caldavCredentialId\"::text,\n          calendar_account.\"id\"::text\n        )\n      ORDER BY calendar_account.\"updatedAt\" DESC, calendar_account.\"createdAt\" DESC, calendar_account.\"id\" DESC\n    ) AS \"newAccountId\"\n  FROM \"calendar_accounts\" calendar_account\n)\nSELECT \"oldAccountId\", \"newAccountId\"\nFROM ranked_calendar_accounts\nWHERE \"oldAccountId\" <> \"newAccountId\";\n--> statement-breakpoint\nUPDATE \"calendar_accounts\" canonical\nSET\n  \"accountId\" = COALESCE(canonical.\"accountId\", duplicate.\"accountId\"),\n  \"email\" = COALESCE(canonical.\"email\", duplicate.\"email\"),\n  \"oauthCredentialId\" = COALESCE(canonical.\"oauthCredentialId\", duplicate.\"oauthCredentialId\"),\n  \"caldavCredentialId\" = COALESCE(canonical.\"caldavCredentialId\", duplicate.\"caldavCredentialId\"),\n  \"needsReauthentication\" = canonical.\"needsReauthentication\" OR duplicate.\"needsReauthentication\",\n  \"createdAt\" = LEAST(canonical.\"createdAt\", duplicate.\"createdAt\"),\n  \"updatedAt\" = GREATEST(canonical.\"updatedAt\", duplicate.\"updatedAt\")\nFROM \"tmp_calendar_account_id_map\" id_map\nJOIN \"calendar_accounts\" duplicate ON duplicate.\"id\" = id_map.\"oldAccountId\"\nWHERE canonical.\"id\" = id_map.\"newAccountId\";\n--> statement-breakpoint\nUPDATE \"calendars\" calendar\nSET \"accountId\" = id_map.\"newAccountId\"\nFROM \"tmp_calendar_account_id_map\" id_map\nWHERE calendar.\"accountId\" = id_map.\"oldAccountId\";\n--> statement-breakpoint\nDELETE FROM \"calendar_accounts\" duplicate_account\nUSING \"tmp_calendar_account_id_map\" id_map\nWHERE duplicate_account.\"id\" = id_map.\"oldAccountId\";\n--> statement-breakpoint\n-- Phase 10.2: Update source-linked tables to remapped calendar IDs\nUPDATE \"calendar_snapshots\" cs\nSET \"sourceId\" = id_map.\"newId\"\nFROM \"tmp_source_calendar_id_map\" id_map\nWHERE cs.\"sourceId\" = id_map.\"oldId\"\n  AND id_map.\"newId\" <> id_map.\"oldId\";\n--> statement-breakpoint\nUPDATE \"event_states\" es\nSET \"sourceId\" = id_map.\"newId\"\nFROM \"tmp_source_calendar_id_map\" id_map\nWHERE es.\"sourceId\" = id_map.\"oldId\"\n  AND id_map.\"newId\" <> id_map.\"oldId\";\n--> statement-breakpoint\nUPDATE \"source_destination_mappings\" sdm\nSET \"sourceId\" = id_map.\"newId\"\nFROM \"tmp_source_calendar_id_map\" id_map\nWHERE sdm.\"sourceId\" = id_map.\"oldId\"\n  AND id_map.\"newId\" <> id_map.\"oldId\";\n--> statement-breakpoint\n-- Phase 11: Drop old FK constraints\nALTER TABLE \"calendar_snapshots\" DROP CONSTRAINT IF EXISTS \"calendar_snapshots_sourceId_calendar_sources_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"event_mappings\" DROP CONSTRAINT IF EXISTS \"event_mappings_destinationId_calendar_destinations_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"event_states\" DROP CONSTRAINT IF EXISTS \"event_states_sourceId_calendar_sources_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" DROP CONSTRAINT IF EXISTS \"source_destination_mappings_destinationId_calendar_destinations_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" DROP CONSTRAINT IF EXISTS \"source_destination_mappings_sourceId_calendar_sources_id_fk\";\n--> statement-breakpoint\nALTER TABLE \"sync_status\" DROP CONSTRAINT IF EXISTS \"sync_status_destinationId_calendar_destinations_id_fk\";\n--> statement-breakpoint\n-- Phase 12: Rename FK columns\nALTER TABLE \"calendar_snapshots\" RENAME COLUMN \"sourceId\" TO \"calendarId\";--> statement-breakpoint\nALTER TABLE \"event_mappings\" RENAME COLUMN \"destinationId\" TO \"calendarId\";--> statement-breakpoint\nALTER TABLE \"event_states\" RENAME COLUMN \"sourceId\" TO \"calendarId\";--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" RENAME COLUMN \"destinationId\" TO \"destinationCalendarId\";--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" RENAME COLUMN \"sourceId\" TO \"sourceCalendarId\";--> statement-breakpoint\nALTER TABLE \"sync_status\" RENAME COLUMN \"destinationId\" TO \"calendarId\";\n--> statement-breakpoint\n-- Phase 13: Drop old indexes\nDROP INDEX IF EXISTS \"event_mappings_event_dest_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"event_mappings_destination_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"event_states_source_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"sync_status_destination_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"event_states_identity_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"source_destination_mapping_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"source_destination_mappings_source_idx\";--> statement-breakpoint\nDROP INDEX IF EXISTS \"source_destination_mappings_destination_idx\";\n--> statement-breakpoint\n-- Phase 14: Drop old tables\nALTER TABLE \"caldav_source_credentials\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nALTER TABLE \"calendar_destinations\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nALTER TABLE \"calendar_sources\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nALTER TABLE \"oauth_source_credentials\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nDROP TABLE \"caldav_source_credentials\" CASCADE;--> statement-breakpoint\nDROP TABLE \"calendar_destinations\" CASCADE;--> statement-breakpoint\nDROP TABLE \"calendar_sources\" CASCADE;--> statement-breakpoint\nDROP TABLE \"oauth_source_credentials\" CASCADE;\n--> statement-breakpoint\n-- Phase 15: Add new FK constraints\nALTER TABLE \"calendar_accounts\" ADD CONSTRAINT \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\" FOREIGN KEY (\"caldavCredentialId\") REFERENCES \"public\".\"caldav_credentials\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_accounts\" ADD CONSTRAINT \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\" FOREIGN KEY (\"oauthCredentialId\") REFERENCES \"public\".\"oauth_credentials\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_accounts\" ADD CONSTRAINT \"calendar_accounts_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD CONSTRAINT \"calendars_accountId_calendar_accounts_id_fk\" FOREIGN KEY (\"accountId\") REFERENCES \"public\".\"calendar_accounts\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD CONSTRAINT \"calendars_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD CONSTRAINT \"calendar_snapshots_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"event_mappings\" ADD CONSTRAINT \"event_mappings_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD CONSTRAINT \"event_states_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_credentials\" ADD CONSTRAINT \"oauth_credentials_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD CONSTRAINT \"source_destination_mappings_destinationCalendarId_calendars_id_fk\" FOREIGN KEY (\"destinationCalendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD CONSTRAINT \"source_destination_mappings_sourceCalendarId_calendars_id_fk\" FOREIGN KEY (\"sourceCalendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"sync_status\" ADD CONSTRAINT \"sync_status_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;\n--> statement-breakpoint\n-- Phase 16: Create new indexes\nCREATE INDEX \"calendar_accounts_user_idx\" ON \"calendar_accounts\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"calendar_accounts_provider_idx\" ON \"calendar_accounts\" USING btree (\"provider\");--> statement-breakpoint\nCREATE INDEX \"calendars_user_idx\" ON \"calendars\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"calendars_account_idx\" ON \"calendars\" USING btree (\"accountId\");--> statement-breakpoint\nCREATE INDEX \"calendars_role_idx\" ON \"calendars\" USING btree (\"role\");--> statement-breakpoint\nCREATE INDEX \"calendars_type_idx\" ON \"calendars\" USING btree (\"calendarType\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"event_mappings_event_cal_idx\" ON \"event_mappings\" USING btree (\"eventStateId\",\"calendarId\");--> statement-breakpoint\nCREATE INDEX \"event_mappings_calendar_idx\" ON \"event_mappings\" USING btree (\"calendarId\");--> statement-breakpoint\nCREATE INDEX \"event_states_calendar_idx\" ON \"event_states\" USING btree (\"calendarId\");--> statement-breakpoint\nCREATE INDEX \"oauth_credentials_user_idx\" ON \"oauth_credentials\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"oauth_credentials_provider_idx\" ON \"oauth_credentials\" USING btree (\"provider\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"sync_status_calendar_idx\" ON \"sync_status\" USING btree (\"calendarId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"event_states_identity_idx\" ON \"event_states\" USING btree (\"calendarId\",\"sourceEventUid\",\"startTime\",\"endTime\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"source_destination_mapping_idx\" ON \"source_destination_mappings\" USING btree (\"sourceCalendarId\",\"destinationCalendarId\");--> statement-breakpoint\nCREATE INDEX \"source_destination_mappings_source_idx\" ON \"source_destination_mappings\" USING btree (\"sourceCalendarId\");--> statement-breakpoint\nCREATE INDEX \"source_destination_mappings_destination_idx\" ON \"source_destination_mappings\" USING btree (\"destinationCalendarId\");\n--> statement-breakpoint\n-- Phase 17: Drop calendarUrl from caldav_credentials (now lives on calendars table)\nALTER TABLE \"caldav_credentials\" DROP COLUMN \"calendarUrl\";\n"
  },
  {
    "path": "packages/database/drizzle/0038_military_radioactive_man.sql",
    "content": "DROP INDEX \"calendars_role_idx\";--> statement-breakpoint\nALTER TABLE \"calendars\" ADD COLUMN \"capabilities\" text[] DEFAULT '{\"pull\"}' NOT NULL;--> statement-breakpoint\nUPDATE \"calendars\" SET \"capabilities\" = '{\"pull\",\"push\"}' WHERE \"role\" = 'source' AND \"calendarType\" != 'ical';--> statement-breakpoint\nUPDATE \"calendars\" SET \"capabilities\" = '{\"push\"}' WHERE \"role\" = 'destination';--> statement-breakpoint\nCREATE INDEX \"calendars_capabilities_idx\" ON \"calendars\" USING btree (\"capabilities\");--> statement-breakpoint\nALTER TABLE \"calendars\" DROP COLUMN \"role\";"
  },
  {
    "path": "packages/database/drizzle/0039_fat_mad_thinker.sql",
    "content": "CREATE TABLE \"sync_profiles\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"userId\" text NOT NULL\n);\n--> statement-breakpoint\nDROP INDEX \"source_destination_mapping_idx\";--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD COLUMN \"profileId\" uuid;--> statement-breakpoint\nWITH mapping_users AS (\n\tSELECT DISTINCT source_calendar.\"userId\"\n\tFROM \"source_destination_mappings\" sdm\n\tJOIN \"calendars\" source_calendar ON source_calendar.\"id\" = sdm.\"sourceCalendarId\"\n),\ncreated_profiles AS (\n\tINSERT INTO \"sync_profiles\" (\"id\", \"name\", \"userId\")\n\tSELECT gen_random_uuid(), 'Default', mu.\"userId\"\n\tFROM mapping_users mu\n\tRETURNING \"id\", \"userId\"\n)\nUPDATE \"source_destination_mappings\" sdm\nSET \"profileId\" = cp.\"id\"\nFROM \"calendars\" source_calendar\nJOIN created_profiles cp ON cp.\"userId\" = source_calendar.\"userId\"\nWHERE sdm.\"sourceCalendarId\" = source_calendar.\"id\";--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ALTER COLUMN \"profileId\" SET NOT NULL;--> statement-breakpoint\nALTER TABLE \"sync_profiles\" ADD CONSTRAINT \"sync_profiles_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"sync_profiles_user_idx\" ON \"sync_profiles\" USING btree (\"userId\");--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" ADD CONSTRAINT \"source_destination_mappings_profileId_sync_profiles_id_fk\" FOREIGN KEY (\"profileId\") REFERENCES \"public\".\"sync_profiles\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"source_destination_mappings_profile_idx\" ON \"source_destination_mappings\" USING btree (\"profileId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"source_destination_mapping_idx\" ON \"source_destination_mappings\" USING btree (\"sourceCalendarId\",\"destinationCalendarId\",\"profileId\");\n"
  },
  {
    "path": "packages/database/drizzle/0040_sparkling_toad.sql",
    "content": "ALTER TABLE \"calendar_accounts\" ADD COLUMN \"displayName\" text;\n--> statement-breakpoint\nUPDATE \"calendar_accounts\" AS account\nSET \"email\" = oauth.\"email\"\nFROM \"oauth_credentials\" AS oauth\nWHERE account.\"oauthCredentialId\" = oauth.\"id\"\n  AND (account.\"email\" IS NULL OR btrim(account.\"email\") = '')\n  AND oauth.\"email\" IS NOT NULL\n  AND btrim(oauth.\"email\") <> '';\n--> statement-breakpoint\nUPDATE \"calendar_accounts\" AS account\nSET \"email\" = credential.\"username\"\nFROM \"caldav_credentials\" AS credential\nWHERE account.\"caldavCredentialId\" = credential.\"id\"\n  AND (account.\"email\" IS NULL OR btrim(account.\"email\") = '')\n  AND credential.\"username\" IS NOT NULL\n  AND btrim(credential.\"username\") <> '';\n--> statement-breakpoint\nUPDATE \"calendar_accounts\" AS account\nSET \"accountId\" = COALESCE(\n  NULLIF(btrim(account.\"email\"), ''),\n  (\n    SELECT COALESCE(\n      NULLIF(btrim(calendar.\"url\"), ''),\n      NULLIF(btrim(calendar.\"calendarUrl\"), ''),\n      NULLIF(btrim(calendar.\"externalCalendarId\"), '')\n    )\n    FROM \"calendars\" AS calendar\n    WHERE calendar.\"accountId\" = account.\"id\"\n    ORDER BY calendar.\"createdAt\" ASC\n    LIMIT 1\n  )\n)\nWHERE account.\"accountId\" IS NULL OR btrim(account.\"accountId\") = '';\n--> statement-breakpoint\nUPDATE \"calendar_accounts\" AS account\nSET \"displayName\" = CASE\n\tWHEN lower(account.\"provider\") = 'ics' THEN COALESCE(\n\t\t(\n\t\t\tSELECT COALESCE(NULLIF(btrim(calendar.\"url\"), ''), NULLIF(btrim(calendar.\"calendarUrl\"), ''))\n\t\t\tFROM \"calendars\" AS calendar\n\t\t\tWHERE calendar.\"accountId\" = account.\"id\"\n\t\t\tORDER BY calendar.\"createdAt\" ASC\n\t\t\tLIMIT 1\n\t\t),\n\t\tNULLIF(btrim(account.\"accountId\"), ''),\n\t\tNULLIF(btrim(account.\"email\"), ''),\n\t\t'iCal'\n\t)\n\tWHEN lower(account.\"provider\") = 'caldav' THEN COALESCE(\n\t\tNULLIF(btrim(account.\"email\"), ''),\n\t\tNULLIF(btrim(account.\"accountId\"), ''),\n\t\t'CalDAV'\n\t)\n\tWHEN lower(account.\"provider\") = 'icloud' THEN COALESCE(\n\t\tNULLIF(btrim(account.\"email\"), ''),\n\t\tNULLIF(btrim(account.\"accountId\"), ''),\n\t\t'iCloud'\n\t)\n\tELSE COALESCE(\n\t\tNULLIF(btrim(account.\"email\"), ''),\n\t\tNULLIF(btrim(account.\"accountId\"), ''),\n\t\tinitcap(replace(replace(account.\"provider\", '_', ' '), '-', ' '))\n\t)\nEND\nWHERE account.\"displayName\" IS NULL OR btrim(account.\"displayName\") = '';\n--> statement-breakpoint\nCREATE TEMP TABLE \"tmp_calendar_account_id_map_0040\" AS\nWITH ranked_calendar_accounts AS (\n  SELECT\n    calendar_account.\"id\" AS \"oldAccountId\",\n    FIRST_VALUE(calendar_account.\"id\") OVER (\n      PARTITION BY\n        calendar_account.\"userId\",\n        calendar_account.\"provider\",\n        calendar_account.\"authType\",\n        COALESCE(\n          NULLIF(lower(btrim(calendar_account.\"email\")), ''),\n          NULLIF(lower(btrim(calendar_account.\"accountId\")), ''),\n          calendar_account.\"oauthCredentialId\"::text,\n          calendar_account.\"caldavCredentialId\"::text,\n          calendar_account.\"id\"::text\n        )\n      ORDER BY calendar_account.\"updatedAt\" DESC, calendar_account.\"createdAt\" DESC, calendar_account.\"id\" DESC\n    ) AS \"newAccountId\"\n  FROM \"calendar_accounts\" calendar_account\n)\nSELECT \"oldAccountId\", \"newAccountId\"\nFROM ranked_calendar_accounts\nWHERE \"oldAccountId\" <> \"newAccountId\";\n--> statement-breakpoint\nUPDATE \"calendar_accounts\" canonical\nSET\n  \"accountId\" = COALESCE(canonical.\"accountId\", duplicate.\"accountId\"),\n  \"email\" = COALESCE(canonical.\"email\", duplicate.\"email\"),\n  \"displayName\" = COALESCE(canonical.\"displayName\", duplicate.\"displayName\"),\n  \"oauthCredentialId\" = COALESCE(canonical.\"oauthCredentialId\", duplicate.\"oauthCredentialId\"),\n  \"caldavCredentialId\" = COALESCE(canonical.\"caldavCredentialId\", duplicate.\"caldavCredentialId\"),\n  \"needsReauthentication\" = canonical.\"needsReauthentication\" OR duplicate.\"needsReauthentication\",\n  \"createdAt\" = LEAST(canonical.\"createdAt\", duplicate.\"createdAt\"),\n  \"updatedAt\" = GREATEST(canonical.\"updatedAt\", duplicate.\"updatedAt\")\nFROM \"tmp_calendar_account_id_map_0040\" id_map\nJOIN \"calendar_accounts\" duplicate ON duplicate.\"id\" = id_map.\"oldAccountId\"\nWHERE canonical.\"id\" = id_map.\"newAccountId\";\n--> statement-breakpoint\nUPDATE \"calendars\" calendar\nSET \"accountId\" = id_map.\"newAccountId\"\nFROM \"tmp_calendar_account_id_map_0040\" id_map\nWHERE calendar.\"accountId\" = id_map.\"oldAccountId\";\n--> statement-breakpoint\nDELETE FROM \"calendar_accounts\" duplicate_account\nUSING \"tmp_calendar_account_id_map_0040\" id_map\nWHERE duplicate_account.\"id\" = id_map.\"oldAccountId\";\n"
  },
  {
    "path": "packages/database/drizzle/0041_keen_black_panther.sql",
    "content": "CREATE TABLE \"profile_calendars\" (\n\t\"calendarId\" uuid NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"profileId\" uuid NOT NULL,\n\t\"role\" text NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"profile_calendars\" ADD CONSTRAINT \"profile_calendars_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"profile_calendars\" ADD CONSTRAINT \"profile_calendars_profileId_sync_profiles_id_fk\" FOREIGN KEY (\"profileId\") REFERENCES \"public\".\"sync_profiles\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE UNIQUE INDEX \"profile_calendars_unique_idx\" ON \"profile_calendars\" USING btree (\"profileId\",\"calendarId\",\"role\");--> statement-breakpoint\nCREATE INDEX \"profile_calendars_profile_idx\" ON \"profile_calendars\" USING btree (\"profileId\");"
  },
  {
    "path": "packages/database/drizzle/0042_famous_obadiah_stane.sql",
    "content": "ALTER TABLE \"source_destination_mappings\" DROP CONSTRAINT IF EXISTS \"source_destination_mappings_profileId_sync_profiles_id_fk\";\n--> statement-breakpoint\nDROP INDEX \"source_destination_mappings_profile_idx\";--> statement-breakpoint\nDROP INDEX \"source_destination_mapping_idx\";--> statement-breakpoint\n-- Deduplicate rows that differ only by profileId before dropping the column\nDELETE FROM \"source_destination_mappings\" a\n  USING \"source_destination_mappings\" b\n  WHERE a.\"sourceCalendarId\" = b.\"sourceCalendarId\"\n    AND a.\"destinationCalendarId\" = b.\"destinationCalendarId\"\n    AND a.\"createdAt\" > b.\"createdAt\";--> statement-breakpoint\nALTER TABLE \"source_destination_mappings\" DROP COLUMN \"profileId\";--> statement-breakpoint\nCREATE UNIQUE INDEX \"source_destination_mapping_idx\" ON \"source_destination_mappings\" USING btree (\"sourceCalendarId\",\"destinationCalendarId\");--> statement-breakpoint\nALTER TABLE \"profile_calendars\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nALTER TABLE \"sync_profiles\" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint\nDROP TABLE \"profile_calendars\" CASCADE;--> statement-breakpoint\nDROP TABLE \"sync_profiles\" CASCADE;\n"
  },
  {
    "path": "packages/database/drizzle/0043_smart_demogoblin.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"excludeEventDescription\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD COLUMN \"excludeEventLocation\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD COLUMN \"excludeEventName\" boolean DEFAULT false NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0044_crazy_kate_bishop.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"excludeAllDayEvents\" boolean DEFAULT false NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0045_flippant_paper_doll.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"customEventName\" text DEFAULT '' NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0046_rainy_steve_rogers.sql",
    "content": "ALTER TABLE \"event_states\" ADD COLUMN \"description\" text;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD COLUMN \"location\" text;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD COLUMN \"title\" text;\n--> statement-breakpoint\nUPDATE \"calendars\"\nSET \"syncToken\" = null\nWHERE \"calendarType\" IN ('oauth', 'caldav');\n"
  },
  {
    "path": "packages/database/drizzle/0047_soft_ravenous.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"includeInIcalFeed\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nUPDATE \"calendars\" SET \"includeInIcalFeed\" = true;\n"
  },
  {
    "path": "packages/database/drizzle/0048_gigantic_kid_colt.sql",
    "content": "CREATE TABLE \"ical_feed_settings\" (\n\t\"userId\" text PRIMARY KEY NOT NULL,\n\t\"includeEventName\" boolean DEFAULT false NOT NULL,\n\t\"includeEventDescription\" boolean DEFAULT false NOT NULL,\n\t\"includeEventLocation\" boolean DEFAULT false NOT NULL,\n\t\"excludeAllDayEvents\" boolean DEFAULT false NOT NULL,\n\t\"customEventName\" text DEFAULT 'Busy' NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nINSERT INTO \"ical_feed_settings\" (\n\t\"userId\",\n\t\"includeEventName\",\n\t\"includeEventDescription\",\n\t\"includeEventLocation\",\n\t\"excludeAllDayEvents\",\n\t\"customEventName\",\n\t\"updatedAt\"\n)\nSELECT\n\tcalendar_users.\"userId\",\n\tfalse,\n\tfalse,\n\tfalse,\n\tfalse,\n\t'{{calendar_name}}',\n\tcalendar_users.\"updatedAt\"\nFROM (\n\tSELECT\n\t\tc.\"userId\",\n\t\tMAX(c.\"updatedAt\") AS \"updatedAt\"\n\tFROM \"calendars\" c\n\tWHERE c.\"includeInIcalFeed\" = true\n\tGROUP BY c.\"userId\"\n) AS calendar_users;\n--> statement-breakpoint\nALTER TABLE \"ical_feed_settings\" ADD CONSTRAINT \"ical_feed_settings_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;\n"
  },
  {
    "path": "packages/database/drizzle/0049_handy_sentinels.sql",
    "content": "ALTER TABLE \"event_mappings\" ADD COLUMN \"syncEventHash\" text;"
  },
  {
    "path": "packages/database/drizzle/0050_purple_patch.sql",
    "content": "CREATE TABLE \"feedback\" (\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"message\" text NOT NULL,\n\t\"type\" text NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"wantsFollowUp\" boolean DEFAULT false NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"feedback\" ADD CONSTRAINT \"feedback_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"feedback_user_idx\" ON \"feedback\" USING btree (\"userId\");"
  },
  {
    "path": "packages/database/drizzle/0051_normal_mentallo.sql",
    "content": "ALTER TABLE \"event_states\" ADD COLUMN \"recurrenceRule\" text;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD COLUMN \"exceptionDates\" text;--> statement-breakpoint\nALTER TABLE \"event_states\" ADD COLUMN \"startTimeZone\" text;"
  },
  {
    "path": "packages/database/drizzle/0052_military_trish_tilby.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"originalName\" text;"
  },
  {
    "path": "packages/database/drizzle/0053_greedy_reptil.sql",
    "content": "ALTER TABLE \"user_subscriptions\" ADD COLUMN \"grandfathered\" boolean DEFAULT false NOT NULL;--> statement-breakpoint\nALTER TABLE \"user_subscriptions\" ADD COLUMN \"grandfatheredAt\" timestamp;"
  },
  {
    "path": "packages/database/drizzle/0054_nasty_sage.sql",
    "content": "ALTER TABLE \"user_subscriptions\" DROP COLUMN \"grandfathered\";--> statement-breakpoint\nALTER TABLE \"user_subscriptions\" DROP COLUMN \"grandfatheredAt\";"
  },
  {
    "path": "packages/database/drizzle/0055_zippy_wolfsbane.sql",
    "content": "ALTER TABLE \"event_states\" ADD COLUMN \"availability\" text;\nALTER TABLE \"event_states\" ADD COLUMN \"isAllDay\" boolean;\n"
  },
  {
    "path": "packages/database/drizzle/0056_ambiguous_unus.sql",
    "content": "ALTER TABLE \"event_states\" ADD COLUMN \"sourceEventType\" text;\n--> statement-breakpoint\nUPDATE \"calendars\"\nSET \"syncToken\" = null\nWHERE \"calendarType\" IN ('oauth', 'caldav');\n"
  },
  {
    "path": "packages/database/drizzle/0057_requeue_source_backfill.sql",
    "content": "UPDATE \"calendars\"\nSET \"syncToken\" = null\nWHERE \"calendarType\" IN ('oauth', 'caldav')\n  AND EXISTS (\n    SELECT 1\n    FROM \"event_states\"\n    WHERE \"event_states\".\"calendarId\" = \"calendars\".\"id\"\n      AND (\n        \"event_states\".\"sourceEventType\" IS NULL\n        OR \"event_states\".\"isAllDay\" IS NULL\n      )\n  );\n"
  },
  {
    "path": "packages/database/drizzle/0058_same_robbie_robertson.sql",
    "content": "CREATE TABLE \"oauth_access_token\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"token\" text NOT NULL,\n\t\"clientId\" text NOT NULL,\n\t\"sessionId\" text,\n\t\"userId\" text,\n\t\"referenceId\" text,\n\t\"refreshId\" text,\n\t\"expiresAt\" timestamp NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"scopes\" text[] NOT NULL,\n\tCONSTRAINT \"oauth_access_token_token_unique\" UNIQUE(\"token\")\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_application\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"clientId\" text NOT NULL,\n\t\"clientSecret\" text,\n\t\"disabled\" boolean DEFAULT false NOT NULL,\n\t\"skipConsent\" boolean,\n\t\"enableEndSession\" boolean,\n\t\"subjectType\" text,\n\t\"scopes\" text[],\n\t\"userId\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL,\n\t\"expiresAt\" timestamp,\n\t\"name\" text,\n\t\"uri\" text,\n\t\"icon\" text,\n\t\"contacts\" text[],\n\t\"tos\" text,\n\t\"policy\" text,\n\t\"softwareId\" text,\n\t\"softwareVersion\" text,\n\t\"softwareStatement\" text,\n\t\"redirectUris\" text[] NOT NULL,\n\t\"postLogoutRedirectUris\" text[],\n\t\"tokenEndpointAuthMethod\" text,\n\t\"grantTypes\" text[],\n\t\"responseTypes\" text[],\n\t\"public\" boolean,\n\t\"type\" text,\n\t\"requirePKCE\" boolean,\n\t\"referenceId\" text,\n\t\"metadata\" text,\n\tCONSTRAINT \"oauth_application_clientId_unique\" UNIQUE(\"clientId\")\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_consent\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"clientId\" text NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"referenceId\" text,\n\t\"scopes\" text[] NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nCREATE TABLE \"oauth_refresh_token\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"token\" text NOT NULL,\n\t\"clientId\" text NOT NULL,\n\t\"sessionId\" text,\n\t\"userId\" text NOT NULL,\n\t\"referenceId\" text,\n\t\"expiresAt\" timestamp NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"revoked\" timestamp,\n\t\"authTime\" timestamp,\n\t\"scopes\" text[] NOT NULL,\n\tCONSTRAINT \"oauth_refresh_token_token_unique\" UNIQUE(\"token\")\n);\n--> statement-breakpoint\nALTER TABLE \"oauth_access_token\" ADD CONSTRAINT \"oauth_access_token_clientId_oauth_application_clientId_fk\" FOREIGN KEY (\"clientId\") REFERENCES \"public\".\"oauth_application\"(\"clientId\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_access_token\" ADD CONSTRAINT \"oauth_access_token_sessionId_session_id_fk\" FOREIGN KEY (\"sessionId\") REFERENCES \"public\".\"session\"(\"id\") ON DELETE set null ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_access_token\" ADD CONSTRAINT \"oauth_access_token_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_access_token\" ADD CONSTRAINT \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\" FOREIGN KEY (\"refreshId\") REFERENCES \"public\".\"oauth_refresh_token\"(\"id\") ON DELETE set null ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_application\" ADD CONSTRAINT \"oauth_application_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_consent\" ADD CONSTRAINT \"oauth_consent_clientId_oauth_application_clientId_fk\" FOREIGN KEY (\"clientId\") REFERENCES \"public\".\"oauth_application\"(\"clientId\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_consent\" ADD CONSTRAINT \"oauth_consent_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_refresh_token\" ADD CONSTRAINT \"oauth_refresh_token_clientId_oauth_application_clientId_fk\" FOREIGN KEY (\"clientId\") REFERENCES \"public\".\"oauth_application\"(\"clientId\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_refresh_token\" ADD CONSTRAINT \"oauth_refresh_token_sessionId_session_id_fk\" FOREIGN KEY (\"sessionId\") REFERENCES \"public\".\"session\"(\"id\") ON DELETE set null ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"oauth_refresh_token\" ADD CONSTRAINT \"oauth_refresh_token_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"oauth_access_token_client_idx\" ON \"oauth_access_token\" USING btree (\"clientId\");--> statement-breakpoint\nCREATE INDEX \"oauth_access_token_session_idx\" ON \"oauth_access_token\" USING btree (\"sessionId\");--> statement-breakpoint\nCREATE INDEX \"oauth_access_token_user_idx\" ON \"oauth_access_token\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"oauth_access_token_refresh_idx\" ON \"oauth_access_token\" USING btree (\"refreshId\");--> statement-breakpoint\nCREATE INDEX \"oauth_application_user_idx\" ON \"oauth_application\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"oauth_consent_client_idx\" ON \"oauth_consent\" USING btree (\"clientId\");--> statement-breakpoint\nCREATE INDEX \"oauth_consent_user_idx\" ON \"oauth_consent\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"oauth_consent_reference_idx\" ON \"oauth_consent\" USING btree (\"referenceId\");--> statement-breakpoint\nCREATE INDEX \"oauth_refresh_token_client_idx\" ON \"oauth_refresh_token\" USING btree (\"clientId\");--> statement-breakpoint\nCREATE INDEX \"oauth_refresh_token_session_idx\" ON \"oauth_refresh_token\" USING btree (\"sessionId\");--> statement-breakpoint\nCREATE INDEX \"oauth_refresh_token_user_idx\" ON \"oauth_refresh_token\" USING btree (\"userId\");"
  },
  {
    "path": "packages/database/drizzle/0059_shocking_stone_men.sql",
    "content": "CREATE TABLE \"jwks\" (\n\t\"id\" text PRIMARY KEY NOT NULL,\n\t\"publicKey\" text NOT NULL,\n\t\"privateKey\" text NOT NULL,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"expiresAt\" timestamp\n);\n"
  },
  {
    "path": "packages/database/drizzle/0060_condemned_imperial_guard.sql",
    "content": "UPDATE \"calendar_accounts\"\nSET \"needsReauthentication\" = false\nWHERE \"needsReauthentication\" = true;\n--> statement-breakpoint\nUPDATE \"oauth_credentials\"\nSET \"needsReauthentication\" = false\nWHERE \"needsReauthentication\" = true;\n"
  },
  {
    "path": "packages/database/drizzle/0061_brief_toxin.sql",
    "content": "CREATE INDEX \"calendar_accounts_needs_reauth_idx\" ON \"calendar_accounts\" USING btree (\"needsReauthentication\");--> statement-breakpoint\nCREATE INDEX \"event_mappings_sync_hash_idx\" ON \"event_mappings\" USING btree (\"syncEventHash\");--> statement-breakpoint\nCREATE INDEX \"event_states_end_time_idx\" ON \"event_states\" USING btree (\"endTime\");--> statement-breakpoint\nCREATE INDEX \"oauth_credentials_expires_at_idx\" ON \"oauth_credentials\" USING btree (\"expiresAt\");"
  },
  {
    "path": "packages/database/drizzle/0062_lame_white_tiger.sql",
    "content": "CREATE TABLE \"api_tokens\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"name\" text NOT NULL,\n\t\"tokenHash\" text NOT NULL,\n\t\"tokenPrefix\" text NOT NULL,\n\t\"lastUsedAt\" timestamp,\n\t\"expiresAt\" timestamp,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\tCONSTRAINT \"api_tokens_tokenHash_unique\" UNIQUE(\"tokenHash\")\n);\n--> statement-breakpoint\nALTER TABLE \"api_tokens\" ADD CONSTRAINT \"api_tokens_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"api_tokens_user_idx\" ON \"api_tokens\" USING btree (\"userId\");--> statement-breakpoint\nCREATE UNIQUE INDEX \"api_tokens_hash_idx\" ON \"api_tokens\" USING btree (\"tokenHash\");"
  },
  {
    "path": "packages/database/drizzle/0063_friendly_black_panther.sql",
    "content": "CREATE TABLE \"user_events\" (\n\t\"id\" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,\n\t\"calendarId\" uuid NOT NULL,\n\t\"userId\" text NOT NULL,\n\t\"sourceEventUid\" text,\n\t\"title\" text,\n\t\"description\" text,\n\t\"location\" text,\n\t\"availability\" text,\n\t\"isAllDay\" boolean,\n\t\"startTime\" timestamp NOT NULL,\n\t\"endTime\" timestamp NOT NULL,\n\t\"startTimeZone\" text,\n\t\"createdAt\" timestamp DEFAULT now() NOT NULL,\n\t\"updatedAt\" timestamp DEFAULT now() NOT NULL\n);\n--> statement-breakpoint\nALTER TABLE \"user_events\" ADD CONSTRAINT \"user_events_calendarId_calendars_id_fk\" FOREIGN KEY (\"calendarId\") REFERENCES \"public\".\"calendars\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nALTER TABLE \"user_events\" ADD CONSTRAINT \"user_events_userId_user_id_fk\" FOREIGN KEY (\"userId\") REFERENCES \"public\".\"user\"(\"id\") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint\nCREATE INDEX \"user_events_user_idx\" ON \"user_events\" USING btree (\"userId\");--> statement-breakpoint\nCREATE INDEX \"user_events_calendar_idx\" ON \"user_events\" USING btree (\"calendarId\");--> statement-breakpoint\nCREATE INDEX \"user_events_start_time_idx\" ON \"user_events\" USING btree (\"startTime\");--> statement-breakpoint\nCREATE INDEX \"user_events_end_time_idx\" ON \"user_events\" USING btree (\"endTime\");"
  },
  {
    "path": "packages/database/drizzle/0064_talented_black_knight.sql",
    "content": "DELETE FROM \"calendar_snapshots\"\nWHERE \"id\" NOT IN (\n  SELECT DISTINCT ON (\"calendarId\") \"id\"\n  FROM \"calendar_snapshots\"\n  ORDER BY \"calendarId\", \"createdAt\" DESC\n);--> statement-breakpoint\nALTER TABLE \"calendar_snapshots\" ADD CONSTRAINT \"calendar_snapshots_calendarId_unique\" UNIQUE(\"calendarId\");"
  },
  {
    "path": "packages/database/drizzle/0065_dizzy_zarda.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"disabled\" boolean DEFAULT false NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/0066_nasty_bushwacker.sql",
    "content": "ALTER TABLE \"calendars\" ADD COLUMN \"failureCount\" integer DEFAULT 0 NOT NULL;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD COLUMN \"lastFailureAt\" timestamp;--> statement-breakpoint\nALTER TABLE \"calendars\" ADD COLUMN \"nextAttemptAt\" timestamp;"
  },
  {
    "path": "packages/database/drizzle/0067_curvy_mole_man.sql",
    "content": "ALTER TABLE \"calendars\" DROP COLUMN \"excludeWorkingLocation\";"
  },
  {
    "path": "packages/database/drizzle/0068_clumsy_starbolt.sql",
    "content": "UPDATE \"calendar_accounts\"\nSET \"needsReauthentication\" = false\nWHERE \"provider\" IN ('caldav', 'icloud', 'fastmail')\n  AND \"needsReauthentication\" = true;"
  },
  {
    "path": "packages/database/drizzle/0069_amazing_storm.sql",
    "content": "ALTER TABLE \"caldav_credentials\" ADD COLUMN \"authMethod\" text DEFAULT 'basic' NOT NULL;"
  },
  {
    "path": "packages/database/drizzle/meta/0000_snapshot.json",
    "content": "{\n  \"id\": \"228e30d3-87cd-479f-a7d1-3b3ec8954599\",\n  \"prevId\": \"00000000-0000-0000-0000-000000000000\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0001_snapshot.json",
    "content": "{\n  \"id\": \"c63e3d96-8bc7-41b2-8c2d-0e8a026a63ef\",\n  \"prevId\": \"228e30d3-87cd-479f-a7d1-3b3ec8954599\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0002_snapshot.json",
    "content": "{\n  \"id\": \"7b698bba-27e2-4a48-88a6-6865583ccc87\",\n  \"prevId\": \"c63e3d96-8bc7-41b2-8c2d-0e8a026a63ef\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_users_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_users_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_users_id_fk\": {\n          \"name\": \"calendars_userId_users_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_users_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_users_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.users\": {\n      \"name\": \"users\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0003_snapshot.json",
    "content": "{\n  \"id\": \"123a41c7-ddf3-4d03-be29-b92aedd03b7b\",\n  \"prevId\": \"7b698bba-27e2-4a48-88a6-6865583ccc87\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_users_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_users_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_users_id_fk\": {\n          \"name\": \"calendars_userId_users_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_users_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_users_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.users\": {\n      \"name\": \"users\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0004_snapshot.json",
    "content": "{\n  \"id\": \"c26ffbc7-e17d-4f9d-bed0-41ed7a234253\",\n  \"prevId\": \"123a41c7-ddf3-4d03-be29-b92aedd03b7b\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"json\": {\n          \"name\": \"json\",\n          \"type\": \"jsonb\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_users_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_users_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_users_id_fk\": {\n          \"name\": \"calendars_userId_users_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_users_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_users_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.users\": {\n      \"name\": \"users\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0005_snapshot.json",
    "content": "{\n  \"id\": \"28410039-b482-486e-b6d4-a8d0d0b99213\",\n  \"prevId\": \"c26ffbc7-e17d-4f9d-bed0-41ed7a234253\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"json\": {\n          \"name\": \"json\",\n          \"type\": \"jsonb\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_users_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_users_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_users_id_fk\": {\n          \"name\": \"calendars_userId_users_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_users_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_users_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.users\": {\n      \"name\": \"users\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0006_snapshot.json",
    "content": "{\n  \"id\": \"e49afa30-3e8e-4b93-b5a8-7ba931481101\",\n  \"prevId\": \"28410039-b482-486e-b6d4-a8d0d0b99213\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"json\": {\n          \"name\": \"json\",\n          \"type\": \"jsonb\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_users_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_users_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_users_id_fk\": {\n          \"name\": \"calendars_userId_users_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_users_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_users_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"users\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"no action\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.users\": {\n      \"name\": \"users\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0007_snapshot.json",
    "content": "{\n  \"id\": \"21be8d4a-a911-4d54-b76b-79c0e691f787\",\n  \"prevId\": \"e49afa30-3e8e-4b93-b5a8-7ba931481101\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"json\": {\n          \"name\": \"json\",\n          \"type\": \"jsonb\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_user_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0008_snapshot.json",
    "content": "{\n  \"id\": \"e5978e24-9f3d-432f-abfd-da70860fbea1\",\n  \"prevId\": \"21be8d4a-a911-4d54-b76b-79c0e691f787\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"json\": {\n          \"name\": \"json\",\n          \"type\": \"jsonb\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_userId_user_id_fk\": {\n          \"name\": \"calendar_snapshots_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0009_snapshot.json",
    "content": "{\n  \"id\": \"59f71d40-f2f8-41d4-b60f-38acadf8fdfb\",\n  \"prevId\": \"e5978e24-9f3d-432f-abfd-da70860fbea1\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"json\": {\n          \"name\": \"json\",\n          \"type\": \"jsonb\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0010_snapshot.json",
    "content": "{\n  \"id\": \"ae65eb9f-4779-405a-a415-ef687390572a\",\n  \"prevId\": \"59f71d40-f2f8-41d4-b60f-38acadf8fdfb\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"remoteUrl\": {\n          \"name\": \"remoteUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\"calendarId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0011_snapshot.json",
    "content": "{\n  \"id\": \"b609a747-9a49-4a38-852b-9e46e9715fdc\",\n  \"prevId\": \"ae65eb9f-4779-405a-a415-ef687390572a\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0012_snapshot.json",
    "content": "{\n  \"id\": \"df2b95a6-f356-49e4-8ce3-ae87a7bf4533\",\n  \"prevId\": \"b609a747-9a49-4a38-852b-9e46e9715fdc\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0013_snapshot.json",
    "content": "{\n  \"id\": \"e795942f-cd7d-47d6-9ae8-a661b322e172\",\n  \"prevId\": \"df2b95a6-f356-49e4-8ce3-ae87a7bf4533\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0014_snapshot.json",
    "content": "{\n  \"id\": \"942c2885-9cce-4e33-8323-538f625e1655\",\n  \"prevId\": \"e795942f-cd7d-47d6-9ae8-a661b322e172\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deletedAt\": {\n          \"name\": \"deletedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0015_snapshot.json",
    "content": "{\n  \"id\": \"9465c724-c51d-4e65-93a4-dd30236963a3\",\n  \"prevId\": \"942c2885-9cce-4e33-8323-538f625e1655\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0016_snapshot.json",
    "content": "{\n  \"id\": \"f0456172-f0f1-4982-a6a3-72aa91d6489b\",\n  \"prevId\": \"9465c724-c51d-4e65-93a4-dd30236963a3\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"webauthnUserID\": {\n          \"name\": \"webauthnUserID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0017_snapshot.json",
    "content": "{\n  \"id\": \"964aa196-81ae-4b03-bbdb-e54d19728bc9\",\n  \"prevId\": \"f0456172-f0f1-4982-a6a3-72aa91d6489b\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"webauthnUserID\": {\n          \"name\": \"webauthnUserID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0018_snapshot.json",
    "content": "{\n  \"id\": \"818d770a-979c-428b-ad5c-6ed04977f22e\",\n  \"prevId\": \"964aa196-81ae-4b03-bbdb-e54d19728bc9\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0019_snapshot.json",
    "content": "{\n  \"id\": \"7b6dfe06-c678-4530-9662-ac49afcdbf7d\",\n  \"prevId\": \"818d770a-979c-428b-ad5c-6ed04977f22e\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_user_provider_idx\": {\n          \"name\": \"calendar_destinations_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0020_snapshot.json",
    "content": "{\n  \"id\": \"c8e85018-d2e8-4e38-a5c8-0c05208bdff4\",\n  \"prevId\": \"7b6dfe06-c678-4530-9662-ac49afcdbf7d\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_user_provider_account_idx\": {\n          \"name\": \"calendar_destinations_user_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_user_provider_idx\": {\n          \"name\": \"sync_status_user_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_userId_user_id_fk\": {\n          \"name\": \"sync_status_userId_user_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0021_snapshot.json",
    "content": "{\n  \"id\": \"4fd8de9e-6dd7-4d60-a9f5-926f2d17b147\",\n  \"prevId\": \"c8e85018-d2e8-4e38-a5c8-0c05208bdff4\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_user_provider_account_idx\": {\n          \"name\": \"calendar_destinations_user_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0022_snapshot.json",
    "content": "{\n  \"id\": \"c55f7543-16f0-4646-84da-ce4fa4a1b2ee\",\n  \"prevId\": \"4fd8de9e-6dd7-4d60-a9f5-926f2d17b147\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0023_snapshot.json",
    "content": "{\n  \"id\": \"1b7ea533-8d07-4047-af53-71bad86b18b0\",\n  \"prevId\": \"c55f7543-16f0-4646-84da-ce4fa4a1b2ee\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0024_snapshot.json",
    "content": "{\n  \"id\": \"532122ff-1cf0-4dce-a462-a4232fdd07d5\",\n  \"prevId\": \"1b7ea533-8d07-4047-af53-71bad86b18b0\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0025_snapshot.json",
    "content": "{\n  \"id\": \"546a2b95-e84d-446d-b816-b245915a5d50\",\n  \"prevId\": \"532122ff-1cf0-4dce-a462-a4232fdd07d5\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0026_snapshot.json",
    "content": "{\n  \"id\": \"4a67582b-2214-4c3c-93a2-f613b059b613\",\n  \"prevId\": \"546a2b95-e84d-446d-b816-b245915a5d50\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0027_snapshot.json",
    "content": "{\n  \"id\": \"3e281892-fb7a-4770-8167-987281c333e9\",\n  \"prevId\": \"4a67582b-2214-4c3c-93a2-f613b059b613\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0028_snapshot.json",
    "content": "{\n  \"id\": \"80ed3b75-7198-452f-bf81-7243b9c61957\",\n  \"prevId\": \"3e281892-fb7a-4770-8167-987281c333e9\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        },\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0029_snapshot.json",
    "content": "{\n  \"id\": \"b2bced66-5844-4938-8318-6247de48a351\",\n  \"prevId\": \"80ed3b75-7198-452f-bf81-7243b9c61957\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0030_snapshot.json",
    "content": "{\n  \"id\": \"aed75259-f71c-4aa9-8694-009c4aee117c\",\n  \"prevId\": \"b2bced66-5844-4938-8318-6247de48a351\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_calendar_sources\": {\n      \"name\": \"oauth_calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_calendar_sources_user_calendar_idx\": {\n          \"name\": \"oauth_calendar_sources_user_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"externalCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_user_idx\": {\n          \"name\": \"oauth_calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_destination_idx\": {\n          \"name\": \"oauth_calendar_sources_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_provider_idx\": {\n          \"name\": \"oauth_calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_calendar_sources_userId_user_id_fk\": {\n          \"name\": \"oauth_calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_event_mappings\": {\n      \"name\": \"oauth_event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthEventStateId\": {\n          \"name\": \"oauthEventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_event_mappings_event_dest_idx\": {\n          \"name\": \"oauth_event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthEventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_mappings_destination_idx\": {\n          \"name\": \"oauth_event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\": {\n          \"name\": \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\",\n          \"tableFrom\": \"oauth_event_mappings\",\n          \"tableTo\": \"oauth_event_states\",\n          \"columnsFrom\": [\"oauthEventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_event_states\": {\n      \"name\": \"oauth_event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthSourceId\": {\n          \"name\": \"oauthSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_event_states_start_time_idx\": {\n          \"name\": \"oauth_event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_states_identity_idx\": {\n          \"name\": \"oauth_event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_states_source_idx\": {\n          \"name\": \"oauth_event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\": {\n          \"name\": \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\",\n          \"tableFrom\": \"oauth_event_states\",\n          \"tableTo\": \"oauth_calendar_sources\",\n          \"columnsFrom\": [\"oauthSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_destination_mappings\": {\n      \"name\": \"oauth_source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthSourceId\": {\n          \"name\": \"oauthSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_destination_mapping_idx\": {\n          \"name\": \"oauth_source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_destination_mappings_source_idx\": {\n          \"name\": \"oauth_source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_destination_mappings_destination_idx\": {\n          \"name\": \"oauth_source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\": {\n          \"name\": \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\",\n          \"tableFrom\": \"oauth_source_destination_mappings\",\n          \"tableTo\": \"oauth_calendar_sources\",\n          \"columnsFrom\": [\"oauthSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0031_snapshot.json",
    "content": "{\n  \"id\": \"234f2b81-15eb-4651-91cf-f014d7065db9\",\n  \"prevId\": \"aed75259-f71c-4aa9-8694-009c4aee117c\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_event_mappings\": {\n      \"name\": \"caldav_event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavEventStateId\": {\n          \"name\": \"caldavEventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"caldav_event_mappings_event_dest_idx\": {\n          \"name\": \"caldav_event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavEventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_event_mappings_destination_idx\": {\n          \"name\": \"caldav_event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_event_mappings_caldavEventStateId_caldav_event_states_id_fk\": {\n          \"name\": \"caldav_event_mappings_caldavEventStateId_caldav_event_states_id_fk\",\n          \"tableFrom\": \"caldav_event_mappings\",\n          \"tableTo\": \"caldav_event_states\",\n          \"columnsFrom\": [\"caldavEventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"caldav_event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"caldav_event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"caldav_event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_event_states\": {\n      \"name\": \"caldav_event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavSourceId\": {\n          \"name\": \"caldavSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"caldav_event_states_start_time_idx\": {\n          \"name\": \"caldav_event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_event_states_identity_idx\": {\n          \"name\": \"caldav_event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_event_states_source_idx\": {\n          \"name\": \"caldav_event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_event_states_caldavSourceId_caldav_sources_id_fk\": {\n          \"name\": \"caldav_event_states_caldavSourceId_caldav_sources_id_fk\",\n          \"tableFrom\": \"caldav_event_states\",\n          \"tableTo\": \"caldav_sources\",\n          \"columnsFrom\": [\"caldavSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_credentials\": {\n      \"name\": \"caldav_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_destination_mappings\": {\n      \"name\": \"caldav_source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavSourceId\": {\n          \"name\": \"caldavSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        }\n      },\n      \"indexes\": {\n        \"caldav_source_destination_mapping_idx\": {\n          \"name\": \"caldav_source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_source_destination_mappings_source_idx\": {\n          \"name\": \"caldav_source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_source_destination_mappings_destination_idx\": {\n          \"name\": \"caldav_source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_source_destination_mappings_caldavSourceId_caldav_sources_id_fk\": {\n          \"name\": \"caldav_source_destination_mappings_caldavSourceId_caldav_sources_id_fk\",\n          \"tableFrom\": \"caldav_source_destination_mappings\",\n          \"tableTo\": \"caldav_sources\",\n          \"columnsFrom\": [\"caldavSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"caldav_source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"caldav_source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"caldav_source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_sources\": {\n      \"name\": \"caldav_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"credentialId\": {\n          \"name\": \"credentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"caldav_sources_user_idx\": {\n          \"name\": \"caldav_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_sources_provider_idx\": {\n          \"name\": \"caldav_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_sources_user_calendar_idx\": {\n          \"name\": \"caldav_sources_user_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarUrl\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_sources_credentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"caldav_sources_credentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"caldav_sources\",\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsFrom\": [\"credentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"caldav_sources_userId_user_id_fk\": {\n          \"name\": \"caldav_sources_userId_user_id_fk\",\n          \"tableFrom\": \"caldav_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_calendar_sources\": {\n      \"name\": \"oauth_calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthSourceCredentialId\": {\n          \"name\": \"oauthSourceCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_calendar_sources_user_calendar_idx\": {\n          \"name\": \"oauth_calendar_sources_user_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"externalCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_user_idx\": {\n          \"name\": \"oauth_calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_destination_idx\": {\n          \"name\": \"oauth_calendar_sources_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_credential_idx\": {\n          \"name\": \"oauth_calendar_sources_credential_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceCredentialId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_provider_idx\": {\n          \"name\": \"oauth_calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_calendar_sources_oauthSourceCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"oauth_calendar_sources_oauthSourceCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"oauthSourceCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_calendar_sources_userId_user_id_fk\": {\n          \"name\": \"oauth_calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_event_mappings\": {\n      \"name\": \"oauth_event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthEventStateId\": {\n          \"name\": \"oauthEventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_event_mappings_event_dest_idx\": {\n          \"name\": \"oauth_event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthEventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_mappings_destination_idx\": {\n          \"name\": \"oauth_event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\": {\n          \"name\": \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\",\n          \"tableFrom\": \"oauth_event_mappings\",\n          \"tableTo\": \"oauth_event_states\",\n          \"columnsFrom\": [\"oauthEventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_event_states\": {\n      \"name\": \"oauth_event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthSourceId\": {\n          \"name\": \"oauthSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_event_states_start_time_idx\": {\n          \"name\": \"oauth_event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_states_identity_idx\": {\n          \"name\": \"oauth_event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_states_source_idx\": {\n          \"name\": \"oauth_event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\": {\n          \"name\": \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\",\n          \"tableFrom\": \"oauth_event_states\",\n          \"tableTo\": \"oauth_calendar_sources\",\n          \"columnsFrom\": [\"oauthSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_credentials\": {\n      \"name\": \"oauth_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_credentials_user_idx\": {\n          \"name\": \"oauth_source_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_credentials_provider_idx\": {\n          \"name\": \"oauth_source_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_source_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_source_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_destination_mappings\": {\n      \"name\": \"oauth_source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthSourceId\": {\n          \"name\": \"oauthSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_destination_mapping_idx\": {\n          \"name\": \"oauth_source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_destination_mappings_source_idx\": {\n          \"name\": \"oauth_source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_destination_mappings_destination_idx\": {\n          \"name\": \"oauth_source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\": {\n          \"name\": \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\",\n          \"tableFrom\": \"oauth_source_destination_mappings\",\n          \"tableTo\": \"oauth_calendar_sources\",\n          \"columnsFrom\": [\"oauthSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0032_snapshot.json",
    "content": "{\n  \"id\": \"330b1362-2bd2-4a49-aa07-bb125ee3b784\",\n  \"prevId\": \"234f2b81-15eb-4651-91cf-f014d7065db9\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_event_mappings\": {\n      \"name\": \"caldav_event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavEventStateId\": {\n          \"name\": \"caldavEventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"caldav_event_mappings_event_dest_idx\": {\n          \"name\": \"caldav_event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavEventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_event_mappings_destination_idx\": {\n          \"name\": \"caldav_event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_event_mappings_caldavEventStateId_caldav_event_states_id_fk\": {\n          \"name\": \"caldav_event_mappings_caldavEventStateId_caldav_event_states_id_fk\",\n          \"tableFrom\": \"caldav_event_mappings\",\n          \"tableTo\": \"caldav_event_states\",\n          \"columnsFrom\": [\"caldavEventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"caldav_event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"caldav_event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"caldav_event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_event_states\": {\n      \"name\": \"caldav_event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavSourceId\": {\n          \"name\": \"caldavSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"caldav_event_states_start_time_idx\": {\n          \"name\": \"caldav_event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_event_states_identity_idx\": {\n          \"name\": \"caldav_event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_event_states_source_idx\": {\n          \"name\": \"caldav_event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_event_states_caldavSourceId_caldav_sources_id_fk\": {\n          \"name\": \"caldav_event_states_caldavSourceId_caldav_sources_id_fk\",\n          \"tableFrom\": \"caldav_event_states\",\n          \"tableTo\": \"caldav_sources\",\n          \"columnsFrom\": [\"caldavSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_credentials\": {\n      \"name\": \"caldav_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_destination_mappings\": {\n      \"name\": \"caldav_source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavSourceId\": {\n          \"name\": \"caldavSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        }\n      },\n      \"indexes\": {\n        \"caldav_source_destination_mapping_idx\": {\n          \"name\": \"caldav_source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_source_destination_mappings_source_idx\": {\n          \"name\": \"caldav_source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"caldavSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_source_destination_mappings_destination_idx\": {\n          \"name\": \"caldav_source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_source_destination_mappings_caldavSourceId_caldav_sources_id_fk\": {\n          \"name\": \"caldav_source_destination_mappings_caldavSourceId_caldav_sources_id_fk\",\n          \"tableFrom\": \"caldav_source_destination_mappings\",\n          \"tableTo\": \"caldav_sources\",\n          \"columnsFrom\": [\"caldavSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"caldav_source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"caldav_source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"caldav_source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_sources\": {\n      \"name\": \"caldav_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"credentialId\": {\n          \"name\": \"credentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"caldav_sources_user_idx\": {\n          \"name\": \"caldav_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_sources_provider_idx\": {\n          \"name\": \"caldav_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"caldav_sources_user_calendar_idx\": {\n          \"name\": \"caldav_sources_user_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarUrl\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"caldav_sources_credentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"caldav_sources_credentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"caldav_sources\",\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsFrom\": [\"credentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"caldav_sources_userId_user_id_fk\": {\n          \"name\": \"caldav_sources_userId_user_id_fk\",\n          \"tableFrom\": \"caldav_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_remote_ical_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"remote_ical_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_sources\": {\n      \"name\": \"calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceType\": {\n          \"name\": \"sourceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_sources_user_idx\": {\n          \"name\": \"calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_type_idx\": {\n          \"name\": \"calendar_sources_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_provider_idx\": {\n          \"name\": \"calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_userId_user_id_fk\": {\n          \"name\": \"calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_source_idx\": {\n          \"name\": \"event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_calendar_sources\": {\n      \"name\": \"oauth_calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthSourceCredentialId\": {\n          \"name\": \"oauthSourceCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_calendar_sources_user_calendar_idx\": {\n          \"name\": \"oauth_calendar_sources_user_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"externalCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_user_idx\": {\n          \"name\": \"oauth_calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_destination_idx\": {\n          \"name\": \"oauth_calendar_sources_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_credential_idx\": {\n          \"name\": \"oauth_calendar_sources_credential_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceCredentialId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_calendar_sources_provider_idx\": {\n          \"name\": \"oauth_calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_calendar_sources_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_calendar_sources_oauthSourceCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"oauth_calendar_sources_oauthSourceCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"oauthSourceCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_calendar_sources_userId_user_id_fk\": {\n          \"name\": \"oauth_calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_event_mappings\": {\n      \"name\": \"oauth_event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthEventStateId\": {\n          \"name\": \"oauthEventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_event_mappings_event_dest_idx\": {\n          \"name\": \"oauth_event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthEventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_mappings_destination_idx\": {\n          \"name\": \"oauth_event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\": {\n          \"name\": \"oauth_event_mappings_oauthEventStateId_oauth_event_states_id_fk\",\n          \"tableFrom\": \"oauth_event_mappings\",\n          \"tableTo\": \"oauth_event_states\",\n          \"columnsFrom\": [\"oauthEventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_event_states\": {\n      \"name\": \"oauth_event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthSourceId\": {\n          \"name\": \"oauthSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_event_states_start_time_idx\": {\n          \"name\": \"oauth_event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_states_identity_idx\": {\n          \"name\": \"oauth_event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_event_states_source_idx\": {\n          \"name\": \"oauth_event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\": {\n          \"name\": \"oauth_event_states_oauthSourceId_oauth_calendar_sources_id_fk\",\n          \"tableFrom\": \"oauth_event_states\",\n          \"tableTo\": \"oauth_calendar_sources\",\n          \"columnsFrom\": [\"oauthSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_credentials\": {\n      \"name\": \"oauth_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_credentials_user_idx\": {\n          \"name\": \"oauth_source_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_credentials_provider_idx\": {\n          \"name\": \"oauth_source_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_source_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_source_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_destination_mappings\": {\n      \"name\": \"oauth_source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"oauthSourceId\": {\n          \"name\": \"oauthSourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_destination_mapping_idx\": {\n          \"name\": \"oauth_source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_destination_mappings_source_idx\": {\n          \"name\": \"oauth_source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"oauthSourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_destination_mappings_destination_idx\": {\n          \"name\": \"oauth_source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"oauth_source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"oauth_source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\": {\n          \"name\": \"oauth_source_destination_mappings_oauthSourceId_oauth_calendar_sources_id_fk\",\n          \"tableFrom\": \"oauth_source_destination_mappings\",\n          \"tableTo\": \"oauth_calendar_sources\",\n          \"columnsFrom\": [\"oauthSourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.remote_ical_sources\": {\n      \"name\": \"remote_ical_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"remote_ical_sources_userId_user_id_fk\": {\n          \"name\": \"remote_ical_sources_userId_user_id_fk\",\n          \"tableFrom\": \"remote_ical_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0033_snapshot.json",
    "content": "{\n  \"id\": \"08626cf5-4b9c-4d93-bc68-1e7ec1a0db41\",\n  \"prevId\": \"330b1362-2bd2-4a49-aa07-bb125ee3b784\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_credentials\": {\n      \"name\": \"caldav_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_sources\": {\n      \"name\": \"calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceType\": {\n          \"name\": \"sourceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_sources_user_idx\": {\n          \"name\": \"calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_type_idx\": {\n          \"name\": \"calendar_sources_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_provider_idx\": {\n          \"name\": \"calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_userId_user_id_fk\": {\n          \"name\": \"calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_source_idx\": {\n          \"name\": \"event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_credentials\": {\n      \"name\": \"oauth_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_credentials_user_idx\": {\n          \"name\": \"oauth_source_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_credentials_provider_idx\": {\n          \"name\": \"oauth_source_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_source_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_source_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0034_snapshot.json",
    "content": "{\n  \"id\": \"57a12523-bd19-4862-8f30-b447ba3cad35\",\n  \"prevId\": \"08626cf5-4b9c-4d93-bc68-1e7ec1a0db41\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_credentials\": {\n      \"name\": \"caldav_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_sources\": {\n      \"name\": \"calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceType\": {\n          \"name\": \"sourceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_sources_user_idx\": {\n          \"name\": \"calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_type_idx\": {\n          \"name\": \"calendar_sources_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_provider_idx\": {\n          \"name\": \"calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_userId_user_id_fk\": {\n          \"name\": \"calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_source_idx\": {\n          \"name\": \"event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_credentials\": {\n      \"name\": \"oauth_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_credentials_user_idx\": {\n          \"name\": \"oauth_source_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_credentials_provider_idx\": {\n          \"name\": \"oauth_source_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_source_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_source_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0035_snapshot.json",
    "content": "{\n  \"id\": \"37af1026-6001-4876-b2ec-8473b98b773d\",\n  \"prevId\": \"57a12523-bd19-4862-8f30-b447ba3cad35\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_credentials\": {\n      \"name\": \"caldav_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_sources\": {\n      \"name\": \"calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceType\": {\n          \"name\": \"sourceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_sources_user_idx\": {\n          \"name\": \"calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_type_idx\": {\n          \"name\": \"calendar_sources_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_sources_provider_idx\": {\n          \"name\": \"calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_sources_userId_user_id_fk\": {\n          \"name\": \"calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_source_idx\": {\n          \"name\": \"event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_credentials\": {\n      \"name\": \"oauth_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_credentials_user_idx\": {\n          \"name\": \"oauth_source_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_source_credentials_provider_idx\": {\n          \"name\": \"oauth_source_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_source_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_source_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendar_sources\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\"userId\"],\n          \"columnsTo\": [\"id\"],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"token\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"email\"]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\"username\"]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0036_snapshot.json",
    "content": "{\n  \"id\": \"783263e1-cf51-4774-9465-8c852e4a1da7\",\n  \"prevId\": \"37af1026-6001-4876-b2ec-8473b98b773d\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_source_credentials\": {\n      \"name\": \"caldav_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_destinations\": {\n      \"name\": \"calendar_destinations\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_destinations_provider_account_idx\": {\n          \"name\": \"calendar_destinations_provider_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_destinations_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_destinations_userId_user_id_fk\": {\n          \"name\": \"calendar_destinations_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_destinations\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"calendar_snapshots_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"tableTo\": \"calendar_sources\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_sources\": {\n      \"name\": \"calendar_sources\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceType\": {\n          \"name\": \"sourceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_sources_user_idx\": {\n          \"name\": \"calendar_sources_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendar_sources_type_idx\": {\n          \"name\": \"calendar_sources_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendar_sources_provider_idx\": {\n          \"name\": \"calendar_sources_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_caldavCredentialId_caldav_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"columnsFrom\": [\"caldavCredentialId\"],\n          \"tableTo\": \"caldav_source_credentials\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        },\n        \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\": {\n          \"name\": \"calendar_sources_oauthCredentialId_oauth_source_credentials_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"columnsFrom\": [\"oauthCredentialId\"],\n          \"tableTo\": \"oauth_source_credentials\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        },\n        \"calendar_sources_userId_user_id_fk\": {\n          \"name\": \"calendar_sources_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_sources\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_dest_idx\": {\n          \"name\": \"event_mappings_event_dest_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_mappings_destination_idx\": {\n          \"name\": \"event_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"event_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\"eventStateId\"],\n          \"tableTo\": \"event_states\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_source_idx\": {\n          \"name\": \"event_states_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"event_states_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"tableTo\": \"calendar_sources\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_source_credentials\": {\n      \"name\": \"oauth_source_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_source_credentials_user_idx\": {\n          \"name\": \"oauth_source_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_source_credentials_provider_idx\": {\n          \"name\": \"oauth_source_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_source_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_source_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_source_credentials\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceId\": {\n          \"name\": \"sourceId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"source_destination_mappings_sourceId_calendar_sources_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceId_calendar_sources_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\"sourceId\"],\n          \"tableTo\": \"calendar_sources\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"destinationId\": {\n          \"name\": \"destinationId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_destination_idx\": {\n          \"name\": \"sync_status_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_destinationId_calendar_destinations_id_fk\": {\n          \"name\": \"sync_status_destinationId_calendar_destinations_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"columnsFrom\": [\"destinationId\"],\n          \"tableTo\": \"calendar_destinations\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"columnsFrom\": [\"userId\"],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\"id\"],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"columns\": [\"token\"],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"columns\": [\"email\"],\n          \"nullsNotDistinct\": false\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"columns\": [\"username\"],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"views\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}\n"
  },
  {
    "path": "packages/database/drizzle/meta/0037_snapshot.json",
    "content": "{\n  \"id\": \"89660b10-d568-4171-bcff-3d4ea5471836\",\n  \"prevId\": \"783263e1-cf51-4774-9465-8c852e4a1da7\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"role\": {\n          \"name\": \"role\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_role_idx\": {\n          \"name\": \"calendars_role_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"role\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0038_snapshot.json",
    "content": "{\n  \"id\": \"1caf9c83-36ad-4200-b2e8-b8821d2da3e9\",\n  \"prevId\": \"89660b10-d568-4171-bcff-3d4ea5471836\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0039_snapshot.json",
    "content": "{\n  \"id\": \"29b751fe-9f8a-46b8-aca9-c5b75b972ad2\",\n  \"prevId\": \"1caf9c83-36ad-4200-b2e8-b8821d2da3e9\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"profileId\": {\n          \"name\": \"profileId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_profile_idx\": {\n          \"name\": \"source_destination_mappings_profile_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_profileId_sync_profiles_id_fk\": {\n          \"name\": \"source_destination_mappings_profileId_sync_profiles_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"sync_profiles\",\n          \"columnsFrom\": [\n            \"profileId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_profiles\": {\n      \"name\": \"sync_profiles\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"sync_profiles_user_idx\": {\n          \"name\": \"sync_profiles_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_profiles_userId_user_id_fk\": {\n          \"name\": \"sync_profiles_userId_user_id_fk\",\n          \"tableFrom\": \"sync_profiles\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0040_snapshot.json",
    "content": "{\n  \"id\": \"816fe68f-f264-4195-8619-987ff04c0788\",\n  \"prevId\": \"29b751fe-9f8a-46b8-aca9-c5b75b972ad2\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"profileId\": {\n          \"name\": \"profileId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_profile_idx\": {\n          \"name\": \"source_destination_mappings_profile_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_profileId_sync_profiles_id_fk\": {\n          \"name\": \"source_destination_mappings_profileId_sync_profiles_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"sync_profiles\",\n          \"columnsFrom\": [\n            \"profileId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_profiles\": {\n      \"name\": \"sync_profiles\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"sync_profiles_user_idx\": {\n          \"name\": \"sync_profiles_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_profiles_userId_user_id_fk\": {\n          \"name\": \"sync_profiles_userId_user_id_fk\",\n          \"tableFrom\": \"sync_profiles\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0041_snapshot.json",
    "content": "{\n  \"id\": \"717fa967-b0a4-4d7f-b42a-50edb3a20c28\",\n  \"prevId\": \"816fe68f-f264-4195-8619-987ff04c0788\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.profile_calendars\": {\n      \"name\": \"profile_calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"profileId\": {\n          \"name\": \"profileId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"role\": {\n          \"name\": \"role\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"profile_calendars_unique_idx\": {\n          \"name\": \"profile_calendars_unique_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"role\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"profile_calendars_profile_idx\": {\n          \"name\": \"profile_calendars_profile_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"profile_calendars_calendarId_calendars_id_fk\": {\n          \"name\": \"profile_calendars_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"profile_calendars\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"profile_calendars_profileId_sync_profiles_id_fk\": {\n          \"name\": \"profile_calendars_profileId_sync_profiles_id_fk\",\n          \"tableFrom\": \"profile_calendars\",\n          \"tableTo\": \"sync_profiles\",\n          \"columnsFrom\": [\n            \"profileId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"profileId\": {\n          \"name\": \"profileId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_profile_idx\": {\n          \"name\": \"source_destination_mappings_profile_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"profileId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_profileId_sync_profiles_id_fk\": {\n          \"name\": \"source_destination_mappings_profileId_sync_profiles_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"sync_profiles\",\n          \"columnsFrom\": [\n            \"profileId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_profiles\": {\n      \"name\": \"sync_profiles\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"sync_profiles_user_idx\": {\n          \"name\": \"sync_profiles_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_profiles_userId_user_id_fk\": {\n          \"name\": \"sync_profiles_userId_user_id_fk\",\n          \"tableFrom\": \"sync_profiles\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0042_snapshot.json",
    "content": "{\n  \"id\": \"a0702922-1512-4dac-b758-d0f6524a57e0\",\n  \"prevId\": \"717fa967-b0a4-4d7f-b42a-50edb3a20c28\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0043_snapshot.json",
    "content": "{\n  \"id\": \"16cabb98-b746-47e6-a3b8-96c544acf69f\",\n  \"prevId\": \"a0702922-1512-4dac-b758-d0f6524a57e0\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0044_snapshot.json",
    "content": "{\n  \"id\": \"057d18ac-64c6-41cb-9df9-b8a370c9871c\",\n  \"prevId\": \"16cabb98-b746-47e6-a3b8-96c544acf69f\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0045_snapshot.json",
    "content": "{\n  \"id\": \"fddec562-d951-4bb0-9028-e68235bee7fd\",\n  \"prevId\": \"057d18ac-64c6-41cb-9df9-b8a370c9871c\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0046_snapshot.json",
    "content": "{\n  \"id\": \"33273e60-2c19-4887-b052-26100922b8af\",\n  \"prevId\": \"fddec562-d951-4bb0-9028-e68235bee7fd\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0047_snapshot.json",
    "content": "{\n  \"id\": \"a9b742e5-9099-4e05-ae32-da011084b99e\",\n  \"prevId\": \"33273e60-2c19-4887-b052-26100922b8af\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0048_snapshot.json",
    "content": "{\n  \"id\": \"b32b0fc1-ed30-40ef-80af-a20b1c6523bd\",\n  \"prevId\": \"a9b742e5-9099-4e05-ae32-da011084b99e\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0049_snapshot.json",
    "content": "{\n  \"id\": \"c791ecdb-a22a-448b-9d50-2b45f6d7f395\",\n  \"prevId\": \"b32b0fc1-ed30-40ef-80af-a20b1c6523bd\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0050_snapshot.json",
    "content": "{\n  \"id\": \"57583bac-3799-4c3a-a2ec-0bc34350938e\",\n  \"prevId\": \"c791ecdb-a22a-448b-9d50-2b45f6d7f395\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0051_snapshot.json",
    "content": "{\n  \"id\": \"c8705b7b-3995-478b-babb-784574f2a89f\",\n  \"prevId\": \"57583bac-3799-4c3a-a2ec-0bc34350938e\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0052_snapshot.json",
    "content": "{\n  \"id\": \"ad6b0d91-6299-47f0-a131-833c0f697ff2\",\n  \"prevId\": \"c8705b7b-3995-478b-babb-784574f2a89f\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0053_snapshot.json",
    "content": "{\n  \"id\": \"2a1db6f2-bc5d-4841-a3cb-2eafa957fa16\",\n  \"prevId\": \"ad6b0d91-6299-47f0-a131-833c0f697ff2\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"grandfathered\": {\n          \"name\": \"grandfathered\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"grandfatheredAt\": {\n          \"name\": \"grandfatheredAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0054_snapshot.json",
    "content": "{\n  \"id\": \"006015ba-abc4-4ad7-b4d0-566f9e83dcdd\",\n  \"prevId\": \"2a1db6f2-bc5d-4841-a3cb-2eafa957fa16\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0055_snapshot.json",
    "content": "{\n  \"id\": \"46ae961a-5c3a-4622-ac98-9e74e249bc6f\",\n  \"prevId\": \"006015ba-abc4-4ad7-b4d0-566f9e83dcdd\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0056_snapshot.json",
    "content": "{\n  \"id\": \"22a339c0-ebd4-42af-abd6-c2f029fb6ee8\",\n  \"prevId\": \"46ae961a-5c3a-4622-ac98-9e74e249bc6f\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0057_snapshot.json",
    "content": "{\n  \"id\": \"b8cf3084-18f5-4d9c-af91-15ed418cd0d1\",\n  \"prevId\": \"22a339c0-ebd4-42af-abd6-c2f029fb6ee8\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"tableTo\": \"event_states\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"columns\": [\n            \"email\"\n          ],\n          \"nullsNotDistinct\": false\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"columns\": [\n            \"username\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"views\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0058_snapshot.json",
    "content": "{\n  \"id\": \"a5503bb6-2d5f-4d76-8782-2fdc381c7d1c\",\n  \"prevId\": \"b8cf3084-18f5-4d9c-af91-15ed418cd0d1\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0059_snapshot.json",
    "content": "{\n  \"id\": \"b9af128a-4b6a-4542-b271-78694e346314\",\n  \"prevId\": \"a5503bb6-2d5f-4d76-8782-2fdc381c7d1c\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0060_snapshot.json",
    "content": "{\n  \"id\": \"c1388f27-1a59-409f-a411-4974bd8df54a\",\n  \"prevId\": \"b9af128a-4b6a-4542-b271-78694e346314\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"tableTo\": \"event_states\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"tableTo\": \"oauth_application\",\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"tableTo\": \"session\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"columns\": [\n            \"clientId\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"tableTo\": \"oauth_application\",\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"tableTo\": \"oauth_application\",\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"tableTo\": \"session\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"columns\": [\n            \"email\"\n          ],\n          \"nullsNotDistinct\": false\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"columns\": [\n            \"username\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"views\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0061_snapshot.json",
    "content": "{\n  \"id\": \"d588e608-517b-441e-bc06-b85eea7e53c0\",\n  \"prevId\": \"c1388f27-1a59-409f-a411-4974bd8df54a\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0062_snapshot.json",
    "content": "{\n  \"id\": \"ce1fc6db-d260-498b-9133-5e27c47a09d1\",\n  \"prevId\": \"d588e608-517b-441e-bc06-b85eea7e53c0\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0063_snapshot.json",
    "content": "{\n  \"id\": \"b7d8604a-2f58-42a1-9625-1b24cb662086\",\n  \"prevId\": \"ce1fc6db-d260-498b-9133-5e27c47a09d1\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0064_snapshot.json",
    "content": "{\n  \"id\": \"93d779c9-2c0a-49d2-90bb-e2212beae479\",\n  \"prevId\": \"b7d8604a-2f58-42a1-9625-1b24cb662086\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"calendar_snapshots_calendarId_unique\": {\n          \"name\": \"calendar_snapshots_calendarId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"calendarId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0065_snapshot.json",
    "content": "{\n  \"id\": \"fc8709e1-8ab3-48c8-b5f8-3e0c6956c2c0\",\n  \"prevId\": \"93d779c9-2c0a-49d2-90bb-e2212beae479\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"calendar_snapshots_calendarId_unique\": {\n          \"name\": \"calendar_snapshots_calendarId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"calendarId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0066_snapshot.json",
    "content": "{\n  \"id\": \"33ecf4ae-507e-4491-ade7-c0211747e9ea\",\n  \"prevId\": \"fc8709e1-8ab3-48c8-b5f8-3e0c6956c2c0\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"calendar_snapshots_calendarId_unique\": {\n          \"name\": \"calendar_snapshots_calendarId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"calendarId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeWorkingLocation\": {\n          \"name\": \"excludeWorkingLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"failureCount\": {\n          \"name\": \"failureCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastFailureAt\": {\n          \"name\": \"lastFailureAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"nextAttemptAt\": {\n          \"name\": \"nextAttemptAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0067_snapshot.json",
    "content": "{\n  \"id\": \"936a35a9-32a5-4223-adb5-d036d9c44592\",\n  \"prevId\": \"33ecf4ae-507e-4491-ade7-c0211747e9ea\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"calendar_snapshots_calendarId_unique\": {\n          \"name\": \"calendar_snapshots_calendarId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"calendarId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"failureCount\": {\n          \"name\": \"failureCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastFailureAt\": {\n          \"name\": \"lastFailureAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"nextAttemptAt\": {\n          \"name\": \"nextAttemptAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0068_snapshot.json",
    "content": "{\n  \"id\": \"528cc02a-0892-43ae-856d-66148eb19621\",\n  \"prevId\": \"936a35a9-32a5-4223-adb5-d036d9c44592\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"columns\": [\n            \"tokenHash\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"calendar_snapshots_calendarId_unique\": {\n          \"name\": \"calendar_snapshots_calendarId_unique\",\n          \"columns\": [\n            \"calendarId\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"failureCount\": {\n          \"name\": \"failureCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastFailureAt\": {\n          \"name\": \"lastFailureAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"nextAttemptAt\": {\n          \"name\": \"nextAttemptAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"tableTo\": \"event_states\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"tableTo\": \"calendars\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"tableTo\": \"oauth_application\",\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"tableTo\": \"session\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"columns\": [\n            \"clientId\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"tableTo\": \"oauth_application\",\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"with\": {},\n          \"method\": \"btree\",\n          \"concurrently\": false\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"tableTo\": \"oauth_application\",\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"tableTo\": \"session\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"set null\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"tableTo\": \"user\",\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onUpdate\": \"no action\",\n          \"onDelete\": \"cascade\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"columns\": [\n            \"token\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"columns\": [\n            \"email\"\n          ],\n          \"nullsNotDistinct\": false\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"columns\": [\n            \"username\"\n          ],\n          \"nullsNotDistinct\": false\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"views\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/0069_snapshot.json",
    "content": "{\n  \"id\": \"ccb3d84d-c633-4c0f-9985-445ca00c89f1\",\n  \"prevId\": \"528cc02a-0892-43ae-856d-66148eb19621\",\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"tables\": {\n    \"public.api_tokens\": {\n      \"name\": \"api_tokens\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenHash\": {\n          \"name\": \"tokenHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"tokenPrefix\": {\n          \"name\": \"tokenPrefix\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"lastUsedAt\": {\n          \"name\": \"lastUsedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"api_tokens_user_idx\": {\n          \"name\": \"api_tokens_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"api_tokens_hash_idx\": {\n          \"name\": \"api_tokens_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"tokenHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"api_tokens_userId_user_id_fk\": {\n          \"name\": \"api_tokens_userId_user_id_fk\",\n          \"tableFrom\": \"api_tokens\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"api_tokens_tokenHash_unique\": {\n          \"name\": \"api_tokens_tokenHash_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"tokenHash\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.caldav_credentials\": {\n      \"name\": \"caldav_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"authMethod\": {\n          \"name\": \"authMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'basic'\"\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"encryptedPassword\": {\n          \"name\": \"encryptedPassword\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"serverUrl\": {\n          \"name\": \"serverUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_accounts\": {\n      \"name\": \"calendar_accounts\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authType\": {\n          \"name\": \"authType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"caldavCredentialId\": {\n          \"name\": \"caldavCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"displayName\": {\n          \"name\": \"displayName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"oauthCredentialId\": {\n          \"name\": \"oauthCredentialId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendar_accounts_user_idx\": {\n          \"name\": \"calendar_accounts_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_provider_idx\": {\n          \"name\": \"calendar_accounts_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendar_accounts_needs_reauth_idx\": {\n          \"name\": \"calendar_accounts_needs_reauth_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"needsReauthentication\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_caldavCredentialId_caldav_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"caldav_credentials\",\n          \"columnsFrom\": [\n            \"caldavCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\": {\n          \"name\": \"calendar_accounts_oauthCredentialId_oauth_credentials_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"oauth_credentials\",\n          \"columnsFrom\": [\n            \"oauthCredentialId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendar_accounts_userId_user_id_fk\": {\n          \"name\": \"calendar_accounts_userId_user_id_fk\",\n          \"tableFrom\": \"calendar_accounts\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendar_snapshots\": {\n      \"name\": \"calendar_snapshots\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"contentHash\": {\n          \"name\": \"contentHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"ical\": {\n          \"name\": \"ical\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"calendar_snapshots_calendarId_calendars_id_fk\": {\n          \"name\": \"calendar_snapshots_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"calendar_snapshots\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"calendar_snapshots_calendarId_unique\": {\n          \"name\": \"calendar_snapshots_calendarId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"calendarId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.calendars\": {\n      \"name\": \"calendars\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarType\": {\n          \"name\": \"calendarType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"calendarUrl\": {\n          \"name\": \"calendarUrl\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventDescription\": {\n          \"name\": \"excludeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventLocation\": {\n          \"name\": \"excludeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeEventName\": {\n          \"name\": \"excludeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeFocusTime\": {\n          \"name\": \"excludeFocusTime\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeOutOfOffice\": {\n          \"name\": \"excludeOutOfOffice\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeInIcalFeed\": {\n          \"name\": \"includeInIcalFeed\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"''\"\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"failureCount\": {\n          \"name\": \"failureCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"lastFailureAt\": {\n          \"name\": \"lastFailureAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"nextAttemptAt\": {\n          \"name\": \"nextAttemptAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"externalCalendarId\": {\n          \"name\": \"externalCalendarId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"capabilities\": {\n          \"name\": \"capabilities\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'{\\\"pull\\\"}'\"\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"originalName\": {\n          \"name\": \"originalName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"syncToken\": {\n          \"name\": \"syncToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"url\": {\n          \"name\": \"url\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"calendars_user_idx\": {\n          \"name\": \"calendars_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_account_idx\": {\n          \"name\": \"calendars_account_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"accountId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_capabilities_idx\": {\n          \"name\": \"calendars_capabilities_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"capabilities\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"calendars_type_idx\": {\n          \"name\": \"calendars_type_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarType\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"calendars_accountId_calendar_accounts_id_fk\": {\n          \"name\": \"calendars_accountId_calendar_accounts_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"calendar_accounts\",\n          \"columnsFrom\": [\n            \"accountId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"calendars_userId_user_id_fk\": {\n          \"name\": \"calendars_userId_user_id_fk\",\n          \"tableFrom\": \"calendars\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_mappings\": {\n      \"name\": \"event_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"deleteIdentifier\": {\n          \"name\": \"deleteIdentifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"destinationEventUid\": {\n          \"name\": \"destinationEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"eventStateId\": {\n          \"name\": \"eventStateId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"syncEventHash\": {\n          \"name\": \"syncEventHash\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"event_mappings_event_cal_idx\": {\n          \"name\": \"event_mappings_event_cal_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"eventStateId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_calendar_idx\": {\n          \"name\": \"event_mappings_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_mappings_sync_hash_idx\": {\n          \"name\": \"event_mappings_sync_hash_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"syncEventHash\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_mappings_calendarId_calendars_id_fk\": {\n          \"name\": \"event_mappings_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"event_mappings_eventStateId_event_states_id_fk\": {\n          \"name\": \"event_mappings_eventStateId_event_states_id_fk\",\n          \"tableFrom\": \"event_mappings\",\n          \"tableTo\": \"event_states\",\n          \"columnsFrom\": [\n            \"eventStateId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.event_states\": {\n      \"name\": \"event_states\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"recurrenceRule\": {\n          \"name\": \"recurrenceRule\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"exceptionDates\": {\n          \"name\": \"exceptionDates\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventType\": {\n          \"name\": \"sourceEventType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"event_states_start_time_idx\": {\n          \"name\": \"event_states_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_end_time_idx\": {\n          \"name\": \"event_states_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_calendar_idx\": {\n          \"name\": \"event_states_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"event_states_identity_idx\": {\n          \"name\": \"event_states_identity_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"sourceEventUid\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"event_states_calendarId_calendars_id_fk\": {\n          \"name\": \"event_states_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"event_states\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.feedback\": {\n      \"name\": \"feedback\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"message\": {\n          \"name\": \"message\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"wantsFollowUp\": {\n          \"name\": \"wantsFollowUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        }\n      },\n      \"indexes\": {\n        \"feedback_user_idx\": {\n          \"name\": \"feedback_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"feedback_userId_user_id_fk\": {\n          \"name\": \"feedback_userId_user_id_fk\",\n          \"tableFrom\": \"feedback\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.ical_feed_settings\": {\n      \"name\": \"ical_feed_settings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"includeEventName\": {\n          \"name\": \"includeEventName\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventDescription\": {\n          \"name\": \"includeEventDescription\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"includeEventLocation\": {\n          \"name\": \"includeEventLocation\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"excludeAllDayEvents\": {\n          \"name\": \"excludeAllDayEvents\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"customEventName\": {\n          \"name\": \"customEventName\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'Busy'\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"ical_feed_settings_userId_user_id_fk\": {\n          \"name\": \"ical_feed_settings_userId_user_id_fk\",\n          \"tableFrom\": \"ical_feed_settings\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_credentials\": {\n      \"name\": \"oauth_credentials\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"needsReauthentication\": {\n          \"name\": \"needsReauthentication\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"provider\": {\n          \"name\": \"provider\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_credentials_user_idx\": {\n          \"name\": \"oauth_credentials_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_provider_idx\": {\n          \"name\": \"oauth_credentials_provider_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"provider\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_credentials_expires_at_idx\": {\n          \"name\": \"oauth_credentials_expires_at_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"expiresAt\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_credentials_userId_user_id_fk\": {\n          \"name\": \"oauth_credentials_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_credentials\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.source_destination_mappings\": {\n      \"name\": \"source_destination_mappings\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"destinationCalendarId\": {\n          \"name\": \"destinationCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"sourceCalendarId\": {\n          \"name\": \"sourceCalendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"source_destination_mapping_idx\": {\n          \"name\": \"source_destination_mapping_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            },\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_source_idx\": {\n          \"name\": \"source_destination_mappings_source_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sourceCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"source_destination_mappings_destination_idx\": {\n          \"name\": \"source_destination_mappings_destination_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"destinationCalendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"source_destination_mappings_destinationCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_destinationCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"destinationCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"source_destination_mappings_sourceCalendarId_calendars_id_fk\": {\n          \"name\": \"source_destination_mappings_sourceCalendarId_calendars_id_fk\",\n          \"tableFrom\": \"source_destination_mappings\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"sourceCalendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.sync_status\": {\n      \"name\": \"sync_status\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"lastSyncedAt\": {\n          \"name\": \"lastSyncedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"localEventCount\": {\n          \"name\": \"localEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"remoteEventCount\": {\n          \"name\": \"remoteEventCount\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": 0\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"sync_status_calendar_idx\": {\n          \"name\": \"sync_status_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": true,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"sync_status_calendarId_calendars_id_fk\": {\n          \"name\": \"sync_status_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"sync_status\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_events\": {\n      \"name\": \"user_events\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"uuid\",\n          \"primaryKey\": true,\n          \"notNull\": true,\n          \"default\": \"gen_random_uuid()\"\n        },\n        \"calendarId\": {\n          \"name\": \"calendarId\",\n          \"type\": \"uuid\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sourceEventUid\": {\n          \"name\": \"sourceEventUid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"title\": {\n          \"name\": \"title\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"description\": {\n          \"name\": \"description\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"location\": {\n          \"name\": \"location\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"availability\": {\n          \"name\": \"availability\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"isAllDay\": {\n          \"name\": \"isAllDay\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"startTime\": {\n          \"name\": \"startTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"endTime\": {\n          \"name\": \"endTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"startTimeZone\": {\n          \"name\": \"startTimeZone\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"user_events_user_idx\": {\n          \"name\": \"user_events_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_calendar_idx\": {\n          \"name\": \"user_events_calendar_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"calendarId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_start_time_idx\": {\n          \"name\": \"user_events_start_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"startTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"user_events_end_time_idx\": {\n          \"name\": \"user_events_end_time_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"endTime\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"user_events_calendarId_calendars_id_fk\": {\n          \"name\": \"user_events_calendarId_calendars_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"calendars\",\n          \"columnsFrom\": [\n            \"calendarId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"user_events_userId_user_id_fk\": {\n          \"name\": \"user_events_userId_user_id_fk\",\n          \"tableFrom\": \"user_events\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user_subscriptions\": {\n      \"name\": \"user_subscriptions\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"plan\": {\n          \"name\": \"plan\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"'free'\"\n        },\n        \"polarSubscriptionId\": {\n          \"name\": \"polarSubscriptionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"user_subscriptions_userId_user_id_fk\": {\n          \"name\": \"user_subscriptions_userId_user_id_fk\",\n          \"tableFrom\": \"user_subscriptions\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.account\": {\n      \"name\": \"account\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"accessToken\": {\n          \"name\": \"accessToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accessTokenExpiresAt\": {\n          \"name\": \"accessTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"accountId\": {\n          \"name\": \"accountId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"idToken\": {\n          \"name\": \"idToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"password\": {\n          \"name\": \"password\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"providerId\": {\n          \"name\": \"providerId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"refreshToken\": {\n          \"name\": \"refreshToken\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshTokenExpiresAt\": {\n          \"name\": \"refreshTokenExpiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scope\": {\n          \"name\": \"scope\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"account_userId_user_id_fk\": {\n          \"name\": \"account_userId_user_id_fk\",\n          \"tableFrom\": \"account\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.jwks\": {\n      \"name\": \"jwks\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"privateKey\": {\n          \"name\": \"privateKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_access_token\": {\n      \"name\": \"oauth_access_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"refreshId\": {\n          \"name\": \"refreshId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_access_token_client_idx\": {\n          \"name\": \"oauth_access_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_session_idx\": {\n          \"name\": \"oauth_access_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_user_idx\": {\n          \"name\": \"oauth_access_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_access_token_refresh_idx\": {\n          \"name\": \"oauth_access_token_refresh_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"refreshId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_access_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_access_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_access_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_userId_user_id_fk\": {\n          \"name\": \"oauth_access_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\": {\n          \"name\": \"oauth_access_token_refreshId_oauth_refresh_token_id_fk\",\n          \"tableFrom\": \"oauth_access_token\",\n          \"tableTo\": \"oauth_refresh_token\",\n          \"columnsFrom\": [\n            \"refreshId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_access_token_token_unique\": {\n          \"name\": \"oauth_access_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_application\": {\n      \"name\": \"oauth_application\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientSecret\": {\n          \"name\": \"clientSecret\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"disabled\": {\n          \"name\": \"disabled\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"skipConsent\": {\n          \"name\": \"skipConsent\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"enableEndSession\": {\n          \"name\": \"enableEndSession\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"subjectType\": {\n          \"name\": \"subjectType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"uri\": {\n          \"name\": \"uri\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"icon\": {\n          \"name\": \"icon\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"contacts\": {\n          \"name\": \"contacts\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tos\": {\n          \"name\": \"tos\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"policy\": {\n          \"name\": \"policy\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareId\": {\n          \"name\": \"softwareId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareVersion\": {\n          \"name\": \"softwareVersion\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"softwareStatement\": {\n          \"name\": \"softwareStatement\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"redirectUris\": {\n          \"name\": \"redirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"postLogoutRedirectUris\": {\n          \"name\": \"postLogoutRedirectUris\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"tokenEndpointAuthMethod\": {\n          \"name\": \"tokenEndpointAuthMethod\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"grantTypes\": {\n          \"name\": \"grantTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"responseTypes\": {\n          \"name\": \"responseTypes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"public\": {\n          \"name\": \"public\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"type\": {\n          \"name\": \"type\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"requirePKCE\": {\n          \"name\": \"requirePKCE\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"metadata\": {\n          \"name\": \"metadata\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {\n        \"oauth_application_user_idx\": {\n          \"name\": \"oauth_application_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_application_userId_user_id_fk\": {\n          \"name\": \"oauth_application_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_application\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_application_clientId_unique\": {\n          \"name\": \"oauth_application_clientId_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"clientId\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_consent\": {\n      \"name\": \"oauth_consent\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        }\n      },\n      \"indexes\": {\n        \"oauth_consent_client_idx\": {\n          \"name\": \"oauth_consent_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_user_idx\": {\n          \"name\": \"oauth_consent_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_consent_reference_idx\": {\n          \"name\": \"oauth_consent_reference_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"referenceId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_consent_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_consent_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_consent_userId_user_id_fk\": {\n          \"name\": \"oauth_consent_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_consent\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.oauth_refresh_token\": {\n      \"name\": \"oauth_refresh_token\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"clientId\": {\n          \"name\": \"clientId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"sessionId\": {\n          \"name\": \"sessionId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"referenceId\": {\n          \"name\": \"referenceId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"revoked\": {\n          \"name\": \"revoked\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"authTime\": {\n          \"name\": \"authTime\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"scopes\": {\n          \"name\": \"scopes\",\n          \"type\": \"text[]\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {\n        \"oauth_refresh_token_client_idx\": {\n          \"name\": \"oauth_refresh_token_client_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"clientId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_session_idx\": {\n          \"name\": \"oauth_refresh_token_session_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"sessionId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        },\n        \"oauth_refresh_token_user_idx\": {\n          \"name\": \"oauth_refresh_token_user_idx\",\n          \"columns\": [\n            {\n              \"expression\": \"userId\",\n              \"isExpression\": false,\n              \"asc\": true,\n              \"nulls\": \"last\"\n            }\n          ],\n          \"isUnique\": false,\n          \"concurrently\": false,\n          \"method\": \"btree\",\n          \"with\": {}\n        }\n      },\n      \"foreignKeys\": {\n        \"oauth_refresh_token_clientId_oauth_application_clientId_fk\": {\n          \"name\": \"oauth_refresh_token_clientId_oauth_application_clientId_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"oauth_application\",\n          \"columnsFrom\": [\n            \"clientId\"\n          ],\n          \"columnsTo\": [\n            \"clientId\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_sessionId_session_id_fk\": {\n          \"name\": \"oauth_refresh_token_sessionId_session_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"session\",\n          \"columnsFrom\": [\n            \"sessionId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"set null\",\n          \"onUpdate\": \"no action\"\n        },\n        \"oauth_refresh_token_userId_user_id_fk\": {\n          \"name\": \"oauth_refresh_token_userId_user_id_fk\",\n          \"tableFrom\": \"oauth_refresh_token\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"oauth_refresh_token_token_unique\": {\n          \"name\": \"oauth_refresh_token_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.passkey\": {\n      \"name\": \"passkey\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"aaguid\": {\n          \"name\": \"aaguid\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"backedUp\": {\n          \"name\": \"backedUp\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"counter\": {\n          \"name\": \"counter\",\n          \"type\": \"integer\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"credentialID\": {\n          \"name\": \"credentialID\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"deviceType\": {\n          \"name\": \"deviceType\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"publicKey\": {\n          \"name\": \"publicKey\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"transports\": {\n          \"name\": \"transports\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"passkey_userId_user_id_fk\": {\n          \"name\": \"passkey_userId_user_id_fk\",\n          \"tableFrom\": \"passkey\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.session\": {\n      \"name\": \"session\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"ipAddress\": {\n          \"name\": \"ipAddress\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"token\": {\n          \"name\": \"token\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"userAgent\": {\n          \"name\": \"userAgent\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"userId\": {\n          \"name\": \"userId\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {\n        \"session_userId_user_id_fk\": {\n          \"name\": \"session_userId_user_id_fk\",\n          \"tableFrom\": \"session\",\n          \"tableTo\": \"user\",\n          \"columnsFrom\": [\n            \"userId\"\n          ],\n          \"columnsTo\": [\n            \"id\"\n          ],\n          \"onDelete\": \"cascade\",\n          \"onUpdate\": \"no action\"\n        }\n      },\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"session_token_unique\": {\n          \"name\": \"session_token_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"token\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.user\": {\n      \"name\": \"user\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"email\": {\n          \"name\": \"email\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"emailVerified\": {\n          \"name\": \"emailVerified\",\n          \"type\": \"boolean\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": false\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"image\": {\n          \"name\": \"image\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        },\n        \"name\": {\n          \"name\": \"name\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"username\": {\n          \"name\": \"username\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": false\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {\n        \"user_email_unique\": {\n          \"name\": \"user_email_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"email\"\n          ]\n        },\n        \"user_username_unique\": {\n          \"name\": \"user_username_unique\",\n          \"nullsNotDistinct\": false,\n          \"columns\": [\n            \"username\"\n          ]\n        }\n      },\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    },\n    \"public.verification\": {\n      \"name\": \"verification\",\n      \"schema\": \"\",\n      \"columns\": {\n        \"createdAt\": {\n          \"name\": \"createdAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"expiresAt\": {\n          \"name\": \"expiresAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"id\": {\n          \"name\": \"id\",\n          \"type\": \"text\",\n          \"primaryKey\": true,\n          \"notNull\": true\n        },\n        \"identifier\": {\n          \"name\": \"identifier\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        },\n        \"updatedAt\": {\n          \"name\": \"updatedAt\",\n          \"type\": \"timestamp\",\n          \"primaryKey\": false,\n          \"notNull\": true,\n          \"default\": \"now()\"\n        },\n        \"value\": {\n          \"name\": \"value\",\n          \"type\": \"text\",\n          \"primaryKey\": false,\n          \"notNull\": true\n        }\n      },\n      \"indexes\": {},\n      \"foreignKeys\": {},\n      \"compositePrimaryKeys\": {},\n      \"uniqueConstraints\": {},\n      \"policies\": {},\n      \"checkConstraints\": {},\n      \"isRLSEnabled\": false\n    }\n  },\n  \"enums\": {},\n  \"schemas\": {},\n  \"sequences\": {},\n  \"roles\": {},\n  \"policies\": {},\n  \"views\": {},\n  \"_meta\": {\n    \"columns\": {},\n    \"schemas\": {},\n    \"tables\": {}\n  }\n}"
  },
  {
    "path": "packages/database/drizzle/meta/_journal.json",
    "content": "{\n  \"version\": \"7\",\n  \"dialect\": \"postgresql\",\n  \"entries\": [\n    {\n      \"idx\": 0,\n      \"version\": \"7\",\n      \"when\": 1766099159233,\n      \"tag\": \"0000_slimy_justice\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 1,\n      \"version\": \"7\",\n      \"when\": 1766100764121,\n      \"tag\": \"0001_complete_golden_guardian\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 2,\n      \"version\": \"7\",\n      \"when\": 1766105754550,\n      \"tag\": \"0002_striped_queen_noir\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 3,\n      \"version\": \"7\",\n      \"when\": 1766107779137,\n      \"tag\": \"0003_nervous_vulcan\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 4,\n      \"version\": \"7\",\n      \"when\": 1766117711017,\n      \"tag\": \"0004_strong_midnight\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 5,\n      \"version\": \"7\",\n      \"when\": 1766119528843,\n      \"tag\": \"0005_dusty_nomad\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 6,\n      \"version\": \"7\",\n      \"when\": 1766120385911,\n      \"tag\": \"0006_curious_orphan\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 7,\n      \"version\": \"7\",\n      \"when\": 1766134821358,\n      \"tag\": \"0007_heavy_pretty_boy\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 8,\n      \"version\": \"7\",\n      \"when\": 1766135416743,\n      \"tag\": \"0008_vengeful_azazel\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 9,\n      \"version\": \"7\",\n      \"when\": 1766136510379,\n      \"tag\": \"0009_daily_thor_girl\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 10,\n      \"version\": \"7\",\n      \"when\": 1766137153851,\n      \"tag\": \"0010_heavy_prima\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 11,\n      \"version\": \"7\",\n      \"when\": 1766137380485,\n      \"tag\": \"0011_round_gorilla_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 12,\n      \"version\": \"7\",\n      \"when\": 1766170278044,\n      \"tag\": \"0012_vengeful_thena\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 13,\n      \"version\": \"7\",\n      \"when\": 1766485557746,\n      \"tag\": \"0013_parallel_union_jack\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 14,\n      \"version\": \"7\",\n      \"when\": 1766527385733,\n      \"tag\": \"0014_modern_talon\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 15,\n      \"version\": \"7\",\n      \"when\": 1766528711951,\n      \"tag\": \"0015_unique_impossible_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 16,\n      \"version\": \"7\",\n      \"when\": 1766603252736,\n      \"tag\": \"0016_salty_nextwave\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 17,\n      \"version\": \"7\",\n      \"when\": 1766603531782,\n      \"tag\": \"0017_outstanding_eddie_brock\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 18,\n      \"version\": \"7\",\n      \"when\": 1766603987204,\n      \"tag\": \"0018_whole_loa\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 19,\n      \"version\": \"7\",\n      \"when\": 1766726841682,\n      \"tag\": \"0019_tearful_doctor_doom\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 20,\n      \"version\": \"7\",\n      \"when\": 1766730447890,\n      \"tag\": \"0020_huge_talon\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 21,\n      \"version\": \"7\",\n      \"when\": 1766731735655,\n      \"tag\": \"0021_icy_white_queen\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 22,\n      \"version\": \"7\",\n      \"when\": 1766733236361,\n      \"tag\": \"0022_lazy_avengers\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 23,\n      \"version\": \"7\",\n      \"when\": 1766748640212,\n      \"tag\": \"0023_lyrical_genesis\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 24,\n      \"version\": \"7\",\n      \"when\": 1766967778649,\n      \"tag\": \"0024_aberrant_wallop\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 25,\n      \"version\": \"7\",\n      \"when\": 1766986355666,\n      \"tag\": \"0025_powerful_sentinels\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 26,\n      \"version\": \"7\",\n      \"when\": 1766991110661,\n      \"tag\": \"0026_typical_impossible_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 27,\n      \"version\": \"7\",\n      \"when\": 1767121219478,\n      \"tag\": \"0027_loose_hydra\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 28,\n      \"version\": \"7\",\n      \"when\": 1767142927049,\n      \"tag\": \"0028_lush_sumo\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 29,\n      \"version\": \"7\",\n      \"when\": 1767608421759,\n      \"tag\": \"0029_huge_yellow_claw\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 30,\n      \"version\": \"7\",\n      \"when\": 1767652504812,\n      \"tag\": \"0030_youthful_speed\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 31,\n      \"version\": \"7\",\n      \"when\": 1767668096932,\n      \"tag\": \"0031_glorious_joshua_kane\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 32,\n      \"version\": \"7\",\n      \"when\": 1767678842064,\n      \"tag\": \"0032_dapper_patch\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 33,\n      \"version\": \"7\",\n      \"when\": 1767679418918,\n      \"tag\": \"0033_square_tomorrow_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 34,\n      \"version\": \"7\",\n      \"when\": 1767679418919,\n      \"tag\": \"0034_dumb_clanker\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 35,\n      \"version\": \"7\",\n      \"when\": 1767701139116,\n      \"tag\": \"0035_known_silk_fever\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 36,\n      \"version\": \"7\",\n      \"when\": 1767726486605,\n      \"tag\": \"0036_late_bastion\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 37,\n      \"version\": \"7\",\n      \"when\": 1772591956950,\n      \"tag\": \"0037_thankful_machine_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 38,\n      \"version\": \"7\",\n      \"when\": 1772604096971,\n      \"tag\": \"0038_military_radioactive_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 39,\n      \"version\": \"7\",\n      \"when\": 1772606278747,\n      \"tag\": \"0039_fat_mad_thinker\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 40,\n      \"version\": \"7\",\n      \"when\": 1772607203052,\n      \"tag\": \"0040_sparkling_toad\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 41,\n      \"version\": \"7\",\n      \"when\": 1772611192679,\n      \"tag\": \"0041_keen_black_panther\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 42,\n      \"version\": \"7\",\n      \"when\": 1772746497799,\n      \"tag\": \"0042_famous_obadiah_stane\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 43,\n      \"version\": \"7\",\n      \"when\": 1772747616453,\n      \"tag\": \"0043_smart_demogoblin\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 44,\n      \"version\": \"7\",\n      \"when\": 1772750203607,\n      \"tag\": \"0044_crazy_kate_bishop\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 45,\n      \"version\": \"7\",\n      \"when\": 1772750984190,\n      \"tag\": \"0045_flippant_paper_doll\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 46,\n      \"version\": \"7\",\n      \"when\": 1772763457068,\n      \"tag\": \"0046_rainy_steve_rogers\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 47,\n      \"version\": \"7\",\n      \"when\": 1772845661125,\n      \"tag\": \"0047_soft_ravenous\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 48,\n      \"version\": \"7\",\n      \"when\": 1772847974972,\n      \"tag\": \"0048_gigantic_kid_colt\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 49,\n      \"version\": \"7\",\n      \"when\": 1772937997653,\n      \"tag\": \"0049_handy_sentinels\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 50,\n      \"version\": \"7\",\n      \"when\": 1772939018483,\n      \"tag\": \"0050_purple_patch\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 51,\n      \"version\": \"7\",\n      \"when\": 1772954619121,\n      \"tag\": \"0051_normal_mentallo\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 52,\n      \"version\": \"7\",\n      \"when\": 1773045316163,\n      \"tag\": \"0052_military_trish_tilby\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 53,\n      \"version\": \"7\",\n      \"when\": 1773127873531,\n      \"tag\": \"0053_greedy_reptil\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 54,\n      \"version\": \"7\",\n      \"when\": 1773130756858,\n      \"tag\": \"0054_nasty_sage\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 55,\n      \"version\": \"7\",\n      \"when\": 1773223735093,\n      \"tag\": \"0055_zippy_wolfsbane\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 56,\n      \"version\": \"7\",\n      \"when\": 1773236557259,\n      \"tag\": \"0056_ambiguous_unus\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 57,\n      \"version\": \"7\",\n      \"when\": 1773239345341,\n      \"tag\": \"0057_requeue_source_backfill\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 58,\n      \"version\": \"7\",\n      \"when\": 1773283970756,\n      \"tag\": \"0058_same_robbie_robertson\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 59,\n      \"version\": \"7\",\n      \"when\": 1773284731304,\n      \"tag\": \"0059_shocking_stone_men\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 60,\n      \"version\": \"7\",\n      \"when\": 1773304717977,\n      \"tag\": \"0060_condemned_imperial_guard\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 61,\n      \"version\": \"7\",\n      \"when\": 1773428430422,\n      \"tag\": \"0061_brief_toxin\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 62,\n      \"version\": \"7\",\n      \"when\": 1773466950385,\n      \"tag\": \"0062_lame_white_tiger\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 63,\n      \"version\": \"7\",\n      \"when\": 1773474587817,\n      \"tag\": \"0063_friendly_black_panther\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 64,\n      \"version\": \"7\",\n      \"when\": 1773599952851,\n      \"tag\": \"0064_talented_black_knight\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 65,\n      \"version\": \"7\",\n      \"when\": 1773625829428,\n      \"tag\": \"0065_dizzy_zarda\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 66,\n      \"version\": \"7\",\n      \"when\": 1773867987450,\n      \"tag\": \"0066_nasty_bushwacker\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 67,\n      \"version\": \"7\",\n      \"when\": 1774194474592,\n      \"tag\": \"0067_curvy_mole_man\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 68,\n      \"version\": \"7\",\n      \"when\": 1774195622395,\n      \"tag\": \"0068_clumsy_starbolt\",\n      \"breakpoints\": true\n    },\n    {\n      \"idx\": 69,\n      \"version\": \"7\",\n      \"when\": 1774308102091,\n      \"tag\": \"0069_amazing_storm\",\n      \"breakpoints\": true\n    }\n  ]\n}"
  },
  {
    "path": "packages/database/drizzle.config.ts",
    "content": "export default {\n  dbCredentials: {\n    url: process.env.DATABASE_URL,\n  },\n  dialect: \"postgresql\",\n  out: \"./drizzle\",\n  schema: [\n    \"./src/database/schema.ts\",\n    \"./src/database/auth-schema.ts\",\n  ],\n};\n"
  },
  {
    "path": "packages/database/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/database\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./schema\": \"./src/database/schema.ts\",\n    \"./auth-schema\": \"./src/database/auth-schema.ts\"\n  },\n  \"scripts\": {\n    \"push\": \"drizzle-kit push\",\n    \"generate\": \"drizzle-kit generate\",\n    \"migrate\": \"drizzle-kit migrate\",\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"bun x --bun vitest run\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"drizzle-orm\": \"0.45.1\",\n    \"pg\": \"8.16.3\",\n    \"tweetnacl\": \"^1.0.3\",\n    \"tweetnacl-util\": \"^0.15.1\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"@types/pg\": \"8.16.0\",\n    \"drizzle-kit\": \"0.31.8\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "packages/database/scripts/migrate.ts",
    "content": "import { drizzle } from \"drizzle-orm/node-postgres\";\nimport { migrate } from \"drizzle-orm/node-postgres/migrator\";\nimport { Client } from \"pg\";\n\nconst connectionString = Bun.env.DATABASE_URL;\n\nif (!connectionString) {\n  throw new Error(\"DATABASE_URL is missing\");\n}\n\nconst connection = new Client({\n  connectionString: connectionString,\n});\n\nconst database = drizzle(connection);\nawait connection.connect();\n\ntry {\n  await connection.query(`\n    DELETE FROM drizzle.__drizzle_migrations\n    WHERE created_at = 1767760000000\n  `);\n} catch {\n  /**\n   * This is meant to remove a bad migration, if this fails - it just\n   * means that the migrations have not yet been run. We can safely ignore.\n   */\n}\n\nawait migrate(database, {\n  migrationsFolder: `${import.meta.dirname}/../drizzle`,\n});\n\nawait connection.end();\nprocess.exit(0);\n"
  },
  {
    "path": "packages/database/src/database/auth-schema.ts",
    "content": "import {\n  boolean,\n  index,\n  integer,\n  pgTable,\n  text,\n  timestamp,\n} from \"drizzle-orm/pg-core\";\n\nconst user = pgTable(\"user\", {\n  createdAt: timestamp().notNull().defaultNow(),\n  email: text().notNull().unique(),\n  emailVerified: boolean().notNull().default(false),\n  id: text().notNull().primaryKey(),\n  image: text(),\n  name: text().notNull(),\n  updatedAt: timestamp().notNull().defaultNow(),\n  username: text().unique(),\n});\n\nconst session = pgTable(\"session\", {\n  createdAt: timestamp().notNull().defaultNow(),\n  expiresAt: timestamp().notNull(),\n  id: text().notNull().primaryKey(),\n  ipAddress: text(),\n  token: text().notNull().unique(),\n  updatedAt: timestamp().notNull().defaultNow(),\n  userAgent: text(),\n  userId: text()\n    .notNull()\n    .references(() => user.id, { onDelete: \"cascade\" }),\n});\n\nconst account = pgTable(\"account\", {\n  accessToken: text(),\n  accessTokenExpiresAt: timestamp(),\n  accountId: text().notNull(),\n  createdAt: timestamp().notNull().defaultNow(),\n  id: text().notNull().primaryKey(),\n  idToken: text(),\n  password: text(),\n  providerId: text().notNull(),\n  refreshToken: text(),\n  refreshTokenExpiresAt: timestamp(),\n  scope: text(),\n  updatedAt: timestamp().notNull().defaultNow(),\n  userId: text()\n    .notNull()\n    .references(() => user.id, { onDelete: \"cascade\" }),\n});\n\nconst verification = pgTable(\"verification\", {\n  createdAt: timestamp().notNull().defaultNow(),\n  expiresAt: timestamp().notNull(),\n  id: text().notNull().primaryKey(),\n  identifier: text().notNull(),\n  updatedAt: timestamp().notNull().defaultNow(),\n  value: text().notNull(),\n});\n\nconst passkey = pgTable(\"passkey\", {\n  aaguid: text(),\n  backedUp: boolean().notNull(),\n  counter: integer().notNull(),\n  createdAt: timestamp(),\n  credentialID: text().notNull(),\n  deviceType: text().notNull(),\n  id: text().notNull().primaryKey(),\n  name: text(),\n  publicKey: text().notNull(),\n  transports: text(),\n  userId: text()\n    .notNull()\n    .references(() => user.id, { onDelete: \"cascade\" }),\n});\n\nconst jwks = pgTable(\"jwks\", {\n  id: text().notNull().primaryKey(),\n  publicKey: text().notNull(),\n  privateKey: text().notNull(),\n  createdAt: timestamp().notNull().defaultNow(),\n  expiresAt: timestamp(),\n});\n\nconst oauthClient = pgTable(\n  \"oauth_application\",\n  {\n    id: text().notNull().primaryKey(),\n    clientId: text().notNull().unique(),\n    clientSecret: text(),\n    disabled: boolean().notNull().default(false),\n    skipConsent: boolean(),\n    enableEndSession: boolean(),\n    subjectType: text(),\n    scopes: text().array(),\n    userId: text().references(() => user.id, { onDelete: \"cascade\" }),\n    createdAt: timestamp().notNull().defaultNow(),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n    expiresAt: timestamp(),\n    name: text(),\n    uri: text(),\n    icon: text(),\n    contacts: text().array(),\n    tos: text(),\n    policy: text(),\n    softwareId: text(),\n    softwareVersion: text(),\n    softwareStatement: text(),\n    redirectUris: text().array().notNull(),\n    postLogoutRedirectUris: text().array(),\n    tokenEndpointAuthMethod: text(),\n    grantTypes: text().array(),\n    responseTypes: text().array(),\n    public: boolean(),\n    type: text(),\n    requirePKCE: boolean(),\n    referenceId: text(),\n    metadata: text(),\n  },\n  (table) => [index(\"oauth_application_user_idx\").on(table.userId)],\n);\n\nconst oauthRefreshToken = pgTable(\n  \"oauth_refresh_token\",\n  {\n    id: text().notNull().primaryKey(),\n    token: text().notNull().unique(),\n    clientId: text()\n      .notNull()\n      .references(() => oauthClient.clientId, { onDelete: \"cascade\" }),\n    sessionId: text().references(() => session.id, { onDelete: \"set null\" }),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    referenceId: text(),\n    expiresAt: timestamp().notNull(),\n    createdAt: timestamp().notNull().defaultNow(),\n    revoked: timestamp(),\n    authTime: timestamp(),\n    scopes: text().array().notNull(),\n  },\n  (table) => [\n    index(\"oauth_refresh_token_client_idx\").on(table.clientId),\n    index(\"oauth_refresh_token_session_idx\").on(table.sessionId),\n    index(\"oauth_refresh_token_user_idx\").on(table.userId),\n  ],\n);\n\nconst oauthAccessToken = pgTable(\n  \"oauth_access_token\",\n  {\n    id: text().notNull().primaryKey(),\n    token: text().notNull().unique(),\n    clientId: text()\n      .notNull()\n      .references(() => oauthClient.clientId, { onDelete: \"cascade\" }),\n    sessionId: text().references(() => session.id, { onDelete: \"set null\" }),\n    userId: text().references(() => user.id, { onDelete: \"cascade\" }),\n    referenceId: text(),\n    refreshId: text().references(() => oauthRefreshToken.id, { onDelete: \"set null\" }),\n    expiresAt: timestamp().notNull(),\n    createdAt: timestamp().notNull().defaultNow(),\n    scopes: text().array().notNull(),\n  },\n  (table) => [\n    index(\"oauth_access_token_client_idx\").on(table.clientId),\n    index(\"oauth_access_token_session_idx\").on(table.sessionId),\n    index(\"oauth_access_token_user_idx\").on(table.userId),\n    index(\"oauth_access_token_refresh_idx\").on(table.refreshId),\n  ],\n);\n\nconst oauthConsent = pgTable(\n  \"oauth_consent\",\n  {\n    id: text().notNull().primaryKey(),\n    clientId: text()\n      .notNull()\n      .references(() => oauthClient.clientId, { onDelete: \"cascade\" }),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    referenceId: text(),\n    scopes: text().array().notNull(),\n    createdAt: timestamp().notNull().defaultNow(),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n  },\n  (table) => [\n    index(\"oauth_consent_client_idx\").on(table.clientId),\n    index(\"oauth_consent_user_idx\").on(table.userId),\n    index(\"oauth_consent_reference_idx\").on(table.referenceId),\n  ],\n);\n\nexport {\n  user,\n  session,\n  account,\n  verification,\n  passkey,\n  jwks,\n  oauthClient,\n  oauthRefreshToken,\n  oauthAccessToken,\n  oauthConsent,\n  oauthClient as oauthApplication,\n};\n"
  },
  {
    "path": "packages/database/src/database/schema.ts",
    "content": "import {\n  boolean,\n  index,\n  integer,\n  pgTable,\n  text,\n  timestamp,\n  uniqueIndex,\n  uuid,\n} from \"drizzle-orm/pg-core\";\nimport { user } from \"./auth-schema\";\n\nconst DEFAULT_EVENT_COUNT = 0;\n\nconst oauthCredentialsTable = pgTable(\n  \"oauth_credentials\",\n  {\n    accessToken: text().notNull(),\n    createdAt: timestamp().notNull().defaultNow(),\n    email: text(),\n    expiresAt: timestamp().notNull(),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    needsReauthentication: boolean().notNull().default(false),\n    provider: text().notNull(),\n    refreshToken: text().notNull(),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n  },\n  (table) => [\n    index(\"oauth_credentials_user_idx\").on(table.userId),\n    index(\"oauth_credentials_provider_idx\").on(table.provider),\n    index(\"oauth_credentials_expires_at_idx\").on(table.expiresAt),\n  ],\n);\n\nconst caldavCredentialsTable = pgTable(\"caldav_credentials\", {\n  authMethod: text().notNull().default(\"basic\"),\n  createdAt: timestamp().notNull().defaultNow(),\n  encryptedPassword: text().notNull(),\n  id: uuid().notNull().primaryKey().defaultRandom(),\n  serverUrl: text().notNull(),\n  updatedAt: timestamp()\n    .notNull()\n    .defaultNow()\n    .$onUpdate(() => new Date()),\n  username: text().notNull(),\n});\n\nconst calendarAccountsTable = pgTable(\n  \"calendar_accounts\",\n  {\n    accountId: text(),\n    authType: text().notNull(),\n    caldavCredentialId: uuid().references(() => caldavCredentialsTable.id, {\n      onDelete: \"cascade\",\n    }),\n    createdAt: timestamp().notNull().defaultNow(),\n    displayName: text(),\n    email: text(),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    needsReauthentication: boolean().notNull().default(false),\n    oauthCredentialId: uuid().references(() => oauthCredentialsTable.id, {\n      onDelete: \"cascade\",\n    }),\n    provider: text().notNull(),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n  },\n  (table) => [\n    index(\"calendar_accounts_user_idx\").on(table.userId),\n    index(\"calendar_accounts_provider_idx\").on(table.provider),\n    index(\"calendar_accounts_needs_reauth_idx\").on(table.needsReauthentication),\n  ],\n);\n\nconst calendarsTable = pgTable(\n  \"calendars\",\n  {\n    accountId: uuid()\n      .notNull()\n      .references(() => calendarAccountsTable.id, { onDelete: \"cascade\" }),\n    calendarType: text().notNull(),\n    calendarUrl: text(),\n    createdAt: timestamp().notNull().defaultNow(),\n    excludeAllDayEvents: boolean().notNull().default(false),\n    excludeEventDescription: boolean().notNull().default(false),\n    excludeEventLocation: boolean().notNull().default(false),\n    excludeEventName: boolean().notNull().default(false),\n    excludeFocusTime: boolean().notNull().default(false),\n    excludeOutOfOffice: boolean().notNull().default(false),\n    includeInIcalFeed: boolean().notNull().default(false),\n    customEventName: text().notNull().default(\"\"),\n    disabled: boolean().notNull().default(false),\n    failureCount: integer().notNull().default(0),\n    lastFailureAt: timestamp(),\n    nextAttemptAt: timestamp(),\n    externalCalendarId: text(),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    capabilities: text().array().notNull().default([\"pull\"]),\n    name: text().notNull(),\n    originalName: text(),\n    syncToken: text(),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n    url: text(),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n  },\n  (table) => [\n    index(\"calendars_user_idx\").on(table.userId),\n    index(\"calendars_account_idx\").on(table.accountId),\n    index(\"calendars_capabilities_idx\").on(table.capabilities),\n    index(\"calendars_type_idx\").on(table.calendarType),\n  ],\n);\n\nconst calendarSnapshotsTable = pgTable(\"calendar_snapshots\", {\n  calendarId: uuid()\n    .notNull()\n    .references(() => calendarsTable.id, { onDelete: \"cascade\" })\n    .unique(),\n  contentHash: text(),\n  createdAt: timestamp().notNull().defaultNow(),\n  ical: text().notNull(),\n  id: uuid().notNull().primaryKey().defaultRandom(),\n  public: boolean().notNull().default(false),\n});\n\nconst eventStatesTable = pgTable(\n  \"event_states\",\n  {\n    availability: text(),\n    calendarId: uuid()\n      .notNull()\n      .references(() => calendarsTable.id, { onDelete: \"cascade\" }),\n    createdAt: timestamp().notNull().defaultNow(),\n    description: text(),\n    endTime: timestamp().notNull(),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    location: text(),\n    recurrenceRule: text(),\n    exceptionDates: text(),\n    isAllDay: boolean(),\n    sourceEventType: text(),\n    sourceEventUid: text(),\n    startTime: timestamp().notNull(),\n    startTimeZone: text(),\n    title: text(),\n  },\n  (table) => [\n    index(\"event_states_start_time_idx\").on(table.startTime),\n    index(\"event_states_end_time_idx\").on(table.endTime),\n    index(\"event_states_calendar_idx\").on(table.calendarId),\n    uniqueIndex(\"event_states_identity_idx\").on(\n      table.calendarId,\n      table.sourceEventUid,\n      table.startTime,\n      table.endTime,\n    ),\n  ],\n);\n\nconst userEventsTable = pgTable(\n  \"user_events\",\n  {\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    calendarId: uuid()\n      .notNull()\n      .references(() => calendarsTable.id, { onDelete: \"cascade\" }),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    sourceEventUid: text(),\n    title: text(),\n    description: text(),\n    location: text(),\n    availability: text(),\n    isAllDay: boolean(),\n    startTime: timestamp().notNull(),\n    endTime: timestamp().notNull(),\n    startTimeZone: text(),\n    createdAt: timestamp().notNull().defaultNow(),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n  },\n  (table) => [\n    index(\"user_events_user_idx\").on(table.userId),\n    index(\"user_events_calendar_idx\").on(table.calendarId),\n    index(\"user_events_start_time_idx\").on(table.startTime),\n    index(\"user_events_end_time_idx\").on(table.endTime),\n  ],\n);\n\nconst userSubscriptionsTable = pgTable(\"user_subscriptions\", {\n  plan: text().notNull().default(\"free\"),\n  polarSubscriptionId: text(),\n  updatedAt: timestamp()\n    .notNull()\n    .defaultNow()\n    .$onUpdate(() => new Date()),\n  userId: text()\n    .notNull()\n    .primaryKey()\n    .references(() => user.id, { onDelete: \"cascade\" }),\n});\n\nconst syncStatusTable = pgTable(\n  \"sync_status\",\n  {\n    calendarId: uuid()\n      .notNull()\n      .references(() => calendarsTable.id, { onDelete: \"cascade\" }),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    lastSyncedAt: timestamp(),\n    localEventCount: integer().notNull().default(DEFAULT_EVENT_COUNT),\n    remoteEventCount: integer().notNull().default(DEFAULT_EVENT_COUNT),\n    updatedAt: timestamp()\n      .notNull()\n      .defaultNow()\n      .$onUpdate(() => new Date()),\n  },\n  (table) => [uniqueIndex(\"sync_status_calendar_idx\").on(table.calendarId)],\n);\n\nconst eventMappingsTable = pgTable(\n  \"event_mappings\",\n  {\n    calendarId: uuid()\n      .notNull()\n      .references(() => calendarsTable.id, { onDelete: \"cascade\" }),\n    createdAt: timestamp().notNull().defaultNow(),\n    deleteIdentifier: text(),\n    destinationEventUid: text().notNull(),\n    endTime: timestamp().notNull(),\n    eventStateId: uuid()\n      .notNull()\n      .references(() => eventStatesTable.id, { onDelete: \"cascade\" }),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    syncEventHash: text(),\n    startTime: timestamp().notNull(),\n  },\n  (table) => [\n    uniqueIndex(\"event_mappings_event_cal_idx\").on(table.eventStateId, table.calendarId),\n    index(\"event_mappings_calendar_idx\").on(table.calendarId),\n    index(\"event_mappings_sync_hash_idx\").on(table.syncEventHash),\n  ],\n);\n\nconst sourceDestinationMappingsTable = pgTable(\n  \"source_destination_mappings\",\n  {\n    createdAt: timestamp().notNull().defaultNow(),\n    destinationCalendarId: uuid()\n      .notNull()\n      .references(() => calendarsTable.id, { onDelete: \"cascade\" }),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    sourceCalendarId: uuid()\n      .notNull()\n      .references(() => calendarsTable.id, { onDelete: \"cascade\" }),\n  },\n  (table) => [\n    uniqueIndex(\"source_destination_mapping_idx\").on(\n      table.sourceCalendarId,\n      table.destinationCalendarId,\n    ),\n    index(\"source_destination_mappings_source_idx\").on(table.sourceCalendarId),\n    index(\"source_destination_mappings_destination_idx\").on(table.destinationCalendarId),\n  ],\n);\n\nconst feedbackTable = pgTable(\n  \"feedback\",\n  {\n    createdAt: timestamp().notNull().defaultNow(),\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    message: text().notNull(),\n    type: text().notNull(),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    wantsFollowUp: boolean().notNull().default(false),\n  },\n  (table) => [index(\"feedback_user_idx\").on(table.userId)],\n);\n\nconst apiTokensTable = pgTable(\n  \"api_tokens\",\n  {\n    id: uuid().notNull().primaryKey().defaultRandom(),\n    userId: text()\n      .notNull()\n      .references(() => user.id, { onDelete: \"cascade\" }),\n    name: text().notNull(),\n    tokenHash: text().notNull().unique(),\n    tokenPrefix: text().notNull(),\n    lastUsedAt: timestamp(),\n    expiresAt: timestamp(),\n    createdAt: timestamp().notNull().defaultNow(),\n  },\n  (table) => [\n    index(\"api_tokens_user_idx\").on(table.userId),\n    uniqueIndex(\"api_tokens_hash_idx\").on(table.tokenHash),\n  ],\n);\n\nconst icalFeedSettingsTable = pgTable(\"ical_feed_settings\", {\n  userId: text()\n    .notNull()\n    .primaryKey()\n    .references(() => user.id, { onDelete: \"cascade\" }),\n  includeEventName: boolean().notNull().default(false),\n  includeEventDescription: boolean().notNull().default(false),\n  includeEventLocation: boolean().notNull().default(false),\n  excludeAllDayEvents: boolean().notNull().default(false),\n  customEventName: text().notNull().default(\"Busy\"),\n  updatedAt: timestamp()\n    .notNull()\n    .defaultNow()\n    .$onUpdate(() => new Date()),\n});\n\nexport {\n  apiTokensTable,\n  caldavCredentialsTable,\n  calendarAccountsTable,\n  calendarSnapshotsTable,\n  calendarsTable,\n  eventMappingsTable,\n  eventStatesTable,\n  feedbackTable,\n  icalFeedSettingsTable,\n  oauthCredentialsTable,\n  sourceDestinationMappingsTable,\n  syncStatusTable,\n  userEventsTable,\n  userSubscriptionsTable,\n};\n"
  },
  {
    "path": "packages/database/src/encryption.ts",
    "content": "import { randomBytes, secretbox } from \"tweetnacl\";\nimport { decodeBase64, decodeUTF8, encodeBase64, encodeUTF8 } from \"tweetnacl-util\";\n\nconst parseKey = (key: string): Uint8Array => {\n  const decoded = decodeBase64(key);\n  if (decoded.length !== secretbox.keyLength) {\n    throw new Error(`Encryption key must be ${secretbox.keyLength} bytes (base64 encoded)`);\n  }\n  return decoded;\n};\n\nconst encryptPassword = (password: string, key: string): string => {\n  const keyBytes = parseKey(key);\n  const nonce = randomBytes(secretbox.nonceLength);\n  const encrypted = secretbox(decodeUTF8(password), nonce, keyBytes);\n  return `${encodeBase64(nonce)}:${encodeBase64(encrypted)}`;\n};\n\nconst decryptPassword = (encryptedData: string, key: string): string => {\n  const keyBytes = parseKey(key);\n  const [nonceB64, encryptedB64] = encryptedData.split(\":\");\n\n  if (!nonceB64 || !encryptedB64) {\n    throw new Error(\"Invalid encrypted data format\");\n  }\n\n  const nonce = decodeBase64(nonceB64);\n  const encrypted = decodeBase64(encryptedB64);\n  const decrypted = secretbox.open(encrypted, nonce, keyBytes);\n\n  if (!decrypted) {\n    throw new Error(\"Decryption failed\");\n  }\n\n  return encodeUTF8(decrypted);\n};\n\nexport { encryptPassword, decryptPassword };\n"
  },
  {
    "path": "packages/database/src/index.ts",
    "content": "export { createDatabase, closeDatabase } from \"./utils/database\";\nexport { account, user } from \"./database/auth-schema\";\nexport { encryptPassword, decryptPassword } from \"./encryption\";\n"
  },
  {
    "path": "packages/database/src/utils/database.ts",
    "content": "import type { SQL } from \"bun\";\nimport { drizzle } from \"drizzle-orm/bun-sql\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\ninterface DatabasePoolOptions {\n  statementTimeoutMs?: number;\n}\n\nconst DEFAULT_STATEMENT_TIMEOUT_MS = 30_000;\n\nconst appendStatementTimeout = (url: string, timeoutMs: number): string => {\n  const parsed = new URL(url);\n  parsed.searchParams.set(\"options\", `-c statement_timeout=${timeoutMs}`);\n  return parsed.toString();\n};\n\ninterface DatabaseInstance extends BunSQLDatabase {\n  $client: SQL;\n}\n\nconst CONNECTION_RETRY_DELAY_MS = 500;\nconst CONNECTION_MAX_RETRIES = 10;\n\nconst waitForConnection = async (database: DatabaseInstance): Promise<void> => {\n  for (let attempt = 0; attempt < CONNECTION_MAX_RETRIES; attempt++) {\n    try {\n      await database.execute(\"SELECT 1\");\n      return;\n    } catch {\n      if (attempt < CONNECTION_MAX_RETRIES - 1) {\n        await Bun.sleep(CONNECTION_RETRY_DELAY_MS);\n      }\n    }\n  }\n  await database.execute(\"SELECT 1\");\n};\n\nconst createDatabase = async (url: string, options?: DatabasePoolOptions): Promise<DatabaseInstance> => {\n  const statementTimeoutMs = options?.statementTimeoutMs ?? DEFAULT_STATEMENT_TIMEOUT_MS;\n  const connectionUrl = appendStatementTimeout(url, statementTimeoutMs);\n  const database = drizzle(connectionUrl);\n  await waitForConnection(database);\n  return database;\n};\n\nconst closeDatabase = (database: DatabaseInstance): void => {\n  database.$client.close();\n};\n\nexport { createDatabase, closeDatabase, DEFAULT_STATEMENT_TIMEOUT_MS };\nexport type { DatabasePoolOptions, DatabaseInstance };\n"
  },
  {
    "path": "packages/database/tests/database/auth-schema.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  jwks,\n  oauthAccessToken,\n  oauthClient,\n  oauthConsent,\n  oauthRefreshToken,\n} from \"../../src/database/auth-schema\";\n\ndescribe(\"oauth provider schema\", () => {\n  it(\"exports the Better Auth OAuth provider tables\", () => {\n    expect(oauthClient).toBeDefined();\n    expect(oauthRefreshToken).toBeDefined();\n    expect(oauthAccessToken).toBeDefined();\n    expect(oauthConsent).toBeDefined();\n    expect(jwks).toBeDefined();\n  });\n\n  it(\"includes the OAuth client registration fields\", () => {\n    expect(oauthClient.id).toBeDefined();\n    expect(oauthClient.redirectUris).toBeDefined();\n    expect(oauthClient.tokenEndpointAuthMethod).toBeDefined();\n    expect(oauthClient.grantTypes).toBeDefined();\n    expect(oauthClient.responseTypes).toBeDefined();\n    expect(oauthClient.public).toBeDefined();\n    expect(oauthClient.requirePKCE).toBeDefined();\n    expect(oauthClient.skipConsent).toBeDefined();\n  });\n\n  it(\"includes opaque access token identifiers and refresh linkage\", () => {\n    expect(oauthAccessToken.id).toBeDefined();\n    expect(oauthAccessToken.token).toBeDefined();\n    expect(oauthAccessToken.refreshId).toBeDefined();\n    expect(oauthAccessToken.expiresAt).toBeDefined();\n  });\n\n  it(\"includes refresh token storage for offline access\", () => {\n    expect(oauthRefreshToken.id).toBeDefined();\n    expect(oauthRefreshToken.token).toBeDefined();\n    expect(oauthRefreshToken.sessionId).toBeDefined();\n    expect(oauthRefreshToken.expiresAt).toBeDefined();\n    expect(oauthRefreshToken.authTime).toBeDefined();\n  });\n\n  it(\"includes consent ids and reference-aware fields\", () => {\n    expect(oauthConsent.id).toBeDefined();\n    expect(oauthConsent.referenceId).toBeDefined();\n    expect(oauthConsent.scopes).toBeDefined();\n  });\n\n  it(\"includes JWT key storage for signed access tokens\", () => {\n    expect(jwks.id).toBeDefined();\n    expect(jwks.publicKey).toBeDefined();\n    expect(jwks.privateKey).toBeDefined();\n    expect(jwks.createdAt).toBeDefined();\n  });\n});\n"
  },
  {
    "path": "packages/database/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/database/turbo.json",
    "content": "{\n  \"$schema\": \"https://v2-9-0.turborepo.dev/schema.json\",\n  \"extends\": [\"//\"],\n  \"tasks\": {\n    \"migrate\": {\n      \"passThroughEnv\": [\"DATABASE_URL\"]\n    }\n  }\n}\n"
  },
  {
    "path": "packages/database/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/digest-fetch/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/digest-fetch\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/digest-fetch/src/index.ts",
    "content": "import { CryptoHasher } from \"bun\";\n\nconst md5 = (data: string): string =>\n  new CryptoHasher(\"md5\").update(data).digest(\"hex\");\n\nconst parseField = (\n  header: string,\n  field: string,\n  trim = true,\n): string | null => {\n  const regex = new RegExp(`${field}=(\"[^\"]*\"|[^,]*)`, \"i\");\n  const match = regex.exec(header);\n\n  if (!match?.[1]) {\n    return null;\n  }\n\n  if (trim) {\n    return match[1].replaceAll(/[\\s\"]/g, \"\");\n  }\n\n  return match[1];\n};\n\nconst parseRealm = (header: string): string => {\n  const match = parseField(header, \"realm\", false);\n\n  if (!match) {\n    return \"\";\n  }\n\n  return match.replaceAll('\"', \"\");\n};\n\nconst parseQualityOfProtection = (header: string): string | null => {\n  const value = parseField(header, \"qop\");\n\n  if (!value) {\n    return null;\n  }\n\n  const options = value.split(\",\");\n\n  if (options.includes(\"auth\")) {\n    return \"auth\";\n  }\n\n  if (options.includes(\"auth-int\")) {\n    return \"auth-int\";\n  }\n\n  return null;\n};\n\nconst generateClientNonce = (size = 32): string => {\n  const hexChars = \"abcdef0123456789\";\n  let result = \"\";\n\n  for (let index = 0; index < size; index++) {\n    result += hexChars[Math.floor(Math.random() * hexChars.length)];\n  }\n\n  return result;\n};\n\ninterface DigestChallenge {\n  nonceCount: number;\n  scheme: string;\n  realm: string;\n  nonce: string;\n  clientNonce: string;\n  qualityOfProtection: string | null;\n  opaque: string | null;\n}\n\nconst parseChallenge = (header: string): DigestChallenge => ({\n  nonceCount: 1,\n  scheme: header.split(/\\s/)[0] ?? \"Digest\",\n  realm: parseRealm(header),\n  qualityOfProtection: parseQualityOfProtection(header),\n  opaque: parseField(header, \"opaque\"),\n  nonce: parseField(header, \"nonce\") ?? \"\",\n  clientNonce: generateClientNonce(),\n});\n\nconst computeResponseHash = (\n  challenge: DigestChallenge,\n  hashA1: string,\n  hashA2: string,\n  nonceCount: string,\n): string => {\n  if (!challenge.qualityOfProtection) {\n    return md5(`${hashA1}:${challenge.nonce}:${hashA2}`);\n  }\n\n  return md5(\n    `${hashA1}:${challenge.nonce}:${nonceCount}:${challenge.clientNonce}:${challenge.qualityOfProtection}:${hashA2}`,\n  );\n};\n\nconst buildAuthorizationHeader = (\n  challenge: DigestChallenge,\n  username: string,\n  password: string,\n  method: string,\n  uri: string,\n): string => {\n  const hashA1 = md5(`${username}:${challenge.realm}:${password}`);\n  const hashA2 = md5(`${method}:${uri}`);\n  const nonceCount = String(challenge.nonceCount).padStart(8, \"0\");\n  const responseHash = computeResponseHash(\n    challenge,\n    hashA1,\n    hashA2,\n    nonceCount,\n  );\n\n  let opaqueDirective = \"\";\n\n  if (challenge.opaque) {\n    opaqueDirective = `opaque=\"${challenge.opaque}\",`;\n  }\n\n  let qopDirective = \"\";\n\n  if (challenge.qualityOfProtection) {\n    qopDirective = `qop=${challenge.qualityOfProtection},`;\n  }\n\n  return [\n    `${challenge.scheme} username=\"${username}\"`,\n    `realm=\"${challenge.realm}\"`,\n    `nonce=\"${challenge.nonce}\"`,\n    `uri=\"${uri}\"`,\n    `${opaqueDirective}${qopDirective}algorithm=MD5`,\n    `response=\"${responseHash}\"`,\n    `nc=${nonceCount}`,\n    `cnonce=\"${challenge.clientNonce}\"`,\n  ].join(\",\");\n};\n\ntype FetchFunction = (\n  input: string | Request | URL,\n  init?: RequestInit,\n) => Promise<Response>;\n\ninterface DigestClientOptions {\n  user: string;\n  password: string;\n  fetch: FetchFunction;\n}\n\nconst isDigestChallenge = (header: string | null): header is string => {\n  if (!header) {\n    return false;\n  }\n\n  return /^Digest\\s/i.test(header);\n};\n\nconst createDigestClient = (options: DigestClientOptions) => {\n  const { user, password } = options;\n  const baseFetch = options.fetch;\n  let challenge: DigestChallenge | null = null;\n\n  const authenticatedFetch = (\n    currentChallenge: DigestChallenge,\n    input: string | Request | URL,\n    init: RequestInit | undefined,\n    method: string,\n    uri: string,\n  ): Promise<Response> => {\n    const authorization = buildAuthorizationHeader(\n      currentChallenge,\n      user,\n      password,\n      method,\n      uri,\n    );\n    const headers = new Headers(init?.headers);\n    headers.set(\"authorization\", authorization);\n    return baseFetch(input, { ...init, headers });\n  };\n\n  const digestFetch: FetchFunction = async (input, init) => {\n    const url = String(input);\n    const parsed = new URL(url);\n    const uri = `${parsed.pathname}${parsed.search}`;\n    const method = init?.method?.toUpperCase() ?? \"GET\";\n\n    if (challenge) {\n      const response = await authenticatedFetch(\n        challenge,\n        input,\n        init,\n        method,\n        uri,\n      );\n\n      if (response.status !== 401) {\n        challenge.nonceCount++;\n        return response;\n      }\n\n      const wwwAuthenticate = response.headers.get(\"www-authenticate\");\n\n      if (!isDigestChallenge(wwwAuthenticate)) {\n        return response;\n      }\n\n      await response.body?.cancel();\n      challenge = parseChallenge(wwwAuthenticate);\n      const retryResponse = await authenticatedFetch(\n        challenge,\n        input,\n        init,\n        method,\n        uri,\n      );\n      challenge.nonceCount++;\n      return retryResponse;\n    }\n\n    const initialResponse = await baseFetch(input, init);\n\n    if (initialResponse.status !== 401) {\n      return initialResponse;\n    }\n\n    const wwwAuthenticate = initialResponse.headers.get(\"www-authenticate\");\n\n    if (!isDigestChallenge(wwwAuthenticate)) {\n      return initialResponse;\n    }\n\n    await initialResponse.body?.cancel();\n    challenge = parseChallenge(wwwAuthenticate);\n    const retryResponse = await authenticatedFetch(\n      challenge,\n      input,\n      init,\n      method,\n      uri,\n    );\n    challenge.nonceCount++;\n    return retryResponse;\n  };\n\n  return { fetch: digestFetch };\n};\n\nexport { createDigestClient };\nexport type { FetchFunction };\n"
  },
  {
    "path": "packages/digest-fetch/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/fixtures/ics/berkeley-ib-seminars.ics",
    "content": "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//University of California Berkeley//IB Events Calendar//EN\nCALSCALE:GREGORIAN\nMETHOD:PUBLISH\nBEGIN:VEVENT\nDTSTART:20260122T203000Z\nDTEND:20260122T213000Z\nDTSTAMP:20260308T083501Z\nUID:313839-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Margaux Pinney: Leveraging Evolutionary-Scale Enzymology to Map and\r\n  Predict Catalytic Landscapes\nDESCRIPTION:Speaker Institution: University of California\\, Berkeley\nURL:https://events.berkeley.edu/ib/event/313839-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260129T203000Z\nDTEND:20260129T213000Z\nDTSTAMP:20260308T083501Z\nUID:313838-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Michael Eisen: From Arkansas to the Atmosphere: Reversing the Impac\r\n t of Animal Agriculture on Climate and Biodiversity\nDESCRIPTION:Speaker Institution: University of California\\, Berkeley\nURL:https://events.berkeley.edu/ib/event/313838-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260205T203000Z\nDTEND:20260205T213000Z\nDTSTAMP:20260308T083501Z\nUID:313454-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Roxanne Beltran: Unraveling individual and environmental drivers of\r\n  life history trait variation in long-lived vertebrates\nDESCRIPTION:Speaker Institution: University of California\\, Santa Cruz\nURL:https://events.berkeley.edu/ib/event/313454-unraveling-individual-and-e\r\n nvironmental-drivers-of\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260212T203000Z\nDTEND:20260212T213000Z\nDTSTAMP:20260308T083501Z\nUID:316364-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Jeff Groh: IB Postdoc Talks: Balanced polymorphism in a floral tran\r\n scription factor underlies an ancient rhythm of alternating sexes in avoca\r\n do\nDESCRIPTION:Speaker Institution: UCB (Blackman Lab &amp\\; Whiteman Lab)\nURL:https://events.berkeley.edu/ib/event/316364-ib-postdoc-talks-title-to-b\r\n e-announced\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260212T203000Z\nDTEND:20260212T213000Z\nDTSTAMP:20260308T083501Z\nUID:316365-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Milo Johnson: IB Postdoc Talks: Building a zoo of barcoded mobile g\r\n enetic elements\nDESCRIPTION:Speaker Institution: UCB (Koskella Lab)\nURL:https://events.berkeley.edu/ib/event/316365-ib-postdoc-talks-title-to-b\r\n e-announced\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260219T203000Z\nDTEND:20260219T213000Z\nDTSTAMP:20260308T083501Z\nUID:312509-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Kirk Lohmueller: Understanding the fitness effects of mutations and\r\n  implications for small populations\nDESCRIPTION:Speaker Institution: University of California\\, Los Angeles\nURL:https://events.berkeley.edu/ib/event/312509-integrative-biology\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260226T203000Z\nDTEND:20260226T213000Z\nDTSTAMP:20260308T083501Z\nUID:312508-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Damien Caillaud: Effects of Population Density on Gorilla Behavior \r\n and Demography\nDESCRIPTION:Speaker Institution: University of California\\, Davis\nURL:https://events.berkeley.edu/ib/event/312508-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260305T203000Z\nDTEND:20260305T213000Z\nDTSTAMP:20260308T083501Z\nUID:312507-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Sunghwan Jung: Drinking\\, Diving\\, and Shaking\nDESCRIPTION:Speaker Institution: Cornell University\nURL:https://events.berkeley.edu/ib/event/312507-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260319T193000Z\nDTEND:20260319T203000Z\nDTSTAMP:20260308T083501Z\nUID:312506-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Xochitl Clare: EcoTrace Project: Mapping Environmental Pollution an\r\n damp\\; Community Awareness in Placencia\\, Belize\nDESCRIPTION:Speaker Institution: University of Washington\nURL:https://events.berkeley.edu/ib/event/312506-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260402T193000Z\nDTEND:20260402T203000Z\nDTSTAMP:20260308T083501Z\nUID:312505-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Erin Mordecai: Global change and the ecology and evolution of infec\r\n tious disease\nDESCRIPTION:Speaker Institution: Stanford University\nURL:https://events.berkeley.edu/ib/event/312505-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260409T193000Z\nDTEND:20260409T203000Z\nDTSTAMP:20260308T083501Z\nUID:312504-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Kadeem Gilbert: Pigments and pH: Plant traits temper their interact\r\n ions\nDESCRIPTION:Speaker Institution: Michigan State University\nURL:https://events.berkeley.edu/ib/event/312504-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260416T193000Z\nDTEND:20260416T203000Z\nDTSTAMP:20260308T083501Z\nUID:315034-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Andrea Alfaro: Integrative Biology Seminar\nDESCRIPTION:Speaker Institution: University of California\\, Davis\nURL:https://events.berkeley.edu/ib/event/315034-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260423T193000Z\nDTEND:20260423T203000Z\nDTSTAMP:20260308T083501Z\nUID:315033-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Leah Krubitzer: Integrative Biology Seminar\nDESCRIPTION:Speaker Institution: University of California\\, Davis\nURL:https://events.berkeley.edu/ib/event/315033-integrative-biology-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260430T193000Z\nDTEND:20260430T203000Z\nDTSTAMP:20260308T083501Z\nUID:312503-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Katie Marshall: Julius Thomas Hansen Lecture\nDESCRIPTION:Speaker Institution: The University of British Columbia\nURL:https://events.berkeley.edu/ib/event/312503-julius-thomas-hansen-lectur\r\n e\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260507T193000Z\nDTEND:20260507T203000Z\nDTSTAMP:20260308T083501Z\nUID:312502-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Ricardo Mallarino: Joint IB/MCB Seminar\nDESCRIPTION:Speaker Institution: Princeton University\nURL:https://events.berkeley.edu/ib/event/312502-joint-ibmcb-seminar\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260511T223000Z\nDTEND:20260511T233000Z\nDTSTAMP:20260308T083501Z\nUID:317568-ucb-events-calendar@berkeley.edu\nLOCATION:125 Li Ka Shing Center \nORGANIZER:\nSUMMARY:Veronarindra Ramananjato: IB Finishing Talk\nDESCRIPTION:Speaker Institution: UCB (Razafindratsima Lab)\nURL:https://events.berkeley.edu/ib/event/317568-ib-finishing-talk\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\nBEGIN:VEVENT\nDTSTART:20260518T230000Z\nDTEND:20260519T000000Z\nDTSTAMP:20260308T083501Z\nUID:315909-ucb-events-calendar@berkeley.edu\nLOCATION:2040 VLSB \nORGANIZER:\nSUMMARY:Claire Evensen: IB Finishing Talk\nDESCRIPTION:Speaker Institution: UCB (Boots/Koskella Labs)\nURL:https://events.berkeley.edu/ib/event/315909-ib-finishing-talk\nLAST-MODIFIED:20260308T083501Z\nSEQUENCE:0\nEND:VEVENT\r\nEND:VCALENDAR"
  },
  {
    "path": "packages/fixtures/ics/calendarlabs-us-holidays.ics",
    "content": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Calendar Labs//Calendar 1.0//EN\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nX-WR-CALNAME:US Holidays\r\nX-WR-TIMEZONE:UTC\r\nBEGIN:VEVENT\r\nSUMMARY:New Year's Day\r\nDTSTART;VALUE=DATE:20250101\r\nDTEND;VALUE=DATE:20250101\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e11920fef1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:M L King Day\r\nDTSTART;VALUE=DATE:20250120\r\nDTEND;VALUE=DATE:20250120\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/martin-luther-king-day.php to know more about M L King Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210031764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Presidents' Day\r\nDTSTART;VALUE=DATE:20250217\r\nDTEND;VALUE=DATE:20250217\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/presidents-day.php to know more about Presidents' Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210101764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20250418\r\nDTEND;VALUE=DATE:20250418\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/good-friday.php to know more about Good Friday. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192101c1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Easter Sunday\r\nDTSTART;VALUE=DATE:20250420\r\nDTEND;VALUE=DATE:20250420\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/easter.php to know more about Easter Sunday. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210271764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Memorial Day\r\nDTSTART;VALUE=DATE:20250526\r\nDTEND;VALUE=DATE:20250526\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/memorial-day.php to know more about Memorial Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210321764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Juneteenth\r\nDTSTART;VALUE=DATE:20250619\r\nDTEND;VALUE=DATE:20250619\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/juneteenth.php to know more about Juneteenth. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192103d1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Independence Day\r\nDTSTART;VALUE=DATE:20250704\r\nDTEND;VALUE=DATE:20250704\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/independence-day.php to know more about Independence Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210481764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Labor Day\r\nDTSTART;VALUE=DATE:20250901\r\nDTEND;VALUE=DATE:20250901\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/labor-day.php to know more about Labor Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210541764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Columbus Day\r\nDTSTART;VALUE=DATE:20251013\r\nDTEND;VALUE=DATE:20251013\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/columbus-day.php to know more about Columbus Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192105f1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Veterans Day\r\nDTSTART;VALUE=DATE:20251111\r\nDTEND;VALUE=DATE:20251111\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/veterans-day.php to know more about Veterans Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192106b1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Thanksgiving Day\r\nDTSTART;VALUE=DATE:20251127\r\nDTEND;VALUE=DATE:20251127\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/thanksgiving-day.php to know more about Thanksgiving Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210771764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Christmas\r\nDTSTART;VALUE=DATE:20251225\r\nDTEND;VALUE=DATE:20251225\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/christmas.php to know more about Christmas. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210821764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:New Year's Day\r\nDTSTART;VALUE=DATE:20260101\r\nDTEND;VALUE=DATE:20260101\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192108e1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:M L King Day\r\nDTSTART;VALUE=DATE:20260119\r\nDTEND;VALUE=DATE:20260119\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/martin-luther-king-day.php to know more about M L King Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192109a1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Presidents' Day\r\nDTSTART;VALUE=DATE:20260216\r\nDTEND;VALUE=DATE:20260216\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/presidents-day.php to know more about Presidents' Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210a61764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Good Friday\r\nDTSTART;VALUE=DATE:20260403\r\nDTEND;VALUE=DATE:20260403\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/good-friday.php to know more about Good Friday. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210b11764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Easter Sunday\r\nDTSTART;VALUE=DATE:20260405\r\nDTEND;VALUE=DATE:20260405\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/easter.php to know more about Easter Sunday. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210c21764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Memorial Day\r\nDTSTART;VALUE=DATE:20260525\r\nDTEND;VALUE=DATE:20260525\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/memorial-day.php to know more about Memorial Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210ce1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Juneteenth\r\nDTSTART;VALUE=DATE:20260619\r\nDTEND;VALUE=DATE:20260619\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/juneteenth.php to know more about Juneteenth. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210da1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Independence Day Holiday\r\nDTSTART;VALUE=DATE:20260703\r\nDTEND;VALUE=DATE:20260703\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/independence-day.php to know more about Independence Day Holiday. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210e61764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Independence Day\r\nDTSTART;VALUE=DATE:20260704\r\nDTEND;VALUE=DATE:20260704\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/independence-day.php to know more about Independence Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210f21764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Labor Day\r\nDTSTART;VALUE=DATE:20260907\r\nDTEND;VALUE=DATE:20260907\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/labor-day.php to know more about Labor Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119210fe1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Columbus Day\r\nDTSTART;VALUE=DATE:20261012\r\nDTEND;VALUE=DATE:20261012\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/columbus-day.php to know more about Columbus Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e1192110a1764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Veterans Day\r\nDTSTART;VALUE=DATE:20261111\r\nDTEND;VALUE=DATE:20261111\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/veterans-day.php to know more about Veterans Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119211171764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Thanksgiving Day\r\nDTSTART;VALUE=DATE:20261126\r\nDTEND;VALUE=DATE:20261126\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/thanksgiving-day.php to know more about Thanksgiving Day. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119211241764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nSUMMARY:Christmas\r\nDTSTART;VALUE=DATE:20261225\r\nDTEND;VALUE=DATE:20261225\r\nLOCATION:United States\r\nDESCRIPTION:Visit https://calendarlabs.com/holidays/us/christmas.php to know more about Christmas. \\n\\n Like us on Facebook: http://fb.com/calendarlabs to get updates\r\nUID:6932e119211301764942105@calendarlabs.com\r\nDTSTAMP:20251205T084145Z\r\nSTATUS:CONFIRMED\r\nTRANSP:TRANSPARENT\r\nSEQUENCE:0\r\nEND:VEVENT\r\nEND:VCALENDAR"
  },
  {
    "path": "packages/fixtures/ics/google-canada-holidays.ics",
    "content": "BEGIN:VCALENDAR\r\nPRODID:-//Google Inc//Google Calendar 70.9054//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nX-WR-CALNAME:Holidays in Canada\r\nX-WR-TIMEZONE:UTC\r\nX-WR-CALDESC:Holidays and Observances in Canada\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220801\r\nDTEND;VALUE=DATE:20220802\r\nDTSTAMP:20260308T083859Z\r\nUID:20220801_ekh5ksrb09qcafn7oe43hk9dms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230522\r\nDTEND;VALUE=DATE:20230523\r\nDTSTAMP:20260308T083859Z\r\nUID:20230522_i7n0p0dfi52c7frpd1sc5n946k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240902\r\nDTEND;VALUE=DATE:20240903\r\nDTSTAMP:20260308T083859Z\r\nUID:20240902_l98j721sit5sf5llabp43gmqlk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251225\r\nDTEND;VALUE=DATE:20251226\r\nDTSTAMP:20260308T083859Z\r\nUID:20251225_73sfl0u5n1ap2frjqkd8plg12k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260101\r\nDTEND;VALUE=DATE:20260102\r\nDTSTAMP:20260308T083859Z\r\nUID:20260101_gosnjru4d8dtg2ktu2s4fmabfk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270524\r\nDTEND;VALUE=DATE:20270525\r\nDTSTAMP:20260308T083859Z\r\nUID:20270524_934dt46fh3o9pnpent4cp10uls@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281224\r\nDTEND;VALUE=DATE:20281225\r\nDTSTAMP:20260308T083859Z\r\nUID:20281224_svcehbqp815geiv5vfatocff94@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290521\r\nDTEND;VALUE=DATE:20290522\r\nDTSTAMP:20260308T083859Z\r\nUID:20290521_lvn3ke67h3q22c9v71f94j496s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124030Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124030Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210106\r\nDTEND;VALUE=DATE:20210107\r\nDTSTAMP:20260308T083859Z\r\nUID:20210106_pgfe8rtdcqbhk2ddro3l0m1pd0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210202\r\nDTEND;VALUE=DATE:20210203\r\nDTSTAMP:20260308T083859Z\r\nUID:20210202_mk270ttq60roqrub7fs32r3nj8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220101\r\nDTEND;VALUE=DATE:20220102\r\nDTSTAMP:20260308T083859Z\r\nUID:20220101_vuc6bs8d0np4uimee3belnupmk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230101\r\nDTEND;VALUE=DATE:20230102\r\nDTSTAMP:20260308T083859Z\r\nUID:20230101_gu6mlhit4s089phs97rfdvb810@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240805\r\nDTEND;VALUE=DATE:20240806\r\nDTSTAMP:20260308T083859Z\r\nUID:20240805_dv1irt4ghv3lrsailbtii11o1g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250310\r\nDTEND;VALUE=DATE:20250311\r\nDTSTAMP:20260308T083859Z\r\nUID:20250310_joc5688qpnlacb1s8l8cj8rl4k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250409\r\nDTEND;VALUE=DATE:20250410\r\nDTSTAMP:20260308T083859Z\r\nUID:20250409_hvq9gfbuuji7l1jmrl05797p80@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280522\r\nDTEND;VALUE=DATE:20280523\r\nDTSTAMP:20260308T083859Z\r\nUID:20280522_3kr4o55hv6tl7aob6cgg3orqos@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280904\r\nDTEND;VALUE=DATE:20280905\r\nDTSTAMP:20260308T083859Z\r\nUID:20280904_krqf93jkm64vag2q45g8qm1leg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281105\r\nDTEND;VALUE=DATE:20281106\r\nDTSTAMP:20260308T083859Z\r\nUID:20281105_fi8omred0578psbinphbn0s2os@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290806\r\nDTEND;VALUE=DATE:20290807\r\nDTSTAMP:20260308T083859Z\r\nUID:20290806_8if9cmhlgqen381a5ag1elpsuc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290903\r\nDTEND;VALUE=DATE:20290904\r\nDTSTAMP:20260308T083859Z\r\nUID:20290903_sovajluhm1r6luhfs8o1786lp8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291104\r\nDTEND;VALUE=DATE:20291105\r\nDTSTAMP:20260308T083859Z\r\nUID:20291104_b3q2icgmgf3sp5dhoe3evtpb54@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124033Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124033Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210101\r\nDTEND;VALUE=DATE:20210102\r\nDTSTAMP:20260308T083859Z\r\nUID:20210101_qguod5mefahs2b41onjcpvfe20@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220103\r\nDTEND;VALUE=DATE:20220104\r\nDTSTAMP:20260308T083859Z\r\nUID:20220103_m83b5qgvmhpdfggqj5g43uk458@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Day off for New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220202\r\nDTEND;VALUE=DATE:20220203\r\nDTSTAMP:20260308T083859Z\r\nUID:20220202_08lf461jli99tnb2rdeo51d7rs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220317\r\nDTEND;VALUE=DATE:20220318\r\nDTSTAMP:20260308T083859Z\r\nUID:20220317_p47k7lb0o47b1tboplc407i6eg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220701\r\nDTEND;VALUE=DATE:20220702\r\nDTSTAMP:20260308T083859Z\r\nUID:20220701_54t751v65l9d8u0foeafvd3f40@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230406\r\nDTEND;VALUE=DATE:20230407\r\nDTSTAMP:20260308T083859Z\r\nUID:20230406_dbbi30odlvou2vsbfmj6d7ggbg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230904\r\nDTEND;VALUE=DATE:20230905\r\nDTSTAMP:20260308T083859Z\r\nUID:20230904_k6mejo7m34je19neopsvrdkms0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240106\r\nDTEND;VALUE=DATE:20240107\r\nDTSTAMP:20260308T083859Z\r\nUID:20240106_lenjlf4a1194crjq3necmmsb6s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251031\r\nDTEND;VALUE=DATE:20251101\r\nDTSTAMP:20260308T083859Z\r\nUID:20251031_5v78re9rlqv0efhr0qc3k2s11s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261225\r\nDTEND;VALUE=DATE:20261226\r\nDTSTAMP:20260308T083859Z\r\nUID:20261225_23mt4ra0uqidmr16os7r1nu3k4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270308\r\nDTEND;VALUE=DATE:20270309\r\nDTSTAMP:20260308T083859Z\r\nUID:20270308_b0kfggs1870q8jduhskm95dnv0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271031\r\nDTEND;VALUE=DATE:20271101\r\nDTSTAMP:20260308T083859Z\r\nUID:20271031_tj2id4negte8mh0codtfke154g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271225\r\nDTEND;VALUE=DATE:20271226\r\nDTSTAMP:20260308T083859Z\r\nUID:20271225_a0jco0l46j6id8gcg02ts8igrk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280317\r\nDTEND;VALUE=DATE:20280318\r\nDTSTAMP:20260308T083859Z\r\nUID:20280317_hi5jvikneep3k5b7egirbkaets@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290101\r\nDTEND;VALUE=DATE:20290102\r\nDTSTAMP:20260308T083859Z\r\nUID:20290101_ganeh1ohhd2mjb7jdc55agll8c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290106\r\nDTEND;VALUE=DATE:20290107\r\nDTSTAMP:20260308T083859Z\r\nUID:20290106_ee0ed8mnvtog62jonb9r3auc7k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290311\r\nDTEND;VALUE=DATE:20290312\r\nDTSTAMP:20260308T083859Z\r\nUID:20290311_dejkh3dlne9rblv4ihpgifg00c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290406\r\nDTEND;VALUE=DATE:20290407\r\nDTSTAMP:20260308T083859Z\r\nUID:20290406_0afvpnbgaod9igvaleh6thchjs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210406\r\nDTEND;VALUE=DATE:20210407\r\nDTSTAMP:20260308T083859Z\r\nUID:20210406_m0mcsi788fbto2kev42tmlb9t8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210409\r\nDTEND;VALUE=DATE:20210410\r\nDTSTAMP:20260308T083859Z\r\nUID:20210409_ueijorke90qqj7tsohuo6vu6j8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240101\r\nDTEND;VALUE=DATE:20240102\r\nDTSTAMP:20260308T083859Z\r\nUID:20240101_10142p07jsvkc9lde70oav2blo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241031\r\nDTEND;VALUE=DATE:20241101\r\nDTSTAMP:20260308T083859Z\r\nUID:20241031_06bqas7pl2i33t2b51rd8rnegc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250804\r\nDTEND;VALUE=DATE:20250805\r\nDTSTAMP:20260308T083859Z\r\nUID:20250804_46ngla2h42gee0hsvf6nodh694@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260309\r\nDTEND;VALUE=DATE:20260310\r\nDTSTAMP:20260308T083859Z\r\nUID:20260309_qq1rsof7grem7i61ouuqsa3cgs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260406\r\nDTEND;VALUE=DATE:20260407\r\nDTSTAMP:20260308T083859Z\r\nUID:20260406_ms5ale3hadplbpt14oj708s4k0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270202\r\nDTEND;VALUE=DATE:20270203\r\nDTSTAMP:20260308T083859Z\r\nUID:20270202_km68ft0vhhsju4j88v6pn7hgpg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270214\r\nDTEND;VALUE=DATE:20270215\r\nDTSTAMP:20260308T083859Z\r\nUID:20270214_ln48q7aurtgd6a58aiaejt3pvg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270317\r\nDTEND;VALUE=DATE:20270318\r\nDTSTAMP:20260308T083859Z\r\nUID:20270317_cc5kcfvvf9pa9ric3f2e8546u4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280313\r\nDTEND;VALUE=DATE:20280314\r\nDTSTAMP:20260308T083859Z\r\nUID:20280313_a0a5ok4rfo1d4bktk502v3ob3g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281231\r\nDTEND;VALUE=DATE:20290101\r\nDTSTAMP:20260308T083859Z\r\nUID:20281231_76lrch52mm6vlbkgpevj3g50sc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290202\r\nDTEND;VALUE=DATE:20290203\r\nDTSTAMP:20260308T083859Z\r\nUID:20290202_i62b7cbbhk9u4dm9la5ta114t8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290312\r\nDTEND;VALUE=DATE:20290313\r\nDTSTAMP:20260308T083859Z\r\nUID:20290312_s96ul9b9k6qr50t19v5ffgivb4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291231\r\nDTEND;VALUE=DATE:20300101\r\nDTSTAMP:20260308T083859Z\r\nUID:20291231_2i190ri29i0cv5r8ju00ciftn0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124036Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124036Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221225\r\nDTEND;VALUE=DATE:20221226\r\nDTSTAMP:20260308T083859Z\r\nUID:20221225_qdv4tmu90cqgo5bctepnj1ramc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221231\r\nDTEND;VALUE=DATE:20230101\r\nDTSTAMP:20260308T083859Z\r\nUID:20221231_orip4vet5fkte5oeuaklljmneo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231231\r\nDTEND;VALUE=DATE:20240101\r\nDTSTAMP:20260308T083859Z\r\nUID:20231231_qvqblabf74l1cdqquct3ud6kj8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240310\r\nDTEND;VALUE=DATE:20240311\r\nDTSTAMP:20260308T083859Z\r\nUID:20240310_iqpro3b6jkjgnunqb3c7710r5c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240701\r\nDTEND;VALUE=DATE:20240702\r\nDTSTAMP:20260308T083859Z\r\nUID:20240701_ahpnnhtfn49ne8msf28kq9alm0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241103\r\nDTEND;VALUE=DATE:20241104\r\nDTSTAMP:20260308T083859Z\r\nUID:20241103_3ortajc1ci2dt8nlo3spt0jsi4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250101\r\nDTEND;VALUE=DATE:20250102\r\nDTSTAMP:20260308T083859Z\r\nUID:20250101_5hd6d8itn4555al6afo21l7rhs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250214\r\nDTEND;VALUE=DATE:20250215\r\nDTSTAMP:20260308T083859Z\r\nUID:20250214_nr5mpovmmm3245gi51uef6dqcs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260106\r\nDTEND;VALUE=DATE:20260107\r\nDTSTAMP:20260308T083859Z\r\nUID:20260106_e6q2dlbj6r2cfgpqqqigk1pt9s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260202\r\nDTEND;VALUE=DATE:20260203\r\nDTSTAMP:20260308T083859Z\r\nUID:20260202_ln5l1906r933faa8rn0lf9pbi0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260214\r\nDTEND;VALUE=DATE:20260215\r\nDTSTAMP:20260308T083859Z\r\nUID:20260214_s5ds3bkprdevaj6ns0tj8ok77s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260409\r\nDTEND;VALUE=DATE:20260410\r\nDTSTAMP:20260308T083859Z\r\nUID:20260409_9l22tu9s6baanv1emekqm1ecdo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261031\r\nDTEND;VALUE=DATE:20261101\r\nDTSTAMP:20260308T083859Z\r\nUID:20261031_lgpvq7e1cliphjerfenedt74jg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270406\r\nDTEND;VALUE=DATE:20270407\r\nDTSTAMP:20260308T083859Z\r\nUID:20270406_9jt5u8nhltvhnqoqej59d2bros@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270409\r\nDTEND;VALUE=DATE:20270410\r\nDTSTAMP:20260308T083859Z\r\nUID:20270409_0hk7vf4g3ktb8n72pnve2ipkj4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280101\r\nDTEND;VALUE=DATE:20280102\r\nDTSTAMP:20260308T083859Z\r\nUID:20280101_om04gbekrbi8g6k5cujqj7pi54@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281031\r\nDTEND;VALUE=DATE:20281101\r\nDTSTAMP:20260308T083859Z\r\nUID:20281031_3irar47otfnth5lmkqm1ovgk4c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124038Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124038Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210802\r\nDTEND;VALUE=DATE:20210803\r\nDTSTAMP:20260308T083859Z\r\nUID:20210802_704mu857rbv6ft5q82m1ke9j7o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211031\r\nDTEND;VALUE=DATE:20211101\r\nDTSTAMP:20260308T083859Z\r\nUID:20211031_svhb5oir9a51kp8qp3jbkvb920@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220314\r\nDTEND;VALUE=DATE:20220315\r\nDTSTAMP:20260308T083859Z\r\nUID:20220314_pelmp5qr7d19lc261040mh1ucs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220801\r\nDTEND;VALUE=DATE:20220802\r\nDTSTAMP:20260308T083859Z\r\nUID:20220801_0o1069fvcv7r0709erjjhimmi0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230214\r\nDTEND;VALUE=DATE:20230215\r\nDTSTAMP:20260308T083859Z\r\nUID:20230214_2jt9j89465p02tfogmbm7p9gec@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230313\r\nDTEND;VALUE=DATE:20230314\r\nDTSTAMP:20260308T083859Z\r\nUID:20230313_qqmnea2d8adiepi4n3q756bqlc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230409\r\nDTEND;VALUE=DATE:20230410\r\nDTSTAMP:20260308T083859Z\r\nUID:20230409_ebhdjant4vivd8p1klrnh7f3k4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230506\r\nDTEND;VALUE=DATE:20230507\r\nDTSTAMP:20260308T083859Z\r\nUID:20230506_6tne1ol2b6d3sn6u5h8v1rjb50@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:The Coronation of King Charles III\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231224\r\nDTEND;VALUE=DATE:20231225\r\nDTSTAMP:20260308T083859Z\r\nUID:20231224_ofsl12rdqg2gjvbtck92n5dp0s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240214\r\nDTEND;VALUE=DATE:20240215\r\nDTSTAMP:20260308T083859Z\r\nUID:20240214_bj8engvpsjlpb7lnkn1t6jie1s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240805\r\nDTEND;VALUE=DATE:20240806\r\nDTSTAMP:20260308T083859Z\r\nUID:20240805_eqjo17ttaa9h2hcb8bf29fin80@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250406\r\nDTEND;VALUE=DATE:20250407\r\nDTSTAMP:20260308T083859Z\r\nUID:20250406_uektcifnl6co2mo471ajg0dcp0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251211\r\nDTEND;VALUE=DATE:20251212\r\nDTSTAMP:20260308T083859Z\r\nUID:20251211_e8fd8358ki69nf0e6qg4f5917k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251231\r\nDTEND;VALUE=DATE:20260101\r\nDTSTAMP:20260308T083859Z\r\nUID:20251231_lu7q6ouqgkekq9tge74lnnh5o8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260907\r\nDTEND;VALUE=DATE:20260908\r\nDTSTAMP:20260308T083859Z\r\nUID:20260907_7pquhrgkggl7lueecbif0g4r6c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270101\r\nDTEND;VALUE=DATE:20270102\r\nDTSTAMP:20260308T083859Z\r\nUID:20270101_5lctokgoujvmhqdj7v9s1fm2e8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270314\r\nDTEND;VALUE=DATE:20270315\r\nDTSTAMP:20260308T083859Z\r\nUID:20270314_ocjc7lj4qg6ckjud560srh1gp4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280409\r\nDTEND;VALUE=DATE:20280410\r\nDTSTAMP:20260308T083859Z\r\nUID:20280409_0gm90eabv3qogj1jrt9scm4fis@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124040Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124040Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210906\r\nDTEND;VALUE=DATE:20210907\r\nDTSTAMP:20260308T083859Z\r\nUID:20210906_8khivj39m1ndngnnlqj1u71th0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210930\r\nDTEND;VALUE=DATE:20211001\r\nDTSTAMP:20260308T083859Z\r\nUID:20210930_m96cd6chafq4s2k09k431ivnfg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211231\r\nDTEND;VALUE=DATE:20220101\r\nDTSTAMP:20260308T083859Z\r\nUID:20211231_12fea001nu2oq1drf3lvfg90gs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220106\r\nDTEND;VALUE=DATE:20220107\r\nDTSTAMP:20260308T083859Z\r\nUID:20220106_dm4ootlvb5s1rqdv0hciafnncs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220313\r\nDTEND;VALUE=DATE:20220314\r\nDTSTAMP:20260308T083859Z\r\nUID:20220313_mlodotn6375msrgcf3kloohqmc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220406\r\nDTEND;VALUE=DATE:20220407\r\nDTSTAMP:20260308T083859Z\r\nUID:20220406_kidi5ksraod0icdmahdhopp470@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230202\r\nDTEND;VALUE=DATE:20230203\r\nDTSTAMP:20260308T083859Z\r\nUID:20230202_u6dif6j9u4nurbiacvmpa8kq40@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230317\r\nDTEND;VALUE=DATE:20230318\r\nDTSTAMP:20260308T083859Z\r\nUID:20230317_dciaj07p7h784u5adk7mti351o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231031\r\nDTEND;VALUE=DATE:20231101\r\nDTSTAMP:20260308T083859Z\r\nUID:20231031_s84sdffee6mv4kgj1hon77b4ro@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240202\r\nDTEND;VALUE=DATE:20240203\r\nDTSTAMP:20260308T083859Z\r\nUID:20240202_p4bbrn4kr382k1h38in9lqf11k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240409\r\nDTEND;VALUE=DATE:20240410\r\nDTSTAMP:20260308T083859Z\r\nUID:20240409_rf5te62eq3ukltaa7saujg0dbc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240520\r\nDTEND;VALUE=DATE:20240521\r\nDTSTAMP:20260308T083859Z\r\nUID:20240520_0fn4bo0j9pirm4rlauvri36lvk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241231\r\nDTEND;VALUE=DATE:20250101\r\nDTSTAMP:20260308T083859Z\r\nUID:20241231_ordjc4vjunl6svcs2qjte3e7rc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250309\r\nDTEND;VALUE=DATE:20250310\r\nDTSTAMP:20260308T083859Z\r\nUID:20250309_kfo67k2qjqi7qmj0k1jtbuqmek@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250901\r\nDTEND;VALUE=DATE:20250902\r\nDTSTAMP:20260308T083859Z\r\nUID:20250901_b6hjonl957pl28uvfli5ubln04@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260308\r\nDTEND;VALUE=DATE:20260309\r\nDTSTAMP:20260308T083859Z\r\nUID:20260308_hvobfou9ed5j7j3qig0a1frk2g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260701\r\nDTEND;VALUE=DATE:20260702\r\nDTSTAMP:20260308T083859Z\r\nUID:20260701_90r54furhc8fi68eg0s8bnmhi4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261211\r\nDTEND;VALUE=DATE:20261212\r\nDTSTAMP:20260308T083859Z\r\nUID:20261211_upjfkd3af5o5h8b7b7a0gelcpg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271107\r\nDTEND;VALUE=DATE:20271108\r\nDTSTAMP:20260308T083859Z\r\nUID:20271107_4aqo3bvb1r2se5g9bengkdrqks@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124042Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124042Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210214\r\nDTEND;VALUE=DATE:20210215\r\nDTSTAMP:20260308T083859Z\r\nUID:20210214_se0s3mpsljkfm882crqfjuk6ug@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210314\r\nDTEND;VALUE=DATE:20210315\r\nDTSTAMP:20260308T083859Z\r\nUID:20210314_vl5vgt506kslhhqj6879v7khd0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210317\r\nDTEND;VALUE=DATE:20210318\r\nDTSTAMP:20260308T083859Z\r\nUID:20210317_6mo8njkf3nj7f45rja0t9g0mpc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220409\r\nDTEND;VALUE=DATE:20220410\r\nDTSTAMP:20260308T083859Z\r\nUID:20220409_i8p0g2hh8k8rdii41f0rhgmdgc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230106\r\nDTEND;VALUE=DATE:20230107\r\nDTSTAMP:20260308T083859Z\r\nUID:20230106_9n8jl2hfu8er3m4bq0edthp5vc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240317\r\nDTEND;VALUE=DATE:20240318\r\nDTSTAMP:20260308T083859Z\r\nUID:20240317_21liiodvrbth9g9hbal8ghhelg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240406\r\nDTEND;VALUE=DATE:20240407\r\nDTSTAMP:20260308T083859Z\r\nUID:20240406_a5m5hukvv8lv8r5opgo930p044@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250519\r\nDTEND;VALUE=DATE:20250520\r\nDTSTAMP:20260308T083859Z\r\nUID:20250519_qfjc21vtg99ogta6r2pte7p2dg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261231\r\nDTEND;VALUE=DATE:20270101\r\nDTSTAMP:20260308T083859Z\r\nUID:20261231_n45eorovjkdhogi7dbu529va18@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280807\r\nDTEND;VALUE=DATE:20280808\r\nDTSTAMP:20260308T083859Z\r\nUID:20280807_k3odek36l07s9fvm4611b44qdg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281225\r\nDTEND;VALUE=DATE:20281226\r\nDTSTAMP:20260308T083859Z\r\nUID:20281225_j2i5fqrd4q9tieroimk5kej2ng@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124044Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124044Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211211\r\nDTEND;VALUE=DATE:20211212\r\nDTSTAMP:20260308T083859Z\r\nUID:20211211_m2rnbaledg7r9b00gieviqrr88@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230102\r\nDTEND;VALUE=DATE:20230103\r\nDTSTAMP:20260308T083859Z\r\nUID:20230102_ft6clohrb7f1sll14ots35ohos@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Day off for New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230312\r\nDTEND;VALUE=DATE:20230313\r\nDTSTAMP:20260308T083859Z\r\nUID:20230312_u2k18m8du02sbcgsfn9ct7ft3g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241225\r\nDTEND;VALUE=DATE:20241226\r\nDTSTAMP:20260308T083859Z\r\nUID:20241225_2i90slgk0me2fg93jcdp9durt8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250202\r\nDTEND;VALUE=DATE:20250203\r\nDTSTAMP:20260308T083859Z\r\nUID:20250202_5q4q9eir04eibftcgu063fe5t0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250701\r\nDTEND;VALUE=DATE:20250702\r\nDTSTAMP:20260308T083859Z\r\nUID:20250701_um0k2kvga3lgfuidtjl9pqbb2k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260803\r\nDTEND;VALUE=DATE:20260804\r\nDTSTAMP:20260308T083859Z\r\nUID:20260803_3rrjgrgds2p7ppur7fniaqk8a8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260803\r\nDTEND;VALUE=DATE:20260804\r\nDTSTAMP:20260308T083859Z\r\nUID:20260803_4avvj83u1h0dbfla23ma0biaj0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261101\r\nDTEND;VALUE=DATE:20261102\r\nDTSTAMP:20260308T083859Z\r\nUID:20261101_kc41trn0scs8g5rvgn75vdmmp0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270106\r\nDTEND;VALUE=DATE:20270107\r\nDTSTAMP:20260308T083859Z\r\nUID:20270106_bp806m5cjmk2ss5n2nu91chfis@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271211\r\nDTEND;VALUE=DATE:20271212\r\nDTSTAMP:20260308T083859Z\r\nUID:20271211_gcshcvgrqeo0v78mcp1g634180@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271231\r\nDTEND;VALUE=DATE:20280101\r\nDTSTAMP:20260308T083859Z\r\nUID:20271231_4tols0478gtm77f5knfc48hgkk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280103\r\nDTEND;VALUE=DATE:20280104\r\nDTSTAMP:20260308T083859Z\r\nUID:20280103_4eq832lflfmstmqnj3vcli9b04@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Day off for New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280807\r\nDTEND;VALUE=DATE:20280808\r\nDTSTAMP:20260308T083859Z\r\nUID:20280807_m7q65o8nad8r75kkun2ihk0cdo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290409\r\nDTEND;VALUE=DATE:20290410\r\nDTSTAMP:20260308T083859Z\r\nUID:20290409_thjsl5s2rc20r3q7shlie0pp9c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290806\r\nDTEND;VALUE=DATE:20290807\r\nDTSTAMP:20260308T083859Z\r\nUID:20290806_4cpmlh4ub3a9bsv3iactch18b4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291225\r\nDTEND;VALUE=DATE:20291226\r\nDTSTAMP:20260308T083859Z\r\nUID:20291225_aol84pu6sdp2q51g22u88q5epg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124046Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124046Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211107\r\nDTEND;VALUE=DATE:20211108\r\nDTSTAMP:20260308T083859Z\r\nUID:20211107_1b11ntl7rkp1ri8i9dn5na571c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211225\r\nDTEND;VALUE=DATE:20211226\r\nDTSTAMP:20260308T083859Z\r\nUID:20211225_1vfoldpv4dnt829fooph17hp94@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220214\r\nDTEND;VALUE=DATE:20220215\r\nDTSTAMP:20260308T083859Z\r\nUID:20220214_l0vp41babatiklt29818a8v0nc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220523\r\nDTEND;VALUE=DATE:20220524\r\nDTSTAMP:20260308T083859Z\r\nUID:20220523_b5fuqj709e4nbv0ec24ji61m4k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220905\r\nDTEND;VALUE=DATE:20220906\r\nDTSTAMP:20260308T083859Z\r\nUID:20220905_j9ijfrn7dad85sci24j5eb2kmc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221211\r\nDTEND;VALUE=DATE:20221212\r\nDTSTAMP:20260308T083859Z\r\nUID:20221211_n82dsb515515l9h3hdratbag74@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231211\r\nDTEND;VALUE=DATE:20231212\r\nDTSTAMP:20260308T083859Z\r\nUID:20231211_jlrnt0023fch209cmeorjr0cd0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250804\r\nDTEND;VALUE=DATE:20250805\r\nDTSTAMP:20260308T083859Z\r\nUID:20250804_rckooi07mlrjgnlss6aurs87pc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260518\r\nDTEND;VALUE=DATE:20260519\r\nDTSTAMP:20260308T083859Z\r\nUID:20260518_7iht1ktjbmmdui6r3oe3auci4c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270802\r\nDTEND;VALUE=DATE:20270803\r\nDTSTAMP:20260308T083859Z\r\nUID:20270802_dqhccssqq97c5skomk42g7fab4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270906\r\nDTEND;VALUE=DATE:20270907\r\nDTSTAMP:20260308T083859Z\r\nUID:20270906_v33glhkisbu67nf79kblvdf410@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280202\r\nDTEND;VALUE=DATE:20280203\r\nDTSTAMP:20260308T083859Z\r\nUID:20280202_or5bdavfnlldhieh441parroh8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280214\r\nDTEND;VALUE=DATE:20280215\r\nDTSTAMP:20260308T083859Z\r\nUID:20280214_upvhle3l2pfqmoe1gfugk5ism8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291031\r\nDTEND;VALUE=DATE:20291101\r\nDTSTAMP:20260308T083859Z\r\nUID:20291031_n15n6rgjljhm93i76sqmiaajt4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124052Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124052Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210308\r\nDTEND;VALUE=DATE:20210309\r\nDTSTAMP:20260308T083859Z\r\nUID:20210308_49g6hl8aae1ht697jtjc7dfdt8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210701\r\nDTEND;VALUE=DATE:20210702\r\nDTSTAMP:20260308T083859Z\r\nUID:20210701_ipt8co3qrjleee42v8jgrdpmig@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210802\r\nDTEND;VALUE=DATE:20210803\r\nDTSTAMP:20260308T083859Z\r\nUID:20210802_20p8o5a11l827065k5d05b280g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230807\r\nDTEND;VALUE=DATE:20230808\r\nDTSTAMP:20260308T083859Z\r\nUID:20230807_v2ugem104ni6dbt0r4kkvasv4o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241211\r\nDTEND;VALUE=DATE:20241212\r\nDTSTAMP:20260308T083859Z\r\nUID:20241211_eb0ottvdrel1skji4hnhurckp4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270701\r\nDTEND;VALUE=DATE:20270702\r\nDTSTAMP:20260308T083859Z\r\nUID:20270701_ta5jn7o6r00evm665t83n0n1qs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270802\r\nDTEND;VALUE=DATE:20270803\r\nDTSTAMP:20260308T083859Z\r\nUID:20270802_suepbmeiv5sgoq9t4hk91d0ipk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280312\r\nDTEND;VALUE=DATE:20280313\r\nDTSTAMP:20260308T083859Z\r\nUID:20280312_infb8fjml3thgo6qnp3gh1u8n4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281211\r\nDTEND;VALUE=DATE:20281212\r\nDTSTAMP:20260308T083859Z\r\nUID:20281211_5gsp82qhf6snpv2pdab5acr0lk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290317\r\nDTEND;VALUE=DATE:20290318\r\nDTSTAMP:20260308T083859Z\r\nUID:20290317_2h8mna72p1jjldafee9vqoe0qk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124055Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124055Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210524\r\nDTEND;VALUE=DATE:20210525\r\nDTSTAMP:20260308T083859Z\r\nUID:20210524_bo7v7d3hot08j2os2iao4hdepc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221106\r\nDTEND;VALUE=DATE:20221107\r\nDTSTAMP:20260308T083859Z\r\nUID:20221106_naidpv53rdoni29jbcsr0e36no@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230807\r\nDTEND;VALUE=DATE:20230808\r\nDTSTAMP:20260308T083859Z\r\nUID:20230807_ui7j4e4m67cr2s3vdkoh8ttcko@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231105\r\nDTEND;VALUE=DATE:20231106\r\nDTSTAMP:20260308T083859Z\r\nUID:20231105_i9pied3hmusjh5rktaqh3l047k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231225\r\nDTEND;VALUE=DATE:20231226\r\nDTSTAMP:20260308T083859Z\r\nUID:20231225_vbk1j224mj5vor6a5u2hmj6ido@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240311\r\nDTEND;VALUE=DATE:20240312\r\nDTSTAMP:20260308T083859Z\r\nUID:20240311_p1jj4as4r0foefjnltc1codsc8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250106\r\nDTEND;VALUE=DATE:20250107\r\nDTSTAMP:20260308T083859Z\r\nUID:20250106_a7h10tk5kde5do62drhrqfa434@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251102\r\nDTEND;VALUE=DATE:20251103\r\nDTSTAMP:20260308T083859Z\r\nUID:20251102_dajqoj0muqeogvkinem4t61ppc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260317\r\nDTEND;VALUE=DATE:20260318\r\nDTSTAMP:20260308T083859Z\r\nUID:20260317_5ehjscd8dt6ublfh3oc5i335ic@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280106\r\nDTEND;VALUE=DATE:20280107\r\nDTSTAMP:20260308T083859Z\r\nUID:20280106_ek88vb7d02domvkvkkphm209oc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280406\r\nDTEND;VALUE=DATE:20280407\r\nDTSTAMP:20260308T083859Z\r\nUID:20280406_sjij02bcd2vmmlr17sbd3hqlvs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290214\r\nDTEND;VALUE=DATE:20290215\r\nDTSTAMP:20260308T083859Z\r\nUID:20290214_lb1m9o92d2hjkpc427fgdedkp8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124057Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124057Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221031\r\nDTEND;VALUE=DATE:20221101\r\nDTSTAMP:20260308T083859Z\r\nUID:20221031_n88tqsd6piu9it2vc785c29hd4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124059Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124059Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291211\r\nDTEND;VALUE=DATE:20291212\r\nDTSTAMP:20260308T083859Z\r\nUID:20291211_lu1skcnf4uem71jd1t08oda08k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240517T124059Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240517T124059Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211224\r\nDTEND;VALUE=DATE:20211225\r\nDTSTAMP:20260308T083859Z\r\nUID:20211224_tdncn1vtsiok3o7j59tb11g4s8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230621\r\nDTEND;VALUE=DATE:20230622\r\nDTSTAMP:20260308T083859Z\r\nUID:20230621_6jpt1rh5oo9hmd330pvfjpt8rg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240930\r\nDTEND;VALUE=DATE:20241001\r\nDTSTAMP:20260308T083859Z\r\nUID:20240930_p5lbe3mmojfn7f69h4gr73n5d8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241224\r\nDTEND;VALUE=DATE:20241225\r\nDTSTAMP:20260308T083859Z\r\nUID:20241224_jmiuh757cc7jdptfo92re17jc0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250317\r\nDTEND;VALUE=DATE:20250318\r\nDTSTAMP:20260308T083859Z\r\nUID:20250317_0jt0u0a1h0v9onf02gflp8rog8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250621\r\nDTEND;VALUE=DATE:20250622\r\nDTSTAMP:20260308T083859Z\r\nUID:20250621_o8lsetd0sl9ek9p3do01tpqhak@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250930\r\nDTEND;VALUE=DATE:20251001\r\nDTSTAMP:20260308T083859Z\r\nUID:20250930_sn48f6jui14k0lcvgpvp4k01r0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260621\r\nDTEND;VALUE=DATE:20260622\r\nDTSTAMP:20260308T083859Z\r\nUID:20260621_jkd2f1htlffq98d09lo6ku8ei8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261224\r\nDTEND;VALUE=DATE:20261225\r\nDTSTAMP:20260308T083859Z\r\nUID:20261224_r4vml2rbf2n0prn45jnakduq7s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271224\r\nDTEND;VALUE=DATE:20271225\r\nDTSTAMP:20260308T083859Z\r\nUID:20271224_hboaenpat1q7oec903qm06hdn8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280621\r\nDTEND;VALUE=DATE:20280622\r\nDTSTAMP:20260308T083859Z\r\nUID:20280621_oqhgm9eo7fqhocgp3ador6bqjs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280930\r\nDTEND;VALUE=DATE:20281001\r\nDTSTAMP:20260308T083859Z\r\nUID:20280930_j0svhblqhp8631m32alo0th9u4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291224\r\nDTEND;VALUE=DATE:20291225\r\nDTSTAMP:20260308T083859Z\r\nUID:20291224_k2uk7iu5pedhmcleqedeokbul4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191110Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191110Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210621\r\nDTEND;VALUE=DATE:20210622\r\nDTSTAMP:20260308T083859Z\r\nUID:20210621_nfl707csepkrqtucod9hqf3j2c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220621\r\nDTEND;VALUE=DATE:20220622\r\nDTSTAMP:20260308T083859Z\r\nUID:20220621_bqhdmo9l5pkaf1p424htdb80sc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220919\r\nDTEND;VALUE=DATE:20220920\r\nDTSTAMP:20260308T083859Z\r\nUID:20220919_56m55pvq5bicgejtmfi2ce16n4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday in Prince Edward Island\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Queen Elizabeth II's Funeral Day (Prince Edward Island)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220930\r\nDTEND;VALUE=DATE:20221001\r\nDTSTAMP:20260308T083859Z\r\nUID:20220930_4o713imcm897k1kj6pkbaasqtk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221224\r\nDTEND;VALUE=DATE:20221225\r\nDTSTAMP:20260308T083859Z\r\nUID:20221224_t8gfeo533n36nifg7f6nko1b6s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230701\r\nDTEND;VALUE=DATE:20230702\r\nDTSTAMP:20260308T083859Z\r\nUID:20230701_16jvfep9mo6nbtruuinboc5jb4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230930\r\nDTEND;VALUE=DATE:20231001\r\nDTSTAMP:20260308T083859Z\r\nUID:20230930_ivo8k2qbdtbippm52udpd52ess@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240621\r\nDTEND;VALUE=DATE:20240622\r\nDTSTAMP:20260308T083859Z\r\nUID:20240621_1iq9npa58cpm1bg7q34esp5j2c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251224\r\nDTEND;VALUE=DATE:20251225\r\nDTSTAMP:20260308T083859Z\r\nUID:20251224_t1jsmsod61rssir1oill5s4ae8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260930\r\nDTEND;VALUE=DATE:20261001\r\nDTSTAMP:20260308T083859Z\r\nUID:20260930_nb2ln1g61e33a7pakq8f11iosc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270621\r\nDTEND;VALUE=DATE:20270622\r\nDTSTAMP:20260308T083859Z\r\nUID:20270621_bh2l565urg62en951os2b9pgnk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270930\r\nDTEND;VALUE=DATE:20271001\r\nDTSTAMP:20260308T083859Z\r\nUID:20270930_1e89n79db8slc4d4sqb7e6uvig@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280701\r\nDTEND;VALUE=DATE:20280702\r\nDTSTAMP:20260308T083859Z\r\nUID:20280701_b333tsd3igi88qld2jtlhi5io0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290621\r\nDTEND;VALUE=DATE:20290622\r\nDTSTAMP:20260308T083859Z\r\nUID:20290621_3es2ju0l90vfh85juld4pm6a3k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290701\r\nDTEND;VALUE=DATE:20290702\r\nDTSTAMP:20260308T083859Z\r\nUID:20290701_9k0kesqkeeq78o4n87flbe5ddk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290702\r\nDTEND;VALUE=DATE:20290703\r\nDTSTAMP:20260308T083859Z\r\nUID:20290702_f8ou0g1pfcto7li3p14nhrf790@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Day off for Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290930\r\nDTEND;VALUE=DATE:20291001\r\nDTSTAMP:20260308T083859Z\r\nUID:20290930_tv9o6h6mcktfncdr9ralccthn0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240828T191117Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240828T191117Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300101\r\nDTEND;VALUE=DATE:20300102\r\nDTSTAMP:20260308T083859Z\r\nUID:20300101_hp7i3immkkfl2s10fdt95ci48k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300106\r\nDTEND;VALUE=DATE:20300107\r\nDTSTAMP:20260308T083859Z\r\nUID:20300106_rhtctgoupgafrqmq6he1tb363g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300202\r\nDTEND;VALUE=DATE:20300203\r\nDTSTAMP:20260308T083859Z\r\nUID:20300202_ti7tmog0pjflrlr0a1iiie7l5k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300214\r\nDTEND;VALUE=DATE:20300215\r\nDTSTAMP:20260308T083859Z\r\nUID:20300214_h63lgha6remr85e6gcie5jkuf0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300310\r\nDTEND;VALUE=DATE:20300311\r\nDTSTAMP:20260308T083859Z\r\nUID:20300310_flj566j1prh6po4jq2h2uvcfbo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300311\r\nDTEND;VALUE=DATE:20300312\r\nDTSTAMP:20260308T083859Z\r\nUID:20300311_bimhaoc6lpt1jjd5vj12k1dfh4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300317\r\nDTEND;VALUE=DATE:20300318\r\nDTSTAMP:20260308T083859Z\r\nUID:20300317_5qodgm8efc75ra5bo1k8ls1r24@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300406\r\nDTEND;VALUE=DATE:20300407\r\nDTSTAMP:20260308T083859Z\r\nUID:20300406_58l3jo94j3ec38tcc89f0udmr4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300409\r\nDTEND;VALUE=DATE:20300410\r\nDTSTAMP:20260308T083859Z\r\nUID:20300409_a3vr6jclo8ualm95k16msl7488@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300520\r\nDTEND;VALUE=DATE:20300521\r\nDTSTAMP:20260308T083859Z\r\nUID:20300520_67o8pu1em28d4g59oblegir5p0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300621\r\nDTEND;VALUE=DATE:20300622\r\nDTSTAMP:20260308T083859Z\r\nUID:20300621_3go49422fc2kvbp7gncvjnh1v8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300701\r\nDTEND;VALUE=DATE:20300702\r\nDTSTAMP:20260308T083859Z\r\nUID:20300701_jns5ga0v0mt9ik5t0tis2q4bck@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300805\r\nDTEND;VALUE=DATE:20300806\r\nDTSTAMP:20260308T083859Z\r\nUID:20300805_hcs457k4s4gjimg3p2ad7toedk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300805\r\nDTEND;VALUE=DATE:20300806\r\nDTSTAMP:20260308T083859Z\r\nUID:20300805_tl480j7msus1pu5u139gimsspc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300902\r\nDTEND;VALUE=DATE:20300903\r\nDTSTAMP:20260308T083859Z\r\nUID:20300902_t3j6h8htm5gp656042cbqbkdk4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300930\r\nDTEND;VALUE=DATE:20301001\r\nDTSTAMP:20260308T083859Z\r\nUID:20300930_hgur6k34l6k20uc8f7h4ljtdv0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301031\r\nDTEND;VALUE=DATE:20301101\r\nDTSTAMP:20260308T083859Z\r\nUID:20301031_dbrcrvbfd7f8286u7ho5mivr9k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301103\r\nDTEND;VALUE=DATE:20301104\r\nDTSTAMP:20260308T083859Z\r\nUID:20301103_293lkmgccj75j61721a98nuu8s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301211\r\nDTEND;VALUE=DATE:20301212\r\nDTSTAMP:20260308T083859Z\r\nUID:20301211_bcpi7sdu90rtmusjdkkjq4od0s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301224\r\nDTEND;VALUE=DATE:20301225\r\nDTSTAMP:20260308T083859Z\r\nUID:20301224_8cqha6tnfmdkaa8oovi7maoick@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301225\r\nDTEND;VALUE=DATE:20301226\r\nDTSTAMP:20260308T083859Z\r\nUID:20301225_buvle1s0a0hjsonemqoduqsjqg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301231\r\nDTEND;VALUE=DATE:20310101\r\nDTSTAMP:20260308T083859Z\r\nUID:20301231_6ig1r3s043gdvc6o9f967m9rqo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250101T144302Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250101T144302Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211011\r\nDTEND;VALUE=DATE:20211012\r\nDTSTAMP:20260308T083859Z\r\nUID:20211011_f044da65696lm3fp30rovaonlc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221010\r\nDTEND;VALUE=DATE:20221011\r\nDTSTAMP:20260308T083859Z\r\nUID:20221010_fp5tnrcq2a1pojp0g4muu9tg7g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231009\r\nDTEND;VALUE=DATE:20231010\r\nDTSTAMP:20260308T083859Z\r\nUID:20231009_f85bheich8vdr4albd53vhe9k0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241014\r\nDTEND;VALUE=DATE:20241015\r\nDTSTAMP:20260308T083859Z\r\nUID:20241014_78c1biq0g06ust7dts9c5s2dfk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251013\r\nDTEND;VALUE=DATE:20251014\r\nDTSTAMP:20260308T083859Z\r\nUID:20251013_7dkb0snd7jf8n6dk7vlsncq3ak@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261012\r\nDTEND;VALUE=DATE:20261013\r\nDTSTAMP:20260308T083859Z\r\nUID:20261012_sqg1v6orfp2d2dcqe9mkg2hpms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271011\r\nDTEND;VALUE=DATE:20271012\r\nDTSTAMP:20260308T083859Z\r\nUID:20271011_tl9rib0ttt086bvi61kbif5nfo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281009\r\nDTEND;VALUE=DATE:20281010\r\nDTSTAMP:20260308T083859Z\r\nUID:20281009_pejveeecparhu44r53qm4s03ns@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291008\r\nDTEND;VALUE=DATE:20291009\r\nDTSTAMP:20260308T083859Z\r\nUID:20291008_rtvvi049vmmvc2dijih4lprock@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301014\r\nDTEND;VALUE=DATE:20301015\r\nDTSTAMP:20260308T083859Z\r\nUID:20301014_gtkpk436v7efms1gp6mi8f8f4o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250218T142426Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250218T142426Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210215\r\nDTEND;VALUE=DATE:20210216\r\nDTSTAMP:20260308T083859Z\r\nUID:20210215_3fglbberpvnd9r7v4e23jenp4g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210509\r\nDTEND;VALUE=DATE:20210510\r\nDTSTAMP:20260308T083859Z\r\nUID:20210509_1k33104lrlq9oodn5vtgm6ckb8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210620\r\nDTEND;VALUE=DATE:20210621\r\nDTSTAMP:20260308T083859Z\r\nUID:20210620_1hbaquth5m6ukeabcicfi8ueds@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220221\r\nDTEND;VALUE=DATE:20220222\r\nDTSTAMP:20260308T083859Z\r\nUID:20220221_11go4fqt0hoc6h3fv5lrfnbn00@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220619\r\nDTEND;VALUE=DATE:20220620\r\nDTSTAMP:20260308T083859Z\r\nUID:20220619_vquvodje576vj34dg6rkha1os8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230220\r\nDTEND;VALUE=DATE:20230221\r\nDTSTAMP:20260308T083859Z\r\nUID:20230220_mk38ukmuratc5nme8ns0iu5g4o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230514\r\nDTEND;VALUE=DATE:20230515\r\nDTSTAMP:20260308T083859Z\r\nUID:20230514_q3mr4bubp1vhni9ljrmv8ntnbc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230618\r\nDTEND;VALUE=DATE:20230619\r\nDTSTAMP:20260308T083859Z\r\nUID:20230618_oo7t5dgio64mv3ha0ss639jr9s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240219\r\nDTEND;VALUE=DATE:20240220\r\nDTSTAMP:20260308T083859Z\r\nUID:20240219_76dqcnco7uk8bek09l32c7gaek@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240512\r\nDTEND;VALUE=DATE:20240513\r\nDTSTAMP:20260308T083859Z\r\nUID:20240512_1u973qpkio9lhqqdase0jroh08@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250217\r\nDTEND;VALUE=DATE:20250218\r\nDTSTAMP:20260308T083859Z\r\nUID:20250217_nph1o2or64tepigec7qp00qffo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250511\r\nDTEND;VALUE=DATE:20250512\r\nDTSTAMP:20260308T083859Z\r\nUID:20250511_abdauo43k0o34fg5lc3i7i6fg8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250615\r\nDTEND;VALUE=DATE:20250616\r\nDTSTAMP:20260308T083859Z\r\nUID:20250615_f0th0r7q1rkrt9bb1f39ehnasc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260216\r\nDTEND;VALUE=DATE:20260217\r\nDTSTAMP:20260308T083859Z\r\nUID:20260216_6g1hmsj1b9v4lncb95cvri0jeg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260510\r\nDTEND;VALUE=DATE:20260511\r\nDTSTAMP:20260308T083859Z\r\nUID:20260510_4jmjl9uuddpcjttap11gitl124@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260621\r\nDTEND;VALUE=DATE:20260622\r\nDTSTAMP:20260308T083859Z\r\nUID:20260621_8os8l2hqmj6kflda369ivdj3uc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270215\r\nDTEND;VALUE=DATE:20270216\r\nDTSTAMP:20260308T083859Z\r\nUID:20270215_tj8n32tc63i09bq5e00m3j0pi0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270509\r\nDTEND;VALUE=DATE:20270510\r\nDTSTAMP:20260308T083859Z\r\nUID:20270509_eu65fdlse9j97mos4i47dod7h4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270620\r\nDTEND;VALUE=DATE:20270621\r\nDTSTAMP:20260308T083859Z\r\nUID:20270620_am5o3qej2rvo4q5d30adsroa98@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280221\r\nDTEND;VALUE=DATE:20280222\r\nDTSTAMP:20260308T083859Z\r\nUID:20280221_m3tqno9qi2m4cd5pchms5gp3hc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280514\r\nDTEND;VALUE=DATE:20280515\r\nDTSTAMP:20260308T083859Z\r\nUID:20280514_u6ib023m8rs9q5uack9he462nc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280618\r\nDTEND;VALUE=DATE:20280619\r\nDTSTAMP:20260308T083859Z\r\nUID:20280618_1sjh87lf58o6frie7q7f23i2ms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290219\r\nDTEND;VALUE=DATE:20290220\r\nDTSTAMP:20260308T083859Z\r\nUID:20290219_050natalg5r3bak2qjflei9278@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290617\r\nDTEND;VALUE=DATE:20290618\r\nDTSTAMP:20260308T083859Z\r\nUID:20290617_270sfn7hhi0e6ek9ppg1h9perk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300218\r\nDTEND;VALUE=DATE:20300219\r\nDTSTAMP:20260308T083859Z\r\nUID:20300218_0h6pe1d0ujsemqm6k8qhc0uu2k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300512\r\nDTEND;VALUE=DATE:20300513\r\nDTSTAMP:20260308T083859Z\r\nUID:20300512_v8skjsdei6830424kpmia9lvac@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144031Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144031Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220508\r\nDTEND;VALUE=DATE:20220509\r\nDTSTAMP:20260308T083859Z\r\nUID:20220508_6hd22ua71kb0h0v34j1iqliq4c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240616\r\nDTEND;VALUE=DATE:20240617\r\nDTSTAMP:20260308T083859Z\r\nUID:20240616_u1l5oomd0mqmd0lod3mfj1c63g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290513\r\nDTEND;VALUE=DATE:20290514\r\nDTSTAMP:20260308T083859Z\r\nUID:20290513_kee3och22d70njabsqkeut9dlc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300616\r\nDTEND;VALUE=DATE:20300617\r\nDTSTAMP:20260308T083859Z\r\nUID:20300616_l205ontqarotvn5i29p88kqt3k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250717T144034Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250717T144034Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211111\r\nDTEND;VALUE=DATE:20211112\r\nDTSTAMP:20260308T083859Z\r\nUID:20211111_4av9f8rast9cs0vglilgd04fo4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221111\r\nDTEND;VALUE=DATE:20221112\r\nDTSTAMP:20260308T083859Z\r\nUID:20221111_51bq73tq1nsdd2md5i10bo1p2k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231111\r\nDTEND;VALUE=DATE:20231112\r\nDTSTAMP:20260308T083859Z\r\nUID:20231111_untl53hov2g2ff4bk3bjvqt3dg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241111\r\nDTEND;VALUE=DATE:20241112\r\nDTSTAMP:20260308T083859Z\r\nUID:20241111_k6f8bbd5kbbfnk1ud0618ankl4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251111\r\nDTEND;VALUE=DATE:20251112\r\nDTSTAMP:20260308T083859Z\r\nUID:20251111_5pfvbk4qf7shd1chutn2t61upk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261111\r\nDTEND;VALUE=DATE:20261112\r\nDTSTAMP:20260308T083859Z\r\nUID:20261111_ti5gmd9vnln0ine4k7fi593ge0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271111\r\nDTEND;VALUE=DATE:20271112\r\nDTSTAMP:20260308T083859Z\r\nUID:20271111_0tqqs5ngm8sj64rjsseoo5h7to@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281111\r\nDTEND;VALUE=DATE:20281112\r\nDTSTAMP:20260308T083859Z\r\nUID:20281111_nle59l8vmi5gvc43g1g0i28gr8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291111\r\nDTEND;VALUE=DATE:20291112\r\nDTSTAMP:20260308T083859Z\r\nUID:20291111_lp8ccfouqjm6uef6n08g19nm2c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291112\r\nDTEND;VALUE=DATE:20291113\r\nDTSTAMP:20260308T083859Z\r\nUID:20291112_p25ju9894pbc4lp6du99g9pq90@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day observed (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301111\r\nDTEND;VALUE=DATE:20301112\r\nDTSTAMP:20260308T083859Z\r\nUID:20301111_8doqqa15p3jm2fal2bbfuuh3c0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250823T090612Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250823T090612Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230410\r\nDTEND;VALUE=DATE:20230411\r\nDTSTAMP:20260308T083859Z\r\nUID:20230410_dt2ul64vvhofjbus4s5cvpr584@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091529Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091529Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241226\r\nDTEND;VALUE=DATE:20241227\r\nDTSTAMP:20260308T083859Z\r\nUID:20241226_tsnc6v7p4jdu5ukqpk2e3n59bg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091529Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091529Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260406\r\nDTEND;VALUE=DATE:20260407\r\nDTSTAMP:20260308T083859Z\r\nUID:20260406_d92am3c40i5h334aliivsco2s4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091529Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091529Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280416\r\nDTEND;VALUE=DATE:20280417\r\nDTSTAMP:20260308T083859Z\r\nUID:20280416_276ff4tetnkqjgnkmjqf9m2c70@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091529Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091529Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280417\r\nDTEND;VALUE=DATE:20280418\r\nDTSTAMP:20260308T083859Z\r\nUID:20280417_cels58kov80d7se00siu5p6jq4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091529Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091529Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281226\r\nDTEND;VALUE=DATE:20281227\r\nDTSTAMP:20260308T083859Z\r\nUID:20281226_eu2hhdlol673vearjkf9rp0ivg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091529Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091529Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210402\r\nDTEND;VALUE=DATE:20210403\r\nDTSTAMP:20260308T083859Z\r\nUID:20210402_5oeq0kao70epr88re2bsd0dkec@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210404\r\nDTEND;VALUE=DATE:20210405\r\nDTSTAMP:20260308T083859Z\r\nUID:20210404_8787ugiqem3khnbb778rg1kimg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210405\r\nDTEND;VALUE=DATE:20210406\r\nDTSTAMP:20260308T083859Z\r\nUID:20210405_nce3i2cp8ooakv472u9bsq8ddo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211226\r\nDTEND;VALUE=DATE:20211227\r\nDTSTAMP:20260308T083859Z\r\nUID:20211226_t7on6qdrhb1keoh66m5e9qkqv4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220415\r\nDTEND;VALUE=DATE:20220416\r\nDTSTAMP:20260308T083859Z\r\nUID:20220415_62qn8u9j0ccd8ljo27c4k6ob20@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220417\r\nDTEND;VALUE=DATE:20220418\r\nDTSTAMP:20260308T083859Z\r\nUID:20220417_ptjmi4jt7pv106kjjmm5rjqqbc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220418\r\nDTEND;VALUE=DATE:20220419\r\nDTSTAMP:20260308T083859Z\r\nUID:20220418_kupau9lcs78vub19ul80p0bbvs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221226\r\nDTEND;VALUE=DATE:20221227\r\nDTSTAMP:20260308T083859Z\r\nUID:20221226_6tc71vgggt0612ngp94plomn8o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230407\r\nDTEND;VALUE=DATE:20230408\r\nDTSTAMP:20260308T083859Z\r\nUID:20230407_q06fm97rm7uksjhrqdbp59hl1o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230409\r\nDTEND;VALUE=DATE:20230410\r\nDTSTAMP:20260308T083859Z\r\nUID:20230409_v4omeerupkbd6o15buu5ne8bu8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231226\r\nDTEND;VALUE=DATE:20231227\r\nDTSTAMP:20260308T083859Z\r\nUID:20231226_dimigi1aab8i6f8f65r6ercnjo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240329\r\nDTEND;VALUE=DATE:20240330\r\nDTSTAMP:20260308T083859Z\r\nUID:20240329_51sgsq9srsmkjvrd3l37dat37o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240331\r\nDTEND;VALUE=DATE:20240401\r\nDTSTAMP:20260308T083859Z\r\nUID:20240331_at255dg4v2r11tctaqvtmgsock@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240401\r\nDTEND;VALUE=DATE:20240402\r\nDTSTAMP:20260308T083859Z\r\nUID:20240401_nsbf1tv5kfca49liovpp7shsq0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250418\r\nDTEND;VALUE=DATE:20250419\r\nDTSTAMP:20260308T083859Z\r\nUID:20250418_sf0trm0ipgk6keas0p9lt2r170@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250420\r\nDTEND;VALUE=DATE:20250421\r\nDTSTAMP:20260308T083859Z\r\nUID:20250420_lod3dn3un66d5b9amugbohn26g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250421\r\nDTEND;VALUE=DATE:20250422\r\nDTSTAMP:20260308T083859Z\r\nUID:20250421_nh9201t5oqgr4iqqglsghrm698@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251226\r\nDTEND;VALUE=DATE:20251227\r\nDTSTAMP:20260308T083859Z\r\nUID:20251226_38napdvhtk16gtud75gcj06ojo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260403\r\nDTEND;VALUE=DATE:20260404\r\nDTSTAMP:20260308T083859Z\r\nUID:20260403_bl11l2edvo2bevetf7t7rkk978@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260405\r\nDTEND;VALUE=DATE:20260406\r\nDTSTAMP:20260308T083859Z\r\nUID:20260405_d9gn7th4jp5s8h5tkflfvppvcc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261226\r\nDTEND;VALUE=DATE:20261227\r\nDTSTAMP:20260308T083859Z\r\nUID:20261226_5s58k40u4g3ndn24900a8m4s5g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270326\r\nDTEND;VALUE=DATE:20270327\r\nDTSTAMP:20260308T083859Z\r\nUID:20270326_bgp118mipdcu8und74vut7b2ms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270328\r\nDTEND;VALUE=DATE:20270329\r\nDTSTAMP:20260308T083859Z\r\nUID:20270328_r2151rtm9htaktnd451mase4nk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270329\r\nDTEND;VALUE=DATE:20270330\r\nDTSTAMP:20260308T083859Z\r\nUID:20270329_haa4utq14t2jlh3m4uv64lkr90@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271226\r\nDTEND;VALUE=DATE:20271227\r\nDTSTAMP:20260308T083859Z\r\nUID:20271226_bgm7efful54tlg2pq23dihc0jk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280414\r\nDTEND;VALUE=DATE:20280415\r\nDTSTAMP:20260308T083859Z\r\nUID:20280414_fspgl8c13v50ukomlhfrf019sc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290330\r\nDTEND;VALUE=DATE:20290331\r\nDTSTAMP:20260308T083859Z\r\nUID:20290330_7n85obav41bf7nj2h7n5mjhack@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290401\r\nDTEND;VALUE=DATE:20290402\r\nDTSTAMP:20260308T083859Z\r\nUID:20290401_n8565o6r06ee0p33l7n9d1h9gk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290402\r\nDTEND;VALUE=DATE:20290403\r\nDTSTAMP:20260308T083859Z\r\nUID:20290402_8fcicfkahcvlq9jdjvk8lk6iec@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291226\r\nDTEND;VALUE=DATE:20291227\r\nDTSTAMP:20260308T083859Z\r\nUID:20291226_mot861tpi4p4u6smmq84mh0dvc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300419\r\nDTEND;VALUE=DATE:20300420\r\nDTSTAMP:20260308T083859Z\r\nUID:20300419_9t46osu1bf7c1im44j082q39to@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300421\r\nDTEND;VALUE=DATE:20300422\r\nDTSTAMP:20260308T083859Z\r\nUID:20300421_ahgdiic5mjpq1m2kaosrk8cs84@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300422\r\nDTEND;VALUE=DATE:20300423\r\nDTSTAMP:20260308T083859Z\r\nUID:20300422_fc1ui5lpbat032l1e9e514tjlg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301226\r\nDTEND;VALUE=DATE:20301227\r\nDTSTAMP:20260308T083859Z\r\nUID:20301226_jl32931cjsicvg8gqrfvkd4tvg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250923T091537Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20250923T091537Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310101\r\nDTEND;VALUE=DATE:20310102\r\nDTSTAMP:20260308T083859Z\r\nUID:20310101_nial6082ouq6mum66mftq5irrs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310106\r\nDTEND;VALUE=DATE:20310107\r\nDTSTAMP:20260308T083859Z\r\nUID:20310106_u6d18eab53jv1gvvrimgnc00e8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Epiphany\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310202\r\nDTEND;VALUE=DATE:20310203\r\nDTSTAMP:20260308T083859Z\r\nUID:20310202_nk1nk1p5ju8b0e3864f21p19ds@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Groundhog Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310214\r\nDTEND;VALUE=DATE:20310215\r\nDTSTAMP:20260308T083859Z\r\nUID:20310214_lahfcv8g1mrt5143gue7a1ol94@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310217\r\nDTEND;VALUE=DATE:20310218\r\nDTSTAMP:20260308T083859Z\r\nUID:20310217_lpatvbqolmtt01t2rg7uhme0pg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, New Brunswick\\, \r\n Ontario\\, Saskatchewan\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Family Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310309\r\nDTEND;VALUE=DATE:20310310\r\nDTSTAMP:20260308T083859Z\r\nUID:20310309_94dbldp2fu130muanettv2bcb4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310310\r\nDTEND;VALUE=DATE:20310311\r\nDTSTAMP:20260308T083859Z\r\nUID:20310310_vt0bn43ogp5rkkdsogvljvs3rg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Commonwealth Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310317\r\nDTEND;VALUE=DATE:20310318\r\nDTSTAMP:20260308T083859Z\r\nUID:20310317_3k1bnhjdkjf54iv7q3u6lt65cs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310406\r\nDTEND;VALUE=DATE:20310407\r\nDTSTAMP:20260308T083859Z\r\nUID:20310406_r8q16ibicpckptma0ptq5f436k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tartan Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310409\r\nDTEND;VALUE=DATE:20310410\r\nDTSTAMP:20260308T083859Z\r\nUID:20310409_70a9pm4mdcf7ao209h62mr09ms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Vimy Ridge Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310411\r\nDTEND;VALUE=DATE:20310412\r\nDTSTAMP:20260308T083859Z\r\nUID:20310411_b40vhqem3789vq654ntcn6cgj4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Good Friday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310413\r\nDTEND;VALUE=DATE:20310414\r\nDTSTAMP:20260308T083859Z\r\nUID:20310413_4svfujfu04qrm7195472d4rii8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310414\r\nDTEND;VALUE=DATE:20310415\r\nDTSTAMP:20260308T083859Z\r\nUID:20310414_apcv4n72pv85jntv79o99td6hg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Northwest Territori\r\n es\\, Nunavut\\, Quebec\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310511\r\nDTEND;VALUE=DATE:20310512\r\nDTSTAMP:20260308T083859Z\r\nUID:20310511_8a0q7j9kmki5ovhnvd2golmhv0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310519\r\nDTEND;VALUE=DATE:20310520\r\nDTSTAMP:20260308T083859Z\r\nUID:20310519_3jqmsbdo2u95ushnofeshsqkos@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nunavut\\, On\r\n tario\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Victoria Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310615\r\nDTEND;VALUE=DATE:20310616\r\nDTSTAMP:20260308T083859Z\r\nUID:20310615_cu4gmi7vctj3ljasobi4febl14@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father’s Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310621\r\nDTEND;VALUE=DATE:20310622\r\nDTSTAMP:20260308T083859Z\r\nUID:20310621_a8at32ec6beetfjshhp14md2j4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Indigenous Peoples Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310701\r\nDTEND;VALUE=DATE:20310702\r\nDTSTAMP:20260308T083859Z\r\nUID:20310701_sec741k68eq9o8sqv8a0ood3rg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Canada Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310804\r\nDTEND;VALUE=DATE:20310805\r\nDTSTAMP:20260308T083859Z\r\nUID:20310804_d4l0cgmh8mrcd4612qqeceipp8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance in Alberta\\nTo hide observances\\, go to Google Calen\r\n dar Settings > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Heritage Day (Alberta)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310804\r\nDTEND;VALUE=DATE:20310805\r\nDTSTAMP:20260308T083859Z\r\nUID:20310804_pc8itbjpcvqf1qh1isc4d0cjc0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Northwest Territories\\, Nunavut\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Civic/Provincial Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310901\r\nDTEND;VALUE=DATE:20310902\r\nDTSTAMP:20260308T083859Z\r\nUID:20310901_11td7mt94j6jn1msk1e8e114o8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labour Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310930\r\nDTEND;VALUE=DATE:20311001\r\nDTSTAMP:20260308T083859Z\r\nUID:20310930_3fkvvvc7md0uq20b2sfqeqvfek@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day for Truth and Reconciliation\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311013\r\nDTEND;VALUE=DATE:20311014\r\nDTSTAMP:20260308T083859Z\r\nUID:20311013_mm412a6ja9q1pjj0b2hjqts7ho@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311031\r\nDTEND;VALUE=DATE:20311101\r\nDTSTAMP:20260308T083859Z\r\nUID:20311031_70h2t3n72l0f3v2l8vfh6610uo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311102\r\nDTEND;VALUE=DATE:20311103\r\nDTSTAMP:20260308T083859Z\r\nUID:20311102_6j0gmp0gjjt3mtm02qf751k00k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311111\r\nDTEND;VALUE=DATE:20311112\r\nDTSTAMP:20260308T083859Z\r\nUID:20311111_qta279dutp6h469758ge8f17kc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, British Columbia\\, Manitoba\\, New B\r\n runswick\\, Newfoundland and Labrador\\, Northwest Territories\\, Nova Scotia\\\r\n , Nunavut\\, Ontario\\, Prince Edward Island\\, Quebec\\, Saskatchewan\\, Yukon\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Remembrance Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311211\r\nDTEND;VALUE=DATE:20311212\r\nDTSTAMP:20260308T083859Z\r\nUID:20311211_1k37967kokbv49746clcjbjkrg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Anniversary of the Statute of Westminster\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311224\r\nDTEND;VALUE=DATE:20311225\r\nDTSTAMP:20260308T083859Z\r\nUID:20311224_fu7n4eb0uon2mvg1baa3i5gb70@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311225\r\nDTEND;VALUE=DATE:20311226\r\nDTSTAMP:20260308T083859Z\r\nUID:20311225_odk4o8v0v8a4i7v8nrmcuke5pg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311226\r\nDTEND;VALUE=DATE:20311227\r\nDTSTAMP:20260308T083859Z\r\nUID:20311226_gjifkc1siq0vgpkjttvl4i7smo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Public holiday in Alberta\\, New Brunswick\\, Newfoundland and La\r\n brador\\, Northwest Territories\\, Nova Scotia\\, Nunavut\\, Ontario\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Boxing Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311231\r\nDTEND;VALUE=DATE:20320101\r\nDTSTAMP:20260308T083859Z\r\nUID:20311231_jlrlljeu7g690oq7qql6mosaps@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260102T121129Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in Canada\r\nLAST-MODIFIED:20260102T121129Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
  },
  {
    "path": "packages/fixtures/ics/google-us-holidays.ics",
    "content": "BEGIN:VCALENDAR\r\nPRODID:-//Google Inc//Google Calendar 70.9054//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nX-WR-CALNAME:Holidays in United States\r\nX-WR-TIMEZONE:UTC\r\nX-WR-CALDESC:Holidays and Observances in United States\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210118\r\nDTEND;VALUE=DATE:20210119\r\nDTSTAMP:20260308T083859Z\r\nUID:20210118_09lrg7ebq0id94snlvledsknmc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210314\r\nDTEND;VALUE=DATE:20210315\r\nDTSTAMP:20260308T083859Z\r\nUID:20210314_eut7bu0kn9gl5458v3anfjb1hc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210614\r\nDTEND;VALUE=DATE:20210615\r\nDTSTAMP:20260308T083859Z\r\nUID:20210614_asa6ld9p46a6rgb6o2p0n9m84c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211111\r\nDTEND;VALUE=DATE:20211112\r\nDTSTAMP:20260308T083859Z\r\nUID:20211111_m86dpiahn303fets4tqac3c624@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211224\r\nDTEND;VALUE=DATE:20211225\r\nDTSTAMP:20260308T083859Z\r\nUID:20211224_92u88e0thn3kt1fmlj82200a04@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211224\r\nDTEND;VALUE=DATE:20211225\r\nDTSTAMP:20260308T083859Z\r\nUID:20211224_bptjg8jvq2gajnj4m7bdhtfq7k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220417\r\nDTEND;VALUE=DATE:20220418\r\nDTSTAMP:20260308T083859Z\r\nUID:20220417_jlsokmbibb01nfbtgl9oipn1t8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220418\r\nDTEND;VALUE=DATE:20220419\r\nDTSTAMP:20260308T083859Z\r\nUID:20220418_clveaq2fmqp95elk3vma4ifhcs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220418\r\nDTEND;VALUE=DATE:20220419\r\nDTSTAMP:20260308T083859Z\r\nUID:20220418_uqhpamv634fblrnqjno3ht8am0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220704\r\nDTEND;VALUE=DATE:20220705\r\nDTSTAMP:20260308T083859Z\r\nUID:20220704_h3f9qps31sqddh2oq1cenci09g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221111\r\nDTEND;VALUE=DATE:20221112\r\nDTSTAMP:20260308T083859Z\r\nUID:20221111_bf0ubq6785mv831i4vdqp5d67k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221224\r\nDTEND;VALUE=DATE:20221225\r\nDTSTAMP:20260308T083859Z\r\nUID:20221224_8etva17s9bls7tk7sk517er8s8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221226\r\nDTEND;VALUE=DATE:20221227\r\nDTSTAMP:20260308T083859Z\r\nUID:20221226_hbqvm27e58cp6ood36vuikqmio@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230312\r\nDTEND;VALUE=DATE:20230313\r\nDTSTAMP:20260308T083859Z\r\nUID:20230312_foe65jnk3b96l1mrim5s7qfgpo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230317\r\nDTEND;VALUE=DATE:20230318\r\nDTSTAMP:20260308T083859Z\r\nUID:20230317_bk32tb30rt7vev845gc8oh0ki4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231107\r\nDTEND;VALUE=DATE:20231108\r\nDTSTAMP:20260308T083859Z\r\nUID:20231107_dbbrpgsf56ld3r4moodh9r2uos@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231111\r\nDTEND;VALUE=DATE:20231112\r\nDTSTAMP:20260308T083859Z\r\nUID:20231111_bua0esq8j6iccqtd827mj5pdms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231231\r\nDTEND;VALUE=DATE:20240101\r\nDTSTAMP:20260308T083859Z\r\nUID:20231231_7ckim1n8v2urm4m131g0b1kjdc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240310\r\nDTEND;VALUE=DATE:20240311\r\nDTSTAMP:20260308T083859Z\r\nUID:20240310_p3tu22fsk44oeijg3k55pakn94@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240401\r\nDTEND;VALUE=DATE:20240402\r\nDTSTAMP:20260308T083859Z\r\nUID:20240401_rktgiieu5t70igomh9q0eljmqg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240704\r\nDTEND;VALUE=DATE:20240705\r\nDTSTAMP:20260308T083859Z\r\nUID:20240704_3011jmgo7ua8pd6r1lb9c66b0c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241225\r\nDTEND;VALUE=DATE:20241226\r\nDTSTAMP:20260308T083859Z\r\nUID:20241225_e1r85u7vrrenlebcvqmra75bbo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250120\r\nDTEND;VALUE=DATE:20250121\r\nDTSTAMP:20260308T083859Z\r\nUID:20250120_87ssbls92jt2nfnnm09sjquj9c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday in District of Columbia\\, Maryland\\, Virginia\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Inauguration Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250120\r\nDTEND;VALUE=DATE:20250121\r\nDTSTAMP:20260308T083859Z\r\nUID:20250120_fk34f168hostjnanbre4hctmi4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250704\r\nDTEND;VALUE=DATE:20250705\r\nDTSTAMP:20260308T083859Z\r\nUID:20250704_9eo5ol8m1gicg3dhj69hufj82g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261031\r\nDTEND;VALUE=DATE:20261101\r\nDTSTAMP:20260308T083859Z\r\nUID:20261031_jg75kt4ps505q4u01pbpictp2o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270101\r\nDTEND;VALUE=DATE:20270102\r\nDTSTAMP:20260308T083859Z\r\nUID:20270101_g38v3nhu22i6koaidmjqg665n4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270415\r\nDTEND;VALUE=DATE:20270416\r\nDTSTAMP:20260308T083859Z\r\nUID:20270415_e5n7remnckfnfebua7claa6atk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270509\r\nDTEND;VALUE=DATE:20270510\r\nDTSTAMP:20260308T083859Z\r\nUID:20270509_rrq3orpog9sh5j5b43kh8tf88k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280312\r\nDTEND;VALUE=DATE:20280313\r\nDTSTAMP:20260308T083859Z\r\nUID:20280312_ougj414t1kfugnoscrtjj3ghro@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280418\r\nDTEND;VALUE=DATE:20280419\r\nDTSTAMP:20260308T083859Z\r\nUID:20280418_9u12ecj9679eh99am7mng8784s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280904\r\nDTEND;VALUE=DATE:20280905\r\nDTSTAMP:20260308T083859Z\r\nUID:20280904_7timlg6depbi8q4g6fcjtgalas@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281105\r\nDTEND;VALUE=DATE:20281106\r\nDTSTAMP:20260308T083859Z\r\nUID:20281105_mhblqj4nuvtnmcqfdlrhebgnno@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281111\r\nDTEND;VALUE=DATE:20281112\r\nDTSTAMP:20260308T083859Z\r\nUID:20281111_nldoio4902ka29gc68uqv0uaog@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290417\r\nDTEND;VALUE=DATE:20290418\r\nDTSTAMP:20260308T083859Z\r\nUID:20290417_46ic9hvra2ene672ploa50fdd8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291225\r\nDTEND;VALUE=DATE:20291226\r\nDTSTAMP:20260308T083859Z\r\nUID:20291225_d4937tm891lgjjqoapjp02jd2s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101345Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101345Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210214\r\nDTEND;VALUE=DATE:20210215\r\nDTSTAMP:20260308T083859Z\r\nUID:20210214_vkpcfkqm8at3u1i472u2g83kt8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210404\r\nDTEND;VALUE=DATE:20210405\r\nDTSTAMP:20260308T083859Z\r\nUID:20210404_7n8b88ldfemg91e2phbmauf5r8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210704\r\nDTEND;VALUE=DATE:20210705\r\nDTSTAMP:20260308T083859Z\r\nUID:20210704_8ppug3k807srgjh1rr5h2go8ro@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211225\r\nDTEND;VALUE=DATE:20211226\r\nDTSTAMP:20260308T083859Z\r\nUID:20211225_4am3g2jjbftjtbm3qdg93805gs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220313\r\nDTEND;VALUE=DATE:20220314\r\nDTSTAMP:20260308T083859Z\r\nUID:20220313_88elv5hhk4gdcjmapspre4m76k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220530\r\nDTEND;VALUE=DATE:20220531\r\nDTSTAMP:20260308T083859Z\r\nUID:20220530_lls03ub8r57tt3avpuuv9dn0bo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220620\r\nDTEND;VALUE=DATE:20220621\r\nDTSTAMP:20260308T083859Z\r\nUID:20220620_6mltfh1vaj4lvjjvmggsc32r1o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221106\r\nDTEND;VALUE=DATE:20221107\r\nDTSTAMP:20260308T083859Z\r\nUID:20221106_07gellocln0g8fk75isld0b3mo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230214\r\nDTEND;VALUE=DATE:20230215\r\nDTSTAMP:20260308T083859Z\r\nUID:20230214_ldgnvf7q21gd9q7ae1a5bmec74@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231225\r\nDTEND;VALUE=DATE:20231226\r\nDTSTAMP:20260308T083859Z\r\nUID:20231225_4ksfec0ui6g2n34tv7932m3nmg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240317\r\nDTEND;VALUE=DATE:20240318\r\nDTSTAMP:20260308T083859Z\r\nUID:20240317_0t5uqpcdajelqig5u7is51op00@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240619\r\nDTEND;VALUE=DATE:20240620\r\nDTSTAMP:20260308T083859Z\r\nUID:20240619_qg1uo9i7llrthstt84vh12aku8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241031\r\nDTEND;VALUE=DATE:20241101\r\nDTSTAMP:20260308T083859Z\r\nUID:20241031_v9g749ml11e4obop5lp80nfbdc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241105\r\nDTEND;VALUE=DATE:20241106\r\nDTSTAMP:20260308T083859Z\r\nUID:20241105_i282b8tvktjvd654goatrtctak@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day (General Election)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241111\r\nDTEND;VALUE=DATE:20241112\r\nDTSTAMP:20260308T083859Z\r\nUID:20241111_9vu35s757ogimm7srk29mp22n4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241231\r\nDTEND;VALUE=DATE:20250101\r\nDTSTAMP:20260308T083859Z\r\nUID:20241231_qb119g1rjm37sagjbs54if58j4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250619\r\nDTEND;VALUE=DATE:20250620\r\nDTSTAMP:20260308T083859Z\r\nUID:20250619_9vg3o04lvkpbt153d22q1nssq8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251111\r\nDTEND;VALUE=DATE:20251112\r\nDTSTAMP:20260308T083859Z\r\nUID:20251111_hb29jfpg29ibc0la80vd8b7rbo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260525\r\nDTEND;VALUE=DATE:20260526\r\nDTSTAMP:20260308T083859Z\r\nUID:20260525_8a7osuvj9moeql74mrs1da4b1k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261101\r\nDTEND;VALUE=DATE:20261102\r\nDTSTAMP:20260308T083859Z\r\nUID:20261101_voardu9lrttj7tgf1qc0b9d8cg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261111\r\nDTEND;VALUE=DATE:20261112\r\nDTSTAMP:20260308T083859Z\r\nUID:20261111_74d74gec1qv5j3q0qbuc0nft40@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261126\r\nDTEND;VALUE=DATE:20261127\r\nDTSTAMP:20260308T083859Z\r\nUID:20261126_1g5us79unrs6ecmqdes63fqi30@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270314\r\nDTEND;VALUE=DATE:20270315\r\nDTSTAMP:20260308T083859Z\r\nUID:20270314_3je881f1co5iuen9i4drfr9nsc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270329\r\nDTEND;VALUE=DATE:20270330\r\nDTSTAMP:20260308T083859Z\r\nUID:20270329_q04e7hhqa4d1210mpi2kf9he8o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270619\r\nDTEND;VALUE=DATE:20270620\r\nDTSTAMP:20260308T083859Z\r\nUID:20270619_i9r0psrvfpqolls557edeqp368@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270704\r\nDTEND;VALUE=DATE:20270705\r\nDTSTAMP:20260308T083859Z\r\nUID:20270704_b9l6c6astdpntsbe9krl7ionb8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271111\r\nDTEND;VALUE=DATE:20271112\r\nDTSTAMP:20260308T083859Z\r\nUID:20271111_b1o5i4rihtc0k3ifgk3pko6tdk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271231\r\nDTEND;VALUE=DATE:20280101\r\nDTSTAMP:20260308T083859Z\r\nUID:20271231_i4pr5kk37ga1p8l02s43ehgfhk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280416\r\nDTEND;VALUE=DATE:20280417\r\nDTSTAMP:20260308T083859Z\r\nUID:20280416_qmhhfogjtck9c646dkn18b29fg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280417\r\nDTEND;VALUE=DATE:20280418\r\nDTSTAMP:20260308T083859Z\r\nUID:20280417_l3ie0hoq08l4b2p5sos5md1a28@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280514\r\nDTEND;VALUE=DATE:20280515\r\nDTSTAMP:20260308T083859Z\r\nUID:20280514_jssfdna8s0oi3i38r4hnllpgic@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280614\r\nDTEND;VALUE=DATE:20280615\r\nDTSTAMP:20260308T083859Z\r\nUID:20280614_55ssr12ufpf0qr5ou2hp119unk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290214\r\nDTEND;VALUE=DATE:20290215\r\nDTSTAMP:20260308T083859Z\r\nUID:20290214_0n22101fro2ue3bpkb8bjuakvo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290704\r\nDTEND;VALUE=DATE:20290705\r\nDTSTAMP:20260308T083859Z\r\nUID:20290704_1rnk09rdcs6oo92sb03ubi73s0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291031\r\nDTEND;VALUE=DATE:20291101\r\nDTSTAMP:20260308T083859Z\r\nUID:20291031_l1i07na5n3qlfb837o4lf6vnn8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291122\r\nDTEND;VALUE=DATE:20291123\r\nDTSTAMP:20260308T083859Z\r\nUID:20291122_4bi46004dedud7h2d06johfcto@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291224\r\nDTEND;VALUE=DATE:20291225\r\nDTSTAMP:20260308T083859Z\r\nUID:20291224_pdvctbfc3ldtlontlibs08jfqo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101347Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101347Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210101\r\nDTEND;VALUE=DATE:20210102\r\nDTSTAMP:20260308T083859Z\r\nUID:20210101_en2ou6bcagjl23of984lru6gnc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210120\r\nDTEND;VALUE=DATE:20210121\r\nDTSTAMP:20260308T083859Z\r\nUID:20210120_ng4kr5diqjjt8kuq83kc0f080c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday in District of Columbia\\, Maryland\\, Virginia\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Inauguration Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210531\r\nDTEND;VALUE=DATE:20210601\r\nDTSTAMP:20260308T083859Z\r\nUID:20210531_roj65ame26pm85k3g9mruv8lnk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210618\r\nDTEND;VALUE=DATE:20210619\r\nDTSTAMP:20260308T083859Z\r\nUID:20210618_9817cja2crsum5vo94t661otec@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210619\r\nDTEND;VALUE=DATE:20210620\r\nDTSTAMP:20260308T083859Z\r\nUID:20210619_ph5bd9j9g3uq5spavkn805fml8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210906\r\nDTEND;VALUE=DATE:20210907\r\nDTSTAMP:20260308T083859Z\r\nUID:20210906_vu665admp2hq742hhpt7oj0mgk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211125\r\nDTEND;VALUE=DATE:20211126\r\nDTSTAMP:20260308T083859Z\r\nUID:20211125_3840htk0idfd3h420esicj37i8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211231\r\nDTEND;VALUE=DATE:20220101\r\nDTSTAMP:20260308T083859Z\r\nUID:20211231_15ns17cl26lvqdfa2jqd6e1v70@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220317\r\nDTEND;VALUE=DATE:20220318\r\nDTSTAMP:20260308T083859Z\r\nUID:20220317_k62u1fmrecdppdn2vj7sb7nuos@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221124\r\nDTEND;VALUE=DATE:20221125\r\nDTSTAMP:20260308T083859Z\r\nUID:20221124_tv8upbq0db6r64sj66ah9kig9g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230418\r\nDTEND;VALUE=DATE:20230419\r\nDTSTAMP:20260308T083859Z\r\nUID:20230418_llafar908l47g4lpkj9cqdqrsg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230505\r\nDTEND;VALUE=DATE:20230506\r\nDTSTAMP:20260308T083859Z\r\nUID:20230505_5adkuannaecb0qrf6e5gsjjurc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231105\r\nDTEND;VALUE=DATE:20231106\r\nDTSTAMP:20260308T083859Z\r\nUID:20231105_r2harbnkadq7s1tfh3ojed5k48@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240505\r\nDTEND;VALUE=DATE:20240506\r\nDTSTAMP:20260308T083859Z\r\nUID:20240505_dv9k2s0i5c1465c37ffjhjbc48@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240902\r\nDTEND;VALUE=DATE:20240903\r\nDTSTAMP:20260308T083859Z\r\nUID:20240902_lt2l0n8c349ke6v4ipa1nq88v4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250309\r\nDTEND;VALUE=DATE:20250310\r\nDTSTAMP:20260308T083859Z\r\nUID:20250309_it8daheub7hk551jetoqd09h9c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250614\r\nDTEND;VALUE=DATE:20250615\r\nDTSTAMP:20260308T083859Z\r\nUID:20250614_ddlkm859j2o7q0931n10l9jnt0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251102\r\nDTEND;VALUE=DATE:20251103\r\nDTSTAMP:20260308T083859Z\r\nUID:20251102_vq9dl53420d2kcqn3qmehrn4g8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251225\r\nDTEND;VALUE=DATE:20251226\r\nDTSTAMP:20260308T083859Z\r\nUID:20251225_l5lasit4skokrc7d6bsq0s8h20@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260119\r\nDTEND;VALUE=DATE:20260120\r\nDTSTAMP:20260308T083859Z\r\nUID:20260119_o3kjmdvd64o73fbst6tsipnsq8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260317\r\nDTEND;VALUE=DATE:20260318\r\nDTSTAMP:20260308T083859Z\r\nUID:20260317_l4mvp4s6evr3tn060mm16jkrgk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260405\r\nDTEND;VALUE=DATE:20260406\r\nDTSTAMP:20260308T083859Z\r\nUID:20260405_3mu1r7pla9n32j18jktrp5eis8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260505\r\nDTEND;VALUE=DATE:20260506\r\nDTSTAMP:20260308T083859Z\r\nUID:20260505_hm1dckhe8mj1ka0asb821viv0g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260704\r\nDTEND;VALUE=DATE:20260705\r\nDTSTAMP:20260308T083859Z\r\nUID:20260704_uvohv1gi37r7f84ibel1s6tsvc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260907\r\nDTEND;VALUE=DATE:20260908\r\nDTSTAMP:20260308T083859Z\r\nUID:20260907_3iv7l7ja8ses3smgpgh5fqearo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261231\r\nDTEND;VALUE=DATE:20270101\r\nDTSTAMP:20260308T083859Z\r\nUID:20261231_0kjsbhff7mdoqg6fl40ufhqql4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270118\r\nDTEND;VALUE=DATE:20270119\r\nDTSTAMP:20260308T083859Z\r\nUID:20270118_uidgniu6vbjkrspdstmsqhleb8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270214\r\nDTEND;VALUE=DATE:20270215\r\nDTSTAMP:20260308T083859Z\r\nUID:20270214_74gpuuihq1eo3rc91b2uplpuok@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270317\r\nDTEND;VALUE=DATE:20270318\r\nDTSTAMP:20260308T083859Z\r\nUID:20270317_2oul18q063hlhatvodt5or48vs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270705\r\nDTEND;VALUE=DATE:20270706\r\nDTSTAMP:20260308T083859Z\r\nUID:20270705_16ek5afhp2nok4e0gq6nc32s14@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281107\r\nDTEND;VALUE=DATE:20281108\r\nDTSTAMP:20260308T083859Z\r\nUID:20281107_vbnl7i6o41sg2tpaucckq1puqs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day (General Election)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290101\r\nDTEND;VALUE=DATE:20290102\r\nDTSTAMP:20260308T083859Z\r\nUID:20290101_h8aq82pshlfuq3dvlhbgq2g4ac@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290317\r\nDTEND;VALUE=DATE:20290318\r\nDTSTAMP:20260308T083859Z\r\nUID:20290317_26u4bsjihf95mr2mh7qmmbrmnk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290401\r\nDTEND;VALUE=DATE:20290402\r\nDTSTAMP:20260308T083859Z\r\nUID:20290401_neeuldt8t8ka5s8a0p43kos1q8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290402\r\nDTEND;VALUE=DATE:20290403\r\nDTSTAMP:20260308T083859Z\r\nUID:20290402_7dtjr589s0e7bq3qa6fn1soqck@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291111\r\nDTEND;VALUE=DATE:20291112\r\nDTSTAMP:20260308T083859Z\r\nUID:20291111_e4v6nv6g44vv0kputan2vjetbc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101349Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101349Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210317\r\nDTEND;VALUE=DATE:20210318\r\nDTSTAMP:20260308T083859Z\r\nUID:20210317_vs6k1ujvohusu9c45roctibd7g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210509\r\nDTEND;VALUE=DATE:20210510\r\nDTSTAMP:20260308T083859Z\r\nUID:20210509_bm7qeetrgqjo0ehb42avj3fcl8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211102\r\nDTEND;VALUE=DATE:20211103\r\nDTSTAMP:20260308T083859Z\r\nUID:20211102_4u85rmib0aq6hejdeepmfbfvik@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211231\r\nDTEND;VALUE=DATE:20220101\r\nDTSTAMP:20260308T083859Z\r\nUID:20211231_cgvona4bmjn5cuic46t85cvubs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220101\r\nDTEND;VALUE=DATE:20220102\r\nDTSTAMP:20260308T083859Z\r\nUID:20220101_q1vq6nc3qrgg5k3brv1pf9nshc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220505\r\nDTEND;VALUE=DATE:20220506\r\nDTSTAMP:20260308T083859Z\r\nUID:20220505_qad4p7ppvkuc2bfru9alrjg28o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220508\r\nDTEND;VALUE=DATE:20220509\r\nDTSTAMP:20260308T083859Z\r\nUID:20220508_0np6lh50b41uc60scvc5ncab2k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220614\r\nDTEND;VALUE=DATE:20220615\r\nDTSTAMP:20260308T083859Z\r\nUID:20220614_g43t24b59sgb0d28s6h8f5vglk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220619\r\nDTEND;VALUE=DATE:20220620\r\nDTSTAMP:20260308T083859Z\r\nUID:20220619_159e6jvlgb60b64o6udbskmh64@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220905\r\nDTEND;VALUE=DATE:20220906\r\nDTSTAMP:20260308T083859Z\r\nUID:20220905_i5635c83ohf4mr8rb4ind2lth4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230116\r\nDTEND;VALUE=DATE:20230117\r\nDTSTAMP:20260308T083859Z\r\nUID:20230116_vchjt5heut5dnbjp8lhaadh4p4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230410\r\nDTEND;VALUE=DATE:20230411\r\nDTSTAMP:20260308T083859Z\r\nUID:20230410_hu1l5u2g8qb6qs96vvt0d5s378@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230704\r\nDTEND;VALUE=DATE:20230705\r\nDTSTAMP:20260308T083859Z\r\nUID:20230704_4f4s7hp5du5n9roejs1r1t56kc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231031\r\nDTEND;VALUE=DATE:20231101\r\nDTSTAMP:20260308T083859Z\r\nUID:20231031_9nvl43ovhpr5t2pkki9o4glvmk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231123\r\nDTEND;VALUE=DATE:20231124\r\nDTSTAMP:20260308T083859Z\r\nUID:20231123_m3ofn3enjgdvj2l12sra9i0ae4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231224\r\nDTEND;VALUE=DATE:20231225\r\nDTSTAMP:20260308T083859Z\r\nUID:20231224_tfbk25jei7ftqlbfniv9emu3fc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240331\r\nDTEND;VALUE=DATE:20240401\r\nDTSTAMP:20260308T083859Z\r\nUID:20240331_e9d7oufj67npdmp1qmagr478nk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240614\r\nDTEND;VALUE=DATE:20240615\r\nDTSTAMP:20260308T083859Z\r\nUID:20240614_g1hrbpnlsd4ig2jqggm5ctr7s8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241128\r\nDTEND;VALUE=DATE:20241129\r\nDTSTAMP:20260308T083859Z\r\nUID:20241128_kej2iaf7b60ak4gdk0thqpfiqk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250420\r\nDTEND;VALUE=DATE:20250421\r\nDTSTAMP:20260308T083859Z\r\nUID:20250420_cdei1ckus4np6v0i7q16222lns@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250526\r\nDTEND;VALUE=DATE:20250527\r\nDTSTAMP:20260308T083859Z\r\nUID:20250526_ep13nlfs01gou4u08p5rf1nipg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251104\r\nDTEND;VALUE=DATE:20251105\r\nDTSTAMP:20260308T083859Z\r\nUID:20251104_t6ljbqasccl6l3bces1e0ev89g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251127\r\nDTEND;VALUE=DATE:20251128\r\nDTSTAMP:20260308T083859Z\r\nUID:20251127_pdedl9ktuusr8j1o2b4olr8bfg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260703\r\nDTEND;VALUE=DATE:20260704\r\nDTSTAMP:20260308T083859Z\r\nUID:20260703_0g574fqg66vqoj9oh0f90s6fng@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261224\r\nDTEND;VALUE=DATE:20261225\r\nDTSTAMP:20260308T083859Z\r\nUID:20261224_tmbgi0ljkl27i1l34lnddrq60c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270328\r\nDTEND;VALUE=DATE:20270329\r\nDTSTAMP:20260308T083859Z\r\nUID:20270328_3nqofeol1nv7matfa4j3qbbrek@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270531\r\nDTEND;VALUE=DATE:20270601\r\nDTSTAMP:20260308T083859Z\r\nUID:20270531_a8d95ep62fnouqln2idnfprgfc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270614\r\nDTEND;VALUE=DATE:20270615\r\nDTSTAMP:20260308T083859Z\r\nUID:20270614_7j3h402oqdnve3hjfbclt8fde0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271224\r\nDTEND;VALUE=DATE:20271225\r\nDTSTAMP:20260308T083859Z\r\nUID:20271224_7ktptr2su7508nb7imm8i3944o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271224\r\nDTEND;VALUE=DATE:20271225\r\nDTSTAMP:20260308T083859Z\r\nUID:20271224_i8925vsmgnevm8dvc1493n0s70@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280214\r\nDTEND;VALUE=DATE:20280215\r\nDTSTAMP:20260308T083859Z\r\nUID:20280214_5hlbaltlh2u8kbkv5acc1c1u5o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280619\r\nDTEND;VALUE=DATE:20280620\r\nDTSTAMP:20260308T083859Z\r\nUID:20280619_03jbnporjjhgnhud69vog1vsu0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281123\r\nDTEND;VALUE=DATE:20281124\r\nDTSTAMP:20260308T083859Z\r\nUID:20281123_8vgff0u4j8or0kpfg45c2hi6fc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281225\r\nDTEND;VALUE=DATE:20281226\r\nDTSTAMP:20260308T083859Z\r\nUID:20281225_8r0nggfgrlnu9mlnhj1otv2rl4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290120\r\nDTEND;VALUE=DATE:20290121\r\nDTSTAMP:20260308T083859Z\r\nUID:20290120_gh7me09jnjo8hsali4d8rn1u0k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday in District of Columbia\\, Maryland\\, Virginia\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Inauguration Day (regional holiday)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290505\r\nDTEND;VALUE=DATE:20290506\r\nDTSTAMP:20260308T083859Z\r\nUID:20290505_u74q6na5d04vfek6j4u75dpqio@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290528\r\nDTEND;VALUE=DATE:20290529\r\nDTSTAMP:20260308T083859Z\r\nUID:20290528_334f81ds2v5t6sop3ne0ebme6o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290619\r\nDTEND;VALUE=DATE:20290620\r\nDTSTAMP:20260308T083859Z\r\nUID:20290619_gkaaue44el403t2vp71s0hckd4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290903\r\nDTEND;VALUE=DATE:20290904\r\nDTSTAMP:20260308T083859Z\r\nUID:20290903_gkurfcg0aihej6qe0s2gg106i4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291106\r\nDTEND;VALUE=DATE:20291107\r\nDTSTAMP:20260308T083859Z\r\nUID:20291106_t4ailr64j7lhu6mt7r78utmqpg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291112\r\nDTEND;VALUE=DATE:20291113\r\nDTSTAMP:20260308T083859Z\r\nUID:20291112_4momsi8cdsh11bl70v2glu83f8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101352Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101352Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210405\r\nDTEND;VALUE=DATE:20210406\r\nDTSTAMP:20260308T083859Z\r\nUID:20210405_cuhoameejfac0bvefuol3ksut8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210505\r\nDTEND;VALUE=DATE:20210506\r\nDTSTAMP:20260308T083859Z\r\nUID:20210505_5inli2606h58qp7jlaihvf708k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210517\r\nDTEND;VALUE=DATE:20210518\r\nDTSTAMP:20260308T083859Z\r\nUID:20210517_k86fbv6iu55u8ek9p5lncsseqc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220117\r\nDTEND;VALUE=DATE:20220118\r\nDTSTAMP:20260308T083859Z\r\nUID:20220117_74na2n4kqdo9ekjr782f6e1hn0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220214\r\nDTEND;VALUE=DATE:20220215\r\nDTSTAMP:20260308T083859Z\r\nUID:20220214_9fbeicgf1mbo1n5u3dmilit4lc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221031\r\nDTEND;VALUE=DATE:20221101\r\nDTSTAMP:20260308T083859Z\r\nUID:20221031_h9ulkj50vbnq9ftu03aob2bh60@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221108\r\nDTEND;VALUE=DATE:20221109\r\nDTSTAMP:20260308T083859Z\r\nUID:20221108_bulv2pa0q7ml244m71ddb0lp4o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221225\r\nDTEND;VALUE=DATE:20221226\r\nDTSTAMP:20260308T083859Z\r\nUID:20221225_avddc6fpl0mc8dtfi9svf5a5sg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221231\r\nDTEND;VALUE=DATE:20230101\r\nDTSTAMP:20260308T083859Z\r\nUID:20221231_k0d31p2e5inudbf1380h1iprno@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230102\r\nDTEND;VALUE=DATE:20230103\r\nDTSTAMP:20260308T083859Z\r\nUID:20230102_9ui848rca6psiavbftbveivb0k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230409\r\nDTEND;VALUE=DATE:20230410\r\nDTSTAMP:20260308T083859Z\r\nUID:20230409_pfn34o91h4vkjts8375730m7d0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230514\r\nDTEND;VALUE=DATE:20230515\r\nDTSTAMP:20260308T083859Z\r\nUID:20230514_etknim8eb5ic1fdkadkpacip8c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230619\r\nDTEND;VALUE=DATE:20230620\r\nDTSTAMP:20260308T083859Z\r\nUID:20230619_ai0o4fjvlhp1cipj5fvcuhe6b4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230904\r\nDTEND;VALUE=DATE:20230905\r\nDTSTAMP:20260308T083859Z\r\nUID:20230904_umcalcqc4bvg24ob3toqk7pf10@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231110\r\nDTEND;VALUE=DATE:20231111\r\nDTSTAMP:20260308T083859Z\r\nUID:20231110_mhl68f2754p7np6f1s5mlskpi4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240512\r\nDTEND;VALUE=DATE:20240513\r\nDTSTAMP:20260308T083859Z\r\nUID:20240512_msuojkvaljllo9rr9vr0a1rfr0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240527\r\nDTEND;VALUE=DATE:20240528\r\nDTSTAMP:20260308T083859Z\r\nUID:20240527_03vq05va41q5l3dc1n0jrjnlo4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241103\r\nDTEND;VALUE=DATE:20241104\r\nDTSTAMP:20260308T083859Z\r\nUID:20241103_uidss732gtpfrjt230ad7a2eok@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250101\r\nDTEND;VALUE=DATE:20250102\r\nDTSTAMP:20260308T083859Z\r\nUID:20250101_n42075h4udis718r1h6ktgtel8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250317\r\nDTEND;VALUE=DATE:20250318\r\nDTSTAMP:20260308T083859Z\r\nUID:20250317_9o03ua59rp64lk4n2hgrl161do@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250415\r\nDTEND;VALUE=DATE:20250416\r\nDTSTAMP:20260308T083859Z\r\nUID:20250415_kjnuhigbhn2r23s8r9jp5k95s0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250421\r\nDTEND;VALUE=DATE:20250422\r\nDTSTAMP:20260308T083859Z\r\nUID:20250421_ls3gtag61ma5b12rugc8i27n6g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250511\r\nDTEND;VALUE=DATE:20250512\r\nDTSTAMP:20260308T083859Z\r\nUID:20250511_gvj1ble08iq2fcevgi21klidd4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251031\r\nDTEND;VALUE=DATE:20251101\r\nDTSTAMP:20260308T083859Z\r\nUID:20251031_shio5h95885l28s9ubnb2f1i14@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251231\r\nDTEND;VALUE=DATE:20260101\r\nDTSTAMP:20260308T083859Z\r\nUID:20251231_qvqbs61fsin4at4ng89cqdoru8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260101\r\nDTEND;VALUE=DATE:20260102\r\nDTSTAMP:20260308T083859Z\r\nUID:20260101_d3glsfo8cfrs476elqd81so37s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260619\r\nDTEND;VALUE=DATE:20260620\r\nDTSTAMP:20260308T083859Z\r\nUID:20260619_2r4dpqm45tb15b3ebg9e9huo94@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270618\r\nDTEND;VALUE=DATE:20270619\r\nDTSTAMP:20260308T083859Z\r\nUID:20270618_dua7tffu9bhdv589l96fo4dbto@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270906\r\nDTEND;VALUE=DATE:20270907\r\nDTSTAMP:20260308T083859Z\r\nUID:20270906_o0fp6osmkvm13bo00clcd54g6o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271102\r\nDTEND;VALUE=DATE:20271103\r\nDTSTAMP:20260308T083859Z\r\nUID:20271102_dk8iu7bjv3o2d71bmchf12f48s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271107\r\nDTEND;VALUE=DATE:20271108\r\nDTSTAMP:20260308T083859Z\r\nUID:20271107_1kj13mnc8fqvv6lhd5icmn5mgs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271225\r\nDTEND;VALUE=DATE:20271226\r\nDTSTAMP:20260308T083859Z\r\nUID:20271225_n8ohrbud5168b6ttfkm3j0sq7c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280117\r\nDTEND;VALUE=DATE:20280118\r\nDTSTAMP:20260308T083859Z\r\nUID:20280117_nbkqjc5gentj2edivjruq2f630@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280317\r\nDTEND;VALUE=DATE:20280318\r\nDTSTAMP:20260308T083859Z\r\nUID:20280317_evfhj5fqf2laqomgc4clps29hk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281031\r\nDTEND;VALUE=DATE:20281101\r\nDTSTAMP:20260308T083859Z\r\nUID:20281031_bfg7jkt53kkoc61h0v5fk2vfqg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281110\r\nDTEND;VALUE=DATE:20281111\r\nDTSTAMP:20260308T083859Z\r\nUID:20281110_vrao7sgnq3oafskugegmnq34to@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290311\r\nDTEND;VALUE=DATE:20290312\r\nDTSTAMP:20260308T083859Z\r\nUID:20290311_3pop6eaua31u1qeukfha60ddts@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290513\r\nDTEND;VALUE=DATE:20290514\r\nDTSTAMP:20260308T083859Z\r\nUID:20290513_tl0o87g5ln2rons6m1hqmqarbg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290614\r\nDTEND;VALUE=DATE:20290615\r\nDTSTAMP:20260308T083859Z\r\nUID:20290614_8oavipb8ojr4g17k0ljabjs92g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291104\r\nDTEND;VALUE=DATE:20291105\r\nDTSTAMP:20260308T083859Z\r\nUID:20291104_lm5dh1kjqqa2kel50nr28pntjk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101354Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101354Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210705\r\nDTEND;VALUE=DATE:20210706\r\nDTSTAMP:20260308T083859Z\r\nUID:20210705_37p8phtdrrn5vfsq28uph0k958@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211031\r\nDTEND;VALUE=DATE:20211101\r\nDTSTAMP:20260308T083859Z\r\nUID:20211031_8g3bsj2amnfugu70nspd93k8mg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211107\r\nDTEND;VALUE=DATE:20211108\r\nDTSTAMP:20260308T083859Z\r\nUID:20211107_qk5501qk3ah457hgvcneais590@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230101\r\nDTEND;VALUE=DATE:20230102\r\nDTSTAMP:20260308T083859Z\r\nUID:20230101_v1a9e3o5tfde5428dufbnggr2s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230529\r\nDTEND;VALUE=DATE:20230530\r\nDTSTAMP:20260308T083859Z\r\nUID:20230529_d2asb60upi3a5meok1phh4cloc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230614\r\nDTEND;VALUE=DATE:20230615\r\nDTSTAMP:20260308T083859Z\r\nUID:20230614_efq846g8aiqlsubn5nqte3ih20@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240101\r\nDTEND;VALUE=DATE:20240102\r\nDTSTAMP:20260308T083859Z\r\nUID:20240101_m0geu70d1r7h1ki9rt6euosed8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240115\r\nDTEND;VALUE=DATE:20240116\r\nDTSTAMP:20260308T083859Z\r\nUID:20240115_dklg7u312u8j1e2bto0r1thst8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240214\r\nDTEND;VALUE=DATE:20240215\r\nDTSTAMP:20260308T083859Z\r\nUID:20240214_rlf3kcbh7ksavg11mskjcmnds8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240415\r\nDTEND;VALUE=DATE:20240416\r\nDTSTAMP:20260308T083859Z\r\nUID:20240415_fotn67h5c971500rbm7vd3cao8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250214\r\nDTEND;VALUE=DATE:20250215\r\nDTSTAMP:20260308T083859Z\r\nUID:20250214_6irqovpoptusdbb3mr6o3jrjfo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250505\r\nDTEND;VALUE=DATE:20250506\r\nDTSTAMP:20260308T083859Z\r\nUID:20250505_urloestg1ommnvtviv77cfhsl8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250901\r\nDTEND;VALUE=DATE:20250902\r\nDTSTAMP:20260308T083859Z\r\nUID:20250901_9u2pou9j855ujfp8l4gqsqpbv4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260214\r\nDTEND;VALUE=DATE:20260215\r\nDTSTAMP:20260308T083859Z\r\nUID:20260214_usq30lg2vsmkhksfk62gq346l4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260308\r\nDTEND;VALUE=DATE:20260309\r\nDTSTAMP:20260308T083859Z\r\nUID:20260308_ggv49ash2dc1u9ve311s17cv3s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260406\r\nDTEND;VALUE=DATE:20260407\r\nDTSTAMP:20260308T083859Z\r\nUID:20260406_egt1hslergcgifs4s2d8brbu10@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260415\r\nDTEND;VALUE=DATE:20260416\r\nDTSTAMP:20260308T083859Z\r\nUID:20260415_fkehtfbgrr6j65q23flu2k5vu0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260510\r\nDTEND;VALUE=DATE:20260511\r\nDTSTAMP:20260308T083859Z\r\nUID:20260510_pb76790v60kap1j6ra4f75ms9o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260614\r\nDTEND;VALUE=DATE:20260615\r\nDTSTAMP:20260308T083859Z\r\nUID:20260614_qdm7ohijjp3q47dejeuk58m28g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261103\r\nDTEND;VALUE=DATE:20261104\r\nDTSTAMP:20260308T083859Z\r\nUID:20261103_lg3dpstk14ft6g9m5k35jlkg14@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261225\r\nDTEND;VALUE=DATE:20261226\r\nDTSTAMP:20260308T083859Z\r\nUID:20261225_q1cjdk9utc6u8gie59mrlsh778@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270505\r\nDTEND;VALUE=DATE:20270506\r\nDTSTAMP:20260308T083859Z\r\nUID:20270505_1vgefrjsle5qlpl0h0aurksol8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271031\r\nDTEND;VALUE=DATE:20271101\r\nDTSTAMP:20260308T083859Z\r\nUID:20271031_n497nmt3a3rnsclfffs5e8o1ps@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271125\r\nDTEND;VALUE=DATE:20271126\r\nDTSTAMP:20260308T083859Z\r\nUID:20271125_nvmjfbrnegkvku7ge08j824rgs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271231\r\nDTEND;VALUE=DATE:20280101\r\nDTSTAMP:20260308T083859Z\r\nUID:20271231_79bdjh2dlcncr49c2vod51i0o8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day (substitute)\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280101\r\nDTEND;VALUE=DATE:20280102\r\nDTSTAMP:20260308T083859Z\r\nUID:20280101_n0176hrfgccfhjvmactlotqpi8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280505\r\nDTEND;VALUE=DATE:20280506\r\nDTSTAMP:20260308T083859Z\r\nUID:20280505_f6ikipf358ii4icfslk8rpcomg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280529\r\nDTEND;VALUE=DATE:20280530\r\nDTSTAMP:20260308T083859Z\r\nUID:20280529_par8l4eogsovgp4dvjfnb3iul0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280704\r\nDTEND;VALUE=DATE:20280705\r\nDTSTAMP:20260308T083859Z\r\nUID:20280704_mio7q05rg1l9mc93bogdb5vqj4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281224\r\nDTEND;VALUE=DATE:20281225\r\nDTSTAMP:20260308T083859Z\r\nUID:20281224_j2pv7h8qfg2p12av8ipblmtj34@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281231\r\nDTEND;VALUE=DATE:20290101\r\nDTSTAMP:20260308T083859Z\r\nUID:20281231_0es0ai4hit8nm3dp2slo402olg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290115\r\nDTEND;VALUE=DATE:20290116\r\nDTSTAMP:20260308T083859Z\r\nUID:20290115_dgs2nsl0bnrndhmm2epjrpquc0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291231\r\nDTEND;VALUE=DATE:20300101\r\nDTSTAMP:20260308T083859Z\r\nUID:20291231_ao9cirsf5seciliqnv0v1d87ls@google.com\r\nCLASS:PUBLIC\r\nCREATED:20240603T101355Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20240603T101355Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211011\r\nDTEND;VALUE=DATE:20211012\r\nDTSTAMP:20260308T083859Z\r\nUID:20211011_594vhhcb6em43lr54uimhr4omg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20211126\r\nDTEND;VALUE=DATE:20211127\r\nDTSTAMP:20260308T083859Z\r\nUID:20211126_818d7aiqa1d1eg719g65c050fk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221010\r\nDTEND;VALUE=DATE:20221011\r\nDTSTAMP:20260308T083859Z\r\nUID:20221010_njf67j7efintvfjtttll47ibqo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20221125\r\nDTEND;VALUE=DATE:20221126\r\nDTSTAMP:20260308T083859Z\r\nUID:20221125_acq6q620qtl60n1ogka5hst2ak@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231009\r\nDTEND;VALUE=DATE:20231010\r\nDTSTAMP:20260308T083859Z\r\nUID:20231009_4qe9gmvg1hc3i055pktvt6gaus@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20231124\r\nDTEND;VALUE=DATE:20231125\r\nDTSTAMP:20260308T083859Z\r\nUID:20231124_gfrtp8vg8ptt2srbv16ghdmh9o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241014\r\nDTEND;VALUE=DATE:20241015\r\nDTSTAMP:20260308T083859Z\r\nUID:20241014_ogc1cv6oak5am9qa003476qh2k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241129\r\nDTEND;VALUE=DATE:20241130\r\nDTSTAMP:20260308T083859Z\r\nUID:20241129_ud7cno7rm8snpfppmr14jja610@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251013\r\nDTEND;VALUE=DATE:20251014\r\nDTSTAMP:20260308T083859Z\r\nUID:20251013_k6pk4j6uqicf07ao11ooupcklc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251128\r\nDTEND;VALUE=DATE:20251129\r\nDTSTAMP:20260308T083859Z\r\nUID:20251128_4kf98jrmvohuqhv3fumhc9fit0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261012\r\nDTEND;VALUE=DATE:20261013\r\nDTSTAMP:20260308T083859Z\r\nUID:20261012_ulmd1kltcra97jfi42oujqdnms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20261127\r\nDTEND;VALUE=DATE:20261128\r\nDTSTAMP:20260308T083859Z\r\nUID:20261127_sqgeamknoire9j3326eu506ais@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271011\r\nDTEND;VALUE=DATE:20271012\r\nDTSTAMP:20260308T083859Z\r\nUID:20271011_ot5stoash0pqs54jffmku8ssvg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20271126\r\nDTEND;VALUE=DATE:20271127\r\nDTSTAMP:20260308T083859Z\r\nUID:20271126_en66tntb0dg4jac7gomcav2rfk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281009\r\nDTEND;VALUE=DATE:20281010\r\nDTSTAMP:20260308T083859Z\r\nUID:20281009_mdag9d30eo43bu31n2gbdcpti0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20281124\r\nDTEND;VALUE=DATE:20281125\r\nDTSTAMP:20260308T083859Z\r\nUID:20281124_l1nunog01fhibv1ieb8eufh780@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291008\r\nDTEND;VALUE=DATE:20291009\r\nDTSTAMP:20260308T083859Z\r\nUID:20291008_152adrl56dvjibloqo99b99vis@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20291123\r\nDTEND;VALUE=DATE:20291124\r\nDTSTAMP:20260308T083859Z\r\nUID:20291123_gj1iuud8bbb7uahahikr70nve4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20241203T225445Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20241203T225445Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300101\r\nDTEND;VALUE=DATE:20300102\r\nDTSTAMP:20260308T083859Z\r\nUID:20300101_8evrebik097c4kq9u1omv7umgs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300121\r\nDTEND;VALUE=DATE:20300122\r\nDTSTAMP:20260308T083859Z\r\nUID:20300121_jv4j27np97ouuk4763lg34fqhc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300214\r\nDTEND;VALUE=DATE:20300215\r\nDTSTAMP:20260308T083859Z\r\nUID:20300214_8jaf4mfs29dap5ml2jba4ebtpc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300310\r\nDTEND;VALUE=DATE:20300311\r\nDTSTAMP:20260308T083859Z\r\nUID:20300310_5t6tld4ltu5gqengu5qe4h4qcs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300317\r\nDTEND;VALUE=DATE:20300318\r\nDTSTAMP:20260308T083859Z\r\nUID:20300317_c3nkl4n019m0aabrsndf4vn1ms@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300415\r\nDTEND;VALUE=DATE:20300416\r\nDTSTAMP:20260308T083859Z\r\nUID:20300415_1rmlghhep366e9s3hp720i0lds@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300421\r\nDTEND;VALUE=DATE:20300422\r\nDTSTAMP:20260308T083859Z\r\nUID:20300421_e9pr9qkrd8l8bchs6dia2lckc8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300422\r\nDTEND;VALUE=DATE:20300423\r\nDTSTAMP:20260308T083859Z\r\nUID:20300422_6lungdm9csrkpcgvn83bun99t8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300505\r\nDTEND;VALUE=DATE:20300506\r\nDTSTAMP:20260308T083859Z\r\nUID:20300505_qg0310796ja7n3crlvjmmt5sf0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300512\r\nDTEND;VALUE=DATE:20300513\r\nDTSTAMP:20260308T083859Z\r\nUID:20300512_4rg2sdt3eiki7jgm8l69rc4s5o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300527\r\nDTEND;VALUE=DATE:20300528\r\nDTSTAMP:20260308T083859Z\r\nUID:20300527_bc5tvrrokjpfqm0nvhiku75das@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300614\r\nDTEND;VALUE=DATE:20300615\r\nDTSTAMP:20260308T083859Z\r\nUID:20300614_4a5mq8fsen3bm98u1j42ksd59k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300619\r\nDTEND;VALUE=DATE:20300620\r\nDTSTAMP:20260308T083859Z\r\nUID:20300619_31hmfks9m3j1rfgvp9hvirmi3k@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300704\r\nDTEND;VALUE=DATE:20300705\r\nDTSTAMP:20260308T083859Z\r\nUID:20300704_c3nkkhlgoo1db0lp6sma07m2ro@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300902\r\nDTEND;VALUE=DATE:20300903\r\nDTSTAMP:20260308T083859Z\r\nUID:20300902_rb56hffd79qj5grvc0mo1oaibc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301014\r\nDTEND;VALUE=DATE:20301015\r\nDTSTAMP:20260308T083859Z\r\nUID:20301014_ghp9eo39vg1g2cmo61h1n34mv0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301031\r\nDTEND;VALUE=DATE:20301101\r\nDTSTAMP:20260308T083859Z\r\nUID:20301031_v4r7e9ti5sf5kl3bib013mt0qc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301103\r\nDTEND;VALUE=DATE:20301104\r\nDTSTAMP:20260308T083859Z\r\nUID:20301103_fjatp9jl4ikct7edqs775tav0o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301105\r\nDTEND;VALUE=DATE:20301106\r\nDTSTAMP:20260308T083859Z\r\nUID:20301105_gphpb8qbs5ol1bp0nt0r5erjh8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301111\r\nDTEND;VALUE=DATE:20301112\r\nDTSTAMP:20260308T083859Z\r\nUID:20301111_8be9e162s952n5939dcmo268b8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301128\r\nDTEND;VALUE=DATE:20301129\r\nDTSTAMP:20260308T083859Z\r\nUID:20301128_q8s1l1n9m9nnq0k1c9iehnsmgk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301129\r\nDTEND;VALUE=DATE:20301130\r\nDTSTAMP:20260308T083859Z\r\nUID:20301129_luvdvmb1oar01hu2c6f6j7ifo8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301224\r\nDTEND;VALUE=DATE:20301225\r\nDTSTAMP:20260308T083859Z\r\nUID:20301224_8csqthu0rk26ppe4el61mejltk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301225\r\nDTEND;VALUE=DATE:20301226\r\nDTSTAMP:20260308T083859Z\r\nUID:20301225_74sht6g0p401b9gif71s86ifvk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20301231\r\nDTEND;VALUE=DATE:20310101\r\nDTSTAMP:20260308T083859Z\r\nUID:20301231_vdc19fue5vv24mc9agn5nvp01o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250107T091649Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20250107T091649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250109\r\nDTEND;VALUE=DATE:20250110\r\nDTSTAMP:20260308T083859Z\r\nUID:20250109_ucmpfmatbli1vtjv7ce5ca1u6g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250115T091047Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250115T091047Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:National Day of Mourning for Jimmy Carter\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20241224\r\nDTEND;VALUE=DATE:20241225\r\nDTSTAMP:20260308T083859Z\r\nUID:20241224_trmbmfq3thq51qbmk20t5iqnm4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20250312T095649Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20250312T095649Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210620\r\nDTEND;VALUE=DATE:20210621\r\nDTSTAMP:20260308T083859Z\r\nUID:20210620_3134kg8vehromkgd75icpkqhp4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220619\r\nDTEND;VALUE=DATE:20220620\r\nDTSTAMP:20260308T083859Z\r\nUID:20220619_30in2mhmqnopa60gkgtasc4so4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230618\r\nDTEND;VALUE=DATE:20230619\r\nDTSTAMP:20260308T083859Z\r\nUID:20230618_opi2fgae9kvdhb2rh0i4l56dd0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240616\r\nDTEND;VALUE=DATE:20240617\r\nDTSTAMP:20260308T083859Z\r\nUID:20240616_6f0te8md05dkjkgm9u1s99mp8c@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250615\r\nDTEND;VALUE=DATE:20250616\r\nDTSTAMP:20260308T083859Z\r\nUID:20250615_6e1mp5g8vevfk2c96ebc8recs0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260621\r\nDTEND;VALUE=DATE:20260622\r\nDTSTAMP:20260308T083859Z\r\nUID:20260621_t5os2i58a399apjafh4aijjmro@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270620\r\nDTEND;VALUE=DATE:20270621\r\nDTSTAMP:20260308T083859Z\r\nUID:20270620_o850n58vu8vs3e2bkut1010m1o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280618\r\nDTEND;VALUE=DATE:20280619\r\nDTSTAMP:20260308T083859Z\r\nUID:20280618_9dr87t3pgg0rmm8c829fndkg68@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290617\r\nDTEND;VALUE=DATE:20290618\r\nDTSTAMP:20260308T083859Z\r\nUID:20290617_ic1qvrdncvsf80tdebkn0vr8d0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300616\r\nDTEND;VALUE=DATE:20300617\r\nDTSTAMP:20260308T083859Z\r\nUID:20300616_5rjsd3jc495f76r1bqj1d30sro@google.com\r\nCLASS:PUBLIC\r\nCREATED:20251020T093956Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20251020T093956Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310101\r\nDTEND;VALUE=DATE:20310102\r\nDTSTAMP:20260308T083859Z\r\nUID:20310101_vcu2mqpgi363110tl8jtpdgcm8@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310120\r\nDTEND;VALUE=DATE:20310121\r\nDTSTAMP:20260308T083859Z\r\nUID:20310120_f52mhu3b2h6q97svj9734a7m1o@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Martin Luther King Jr. Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310214\r\nDTEND;VALUE=DATE:20310215\r\nDTSTAMP:20260308T083859Z\r\nUID:20310214_mt5v53d2olpt6bej35obe8dohg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Valentine's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310309\r\nDTEND;VALUE=DATE:20310310\r\nDTSTAMP:20260308T083859Z\r\nUID:20310309_ptjej9jf2711v605che01fk2ko@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time starts\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310317\r\nDTEND;VALUE=DATE:20310318\r\nDTSTAMP:20260308T083859Z\r\nUID:20310317_isaroepdn0hf0ueot3cu1sjbvo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:St. Patrick's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310413\r\nDTEND;VALUE=DATE:20310414\r\nDTSTAMP:20260308T083859Z\r\nUID:20310413_88vbq6tm80m9f2o59jvlr23ack@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Sunday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310414\r\nDTEND;VALUE=DATE:20310415\r\nDTSTAMP:20260308T083859Z\r\nUID:20310414_6fds4re366isp2ffa3fln4d6vc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Easter Monday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310415\r\nDTEND;VALUE=DATE:20310416\r\nDTSTAMP:20260308T083859Z\r\nUID:20310415_2m0ddi1dgk90bf1enqimel8hco@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Tax Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310505\r\nDTEND;VALUE=DATE:20310506\r\nDTSTAMP:20260308T083859Z\r\nUID:20310505_tvtc4ll54gqbddjr0sd2mksjcc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Cinco de Mayo\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310511\r\nDTEND;VALUE=DATE:20310512\r\nDTSTAMP:20260308T083859Z\r\nUID:20310511_7cfpurfha530gm7o636ht5hvj4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Mother's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310526\r\nDTEND;VALUE=DATE:20310527\r\nDTSTAMP:20260308T083859Z\r\nUID:20310526_gk6oaqa82453spb0jqdpi853bg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Memorial Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310614\r\nDTEND;VALUE=DATE:20310615\r\nDTSTAMP:20260308T083859Z\r\nUID:20310614_kd3hb3auglqk7tvrvbtia4g17g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Flag Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310615\r\nDTEND;VALUE=DATE:20310616\r\nDTSTAMP:20260308T083859Z\r\nUID:20310615_e47qtv5n15nnu2dkvqerr7elcg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Father's Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310619\r\nDTEND;VALUE=DATE:20310620\r\nDTSTAMP:20260308T083859Z\r\nUID:20310619_v8ip6hrvntmlrifo1cl5c3ifs4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Juneteenth\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310704\r\nDTEND;VALUE=DATE:20310705\r\nDTSTAMP:20260308T083859Z\r\nUID:20310704_i7lbp2ntadrtav5a6bb7gp8br4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Independence Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310901\r\nDTEND;VALUE=DATE:20310902\r\nDTSTAMP:20260308T083859Z\r\nUID:20310901_p7tftujqkmrsp57hp3idc9hflk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Labor Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311013\r\nDTEND;VALUE=DATE:20311014\r\nDTSTAMP:20260308T083859Z\r\nUID:20311013_63ilprg1j7kmlrs60i95e4mftg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Columbus Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311031\r\nDTEND;VALUE=DATE:20311101\r\nDTSTAMP:20260308T083859Z\r\nUID:20311031_8r06ttm26hhibucfn0feckv2o4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Halloween\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311102\r\nDTEND;VALUE=DATE:20311103\r\nDTSTAMP:20260308T083859Z\r\nUID:20311102_4ntp4p2fvk2ic7io4nqngvc380@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Daylight Saving Time ends\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311104\r\nDTEND;VALUE=DATE:20311105\r\nDTSTAMP:20260308T083859Z\r\nUID:20311104_d3ims30npsidvuq0prcqgmv998@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Election Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311111\r\nDTEND;VALUE=DATE:20311112\r\nDTSTAMP:20260308T083859Z\r\nUID:20311111_113re7r04lf2vg4mpda3fbjr24@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Veterans Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311127\r\nDTEND;VALUE=DATE:20311128\r\nDTSTAMP:20260308T083859Z\r\nUID:20311127_vvab8rdf3h8qac8uu4n7f72igk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Thanksgiving Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311128\r\nDTEND;VALUE=DATE:20311129\r\nDTSTAMP:20260308T083859Z\r\nUID:20311128_rqjkv71q37rfd1u7u4kd20udeg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Black Friday\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311224\r\nDTEND;VALUE=DATE:20311225\r\nDTSTAMP:20260308T083859Z\r\nUID:20311224_0aj8e54tnb6rq8foiodmq12noc@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311225\r\nDTEND;VALUE=DATE:20311226\r\nDTSTAMP:20260308T083859Z\r\nUID:20311225_ipt0rjiavi471b25gasi463oo0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20311231\r\nDTEND;VALUE=DATE:20320101\r\nDTSTAMP:20260308T083859Z\r\nUID:20311231_inp1ppdfvhd0d20bp598imgvmk@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260112T075303Z\r\nDESCRIPTION:Observance\\nTo hide observances\\, go to Google Calendar Setting\r\n s > Holidays in United States\r\nLAST-MODIFIED:20260112T075303Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:New Year's Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251224\r\nDTEND;VALUE=DATE:20251225\r\nDTSTAMP:20260308T083859Z\r\nUID:20251224_m68l8757e84nhop4jauk5n4n30@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260119T090056Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260119T090056Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Christmas Eve\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20251226\r\nDTEND;VALUE=DATE:20251227\r\nDTSTAMP:20260308T083859Z\r\nUID:20251226_msvle3sem189qo3dphidbvo5ak@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260119T090056Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260119T090056Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Day After Christmas Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20210215\r\nDTEND;VALUE=DATE:20210216\r\nDTSTAMP:20260308T083859Z\r\nUID:20210215_foftga8h3bikl5trb29rhaddoo@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20220221\r\nDTEND;VALUE=DATE:20220222\r\nDTSTAMP:20260308T083859Z\r\nUID:20220221_73dnhl34guhehv0j5hlpllqki0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20230220\r\nDTEND;VALUE=DATE:20230221\r\nDTSTAMP:20260308T083859Z\r\nUID:20230220_51vtm4ocdkqmrfsu0mrkq9c9i0@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20240219\r\nDTEND;VALUE=DATE:20240220\r\nDTSTAMP:20260308T083859Z\r\nUID:20240219_r38k62fujepkco7lp6anm0ithg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20250217\r\nDTEND;VALUE=DATE:20250218\r\nDTSTAMP:20260308T083859Z\r\nUID:20250217_7a7ccm18bi44ppq2mcbtd49cv4@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20260216\r\nDTEND;VALUE=DATE:20260217\r\nDTSTAMP:20260308T083859Z\r\nUID:20260216_6md85pbtdqab16gk684vmsa6bg@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20270215\r\nDTEND;VALUE=DATE:20270216\r\nDTSTAMP:20260308T083859Z\r\nUID:20270215_7sgq0m140envl7mdpsl75sagic@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20280221\r\nDTEND;VALUE=DATE:20280222\r\nDTSTAMP:20260308T083859Z\r\nUID:20280221_qqdp0shmhb8qcp2o09h110oa6s@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20290219\r\nDTEND;VALUE=DATE:20290220\r\nDTSTAMP:20260308T083859Z\r\nUID:20290219_l1hcsm1i6q559i64pq7ucgm61g@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20300218\r\nDTEND;VALUE=DATE:20300219\r\nDTSTAMP:20260308T083859Z\r\nUID:20300218_qm11l0dq1o9oru8k12iialt5is@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20310217\r\nDTEND;VALUE=DATE:20310218\r\nDTSTAMP:20260308T083859Z\r\nUID:20310217_v2e2pfrpntjet9bb3vlb8ocobs@google.com\r\nCLASS:PUBLIC\r\nCREATED:20260225T084642Z\r\nDESCRIPTION:Public holiday\r\nLAST-MODIFIED:20260225T084642Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Presidents’ Day\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
  },
  {
    "path": "packages/fixtures/ics/govuk-bank-holidays-england-wales.ics",
    "content": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nMETHOD:PUBLISH\r\nPRODID:-//uk.gov/GOVUK calendars//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20190102\r\nDTSTART;VALUE=DATE:20190101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20190420\r\nDTSTART;VALUE=DATE:20190419\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-04-19-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20190423\r\nDTSTART;VALUE=DATE:20190422\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-04-22-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20190507\r\nDTSTART;VALUE=DATE:20190506\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-05-06-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20190528\r\nDTSTART;VALUE=DATE:20190527\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-05-27-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20190827\r\nDTSTART;VALUE=DATE:20190826\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-08-26-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20191226\r\nDTSTART;VALUE=DATE:20191225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20191227\r\nDTSTART;VALUE=DATE:20191226\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2019-12-26-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20200102\r\nDTSTART;VALUE=DATE:20200101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20200411\r\nDTSTART;VALUE=DATE:20200410\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-04-10-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20200414\r\nDTSTART;VALUE=DATE:20200413\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-04-13-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20200509\r\nDTSTART;VALUE=DATE:20200508\r\nSUMMARY:Early May bank holiday (VE day)\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-05-08-EarlyMaybankholidayVEday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20200526\r\nDTSTART;VALUE=DATE:20200525\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-05-25-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20200901\r\nDTSTART;VALUE=DATE:20200831\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-08-31-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20201226\r\nDTSTART;VALUE=DATE:20201225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20201229\r\nDTSTART;VALUE=DATE:20201228\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2020-12-28-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20210102\r\nDTSTART;VALUE=DATE:20210101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20210403\r\nDTSTART;VALUE=DATE:20210402\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-04-02-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20210406\r\nDTSTART;VALUE=DATE:20210405\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-04-05-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20210504\r\nDTSTART;VALUE=DATE:20210503\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-05-03-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20210601\r\nDTSTART;VALUE=DATE:20210531\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-05-31-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20210831\r\nDTSTART;VALUE=DATE:20210830\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-08-30-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20211228\r\nDTSTART;VALUE=DATE:20211227\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-12-27-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20211229\r\nDTSTART;VALUE=DATE:20211228\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2021-12-28-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220104\r\nDTSTART;VALUE=DATE:20220103\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-01-03-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220416\r\nDTSTART;VALUE=DATE:20220415\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-04-15-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220419\r\nDTSTART;VALUE=DATE:20220418\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-04-18-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220503\r\nDTSTART;VALUE=DATE:20220502\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-05-02-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220603\r\nDTSTART;VALUE=DATE:20220602\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-06-02-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220604\r\nDTSTART;VALUE=DATE:20220603\r\nSUMMARY:Platinum Jubilee bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-06-03-PlatinumJubileebankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220830\r\nDTSTART;VALUE=DATE:20220829\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-08-29-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20220920\r\nDTSTART;VALUE=DATE:20220919\r\nSUMMARY:Bank Holiday for the State Funeral of Queen Elizabeth II\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-09-19-BankHolidayfortheStateFuneralofQueenElizabethII@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20221227\r\nDTSTART;VALUE=DATE:20221226\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-12-26-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20221228\r\nDTSTART;VALUE=DATE:20221227\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2022-12-27-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230103\r\nDTSTART;VALUE=DATE:20230102\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-01-02-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230408\r\nDTSTART;VALUE=DATE:20230407\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-04-07-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230411\r\nDTSTART;VALUE=DATE:20230410\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-04-10-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230502\r\nDTSTART;VALUE=DATE:20230501\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-05-01-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230509\r\nDTSTART;VALUE=DATE:20230508\r\nSUMMARY:Bank holiday for the coronation of King Charles III\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-05-08-BankholidayforthecoronationofKingCharlesIII@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230530\r\nDTSTART;VALUE=DATE:20230529\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-05-29-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20230829\r\nDTSTART;VALUE=DATE:20230828\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-08-28-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20231226\r\nDTSTART;VALUE=DATE:20231225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20231227\r\nDTSTART;VALUE=DATE:20231226\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2023-12-26-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20240102\r\nDTSTART;VALUE=DATE:20240101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20240330\r\nDTSTART;VALUE=DATE:20240329\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-03-29-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20240402\r\nDTSTART;VALUE=DATE:20240401\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-04-01-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20240507\r\nDTSTART;VALUE=DATE:20240506\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-05-06-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20240528\r\nDTSTART;VALUE=DATE:20240527\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-05-27-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20240827\r\nDTSTART;VALUE=DATE:20240826\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-08-26-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20241226\r\nDTSTART;VALUE=DATE:20241225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20241227\r\nDTSTART;VALUE=DATE:20241226\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2024-12-26-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20250102\r\nDTSTART;VALUE=DATE:20250101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20250419\r\nDTSTART;VALUE=DATE:20250418\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-04-18-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20250422\r\nDTSTART;VALUE=DATE:20250421\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-04-21-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20250506\r\nDTSTART;VALUE=DATE:20250505\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-05-05-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20250527\r\nDTSTART;VALUE=DATE:20250526\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-05-26-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20250826\r\nDTSTART;VALUE=DATE:20250825\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-08-25-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20251226\r\nDTSTART;VALUE=DATE:20251225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20251227\r\nDTSTART;VALUE=DATE:20251226\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2025-12-26-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20260102\r\nDTSTART;VALUE=DATE:20260101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20260404\r\nDTSTART;VALUE=DATE:20260403\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-04-03-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20260407\r\nDTSTART;VALUE=DATE:20260406\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-04-06-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20260505\r\nDTSTART;VALUE=DATE:20260504\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-05-04-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20260526\r\nDTSTART;VALUE=DATE:20260525\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-05-25-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20260901\r\nDTSTART;VALUE=DATE:20260831\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-08-31-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20261226\r\nDTSTART;VALUE=DATE:20261225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20261229\r\nDTSTART;VALUE=DATE:20261228\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2026-12-28-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20270102\r\nDTSTART;VALUE=DATE:20270101\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-01-01-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20270327\r\nDTSTART;VALUE=DATE:20270326\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-03-26-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20270330\r\nDTSTART;VALUE=DATE:20270329\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-03-29-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20270504\r\nDTSTART;VALUE=DATE:20270503\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-05-03-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20270601\r\nDTSTART;VALUE=DATE:20270531\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-05-31-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20270831\r\nDTSTART;VALUE=DATE:20270830\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-08-30-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20271228\r\nDTSTART;VALUE=DATE:20271227\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-12-27-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20271229\r\nDTSTART;VALUE=DATE:20271228\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2027-12-28-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20280104\r\nDTSTART;VALUE=DATE:20280103\r\nSUMMARY:New Year’s Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-01-03-NewYearsDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20280415\r\nDTSTART;VALUE=DATE:20280414\r\nSUMMARY:Good Friday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-04-14-GoodFriday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20280418\r\nDTSTART;VALUE=DATE:20280417\r\nSUMMARY:Easter Monday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-04-17-EasterMonday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20280502\r\nDTSTART;VALUE=DATE:20280501\r\nSUMMARY:Early May bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-05-01-EarlyMaybankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20280530\r\nDTSTART;VALUE=DATE:20280529\r\nSUMMARY:Spring bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-05-29-Springbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20280829\r\nDTSTART;VALUE=DATE:20280828\r\nSUMMARY:Summer bank holiday\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-08-28-Summerbankholiday@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20281226\r\nDTSTART;VALUE=DATE:20281225\r\nSUMMARY:Christmas Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-12-25-ChristmasDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTEND;VALUE=DATE:20281227\r\nDTSTART;VALUE=DATE:20281226\r\nSUMMARY:Boxing Day\r\nUID:ca6af7456b0088abad9a69f9f620f5ac-2028-12-26-BoxingDay@gov.uk\r\nSEQUENCE:0\r\nDTSTAMP:20260307T102731Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
  },
  {
    "path": "packages/fixtures/ics/hebcal-geoname-3448439.ics",
    "content": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//hebcal.com/NONSGML Hebcal Calendar v16.3.6//EN\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nX-LOTUS-CHARSET:UTF-8\r\nREFRESH-INTERVAL;VALUE=DURATION:P7D\r\nX-PUBLISHED-TTL:P7D\r\nX-WR-CALNAME:Hebcal São Paulo 2026\r\nX-WR-TIMEZONE;VALUE=TEXT:America/Sao_Paulo\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260102T183900\r\nDTEND;TZID=America/Sao_Paulo:20260102T183900\r\nUID:hebcal-20260102-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayechi\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayechi\r\nDTSTART;VALUE=DATE:20260103\r\nDTEND;VALUE=DATE:20260104\r\nUID:hebcal-20260103-34317a08\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 47:28-50:26\\nHaftarah: I Kings 2:1-12\\n\\nhttps:\r\n //hebcal.com/s/5786/12?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260103T193500\r\nDTEND;TZID=America/Sao_Paulo:20260103T193500\r\nUID:hebcal-20260103-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260109T184000\r\nDTEND;TZID=America/Sao_Paulo:20260109T184000\r\nUID:hebcal-20260109-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Shemot\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Shemot\r\nDTSTART;VALUE=DATE:20260110\r\nDTEND;VALUE=DATE:20260111\r\nUID:hebcal-20260110-8ab1464d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 1:1-6:1\\nHaftarah: Isaiah 27:6-28:13\\, 29:22-23\\\r\n nHaftarah for Sephardim: Jeremiah 1:1-2:3\\n\\nhttps://hebcal.com/s/5786/13?\r\n us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260110T193600\r\nDTEND;TZID=America/Sao_Paulo:20260110T193600\r\nUID:hebcal-20260110-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260116T184000\r\nDTEND;TZID=America/Sao_Paulo:20260116T184000\r\nUID:hebcal-20260116-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vaera\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vaera\r\nDTSTART;VALUE=DATE:20260117\r\nDTEND;VALUE=DATE:20260118\r\nUID:hebcal-20260117-42bf0567\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 6:2-9:35\\nHaftarah: Ezekiel 28:25-29:21\\n\\nhttps\r\n ://hebcal.com/s/5786/14?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Sh’vat\r\nDTSTART;VALUE=DATE:20260117\r\nDTEND;VALUE=DATE:20260118\r\nUID:hebcal-20260117-f7388855\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Sh’vat: Sunday\\, 3:06pm and 11 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260117T193500\r\nDTEND;TZID=America/Sao_Paulo:20260117T193500\r\nUID:hebcal-20260117-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Sh’vat\r\nDTSTART;VALUE=DATE:20260119\r\nDTEND;VALUE=DATE:20260120\r\nUID:hebcal-20260119-b9dbcfbb\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Sh’vat on the Hebrew calendar. שְׁבָ\r\n ט (transliterated Sh’vat or Shevat) is the 5th month of the civil Hebre\r\n w year and the 11th month of the biblical Hebrew year. It has 30 days and \r\n corresponds to January or February on the Gregorian calendar. רֹאשׁ \r\n חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, is a minor h\r\n oliday that occurs at the beginning of every month in the Hebrew calendar.\r\n  It is marked by the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttp\r\n s://hebcal.com/h/rosh-chodesh-shvat-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260123T183900\r\nDTEND;TZID=America/Sao_Paulo:20260123T183900\r\nUID:hebcal-20260123-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Bo\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Bo\r\nDTSTART;VALUE=DATE:20260124\r\nDTEND;VALUE=DATE:20260125\r\nUID:hebcal-20260124-bc1258b0\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 10:1-13:16\\nHaftarah: Jeremiah 46:13-28\\n\\nhttps\r\n ://hebcal.com/s/5786/15?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260124T193400\r\nDTEND;TZID=America/Sao_Paulo:20260124T193400\r\nUID:hebcal-20260124-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260130T183700\r\nDTEND;TZID=America/Sao_Paulo:20260130T183700\r\nUID:hebcal-20260130-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Beshalach\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Shirah\r\nDTSTART;VALUE=DATE:20260131\r\nDTEND;VALUE=DATE:20260201\r\nUID:hebcal-20260131-40f5da47\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat of Song. Shabbat that includes Parashat Beshalach\\n\\nh\r\n ttps://hebcal.com/h/shabbat-shirah-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Beshalach\r\nDTSTART;VALUE=DATE:20260131\r\nDTEND;VALUE=DATE:20260201\r\nUID:hebcal-20260131-3627f2a3\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 13:17-17:16\\nHaftarah: Judges 4:4-5:31\\nHaftarah\r\n  for Sephardim: Judges 5:1-31\\n\\nhttps://hebcal.com/s/5786/16?us=api&um=ic\r\n alendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260131T193100\r\nDTEND;TZID=America/Sao_Paulo:20260131T193100\r\nUID:hebcal-20260131-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Tu BiShvat\r\nDTSTART;VALUE=DATE:20260202\r\nDTEND;VALUE=DATE:20260203\r\nUID:hebcal-20260202-a7d91a90\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:New Year for Trees. Tu BiShvat is one of four “New Years” \r\n mentioned in the Mishnah\\n\\nhttps://hebcal.com/h/tu-bishvat-2026?us=api&um\r\n =icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260206T183400\r\nDTEND;TZID=America/Sao_Paulo:20260206T183400\r\nUID:hebcal-20260206-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Yitro\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Yitro\r\nDTSTART;VALUE=DATE:20260207\r\nDTEND;VALUE=DATE:20260208\r\nUID:hebcal-20260207-62f0271d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 18:1-20:23\\nHaftarah: Isaiah 6:1-7:6\\, 9:5-6\\nHa\r\n ftarah for Sephardim: Isaiah 6:1-13\\n\\nhttps://hebcal.com/s/5786/17?us=api\r\n &um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260207T192700\r\nDTEND;TZID=America/Sao_Paulo:20260207T192700\r\nUID:hebcal-20260207-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260213T182900\r\nDTEND;TZID=America/Sao_Paulo:20260213T182900\r\nUID:hebcal-20260213-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Mishpatim\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Shekalim\r\nDTSTART;VALUE=DATE:20260214\r\nDTEND;VALUE=DATE:20260215\r\nUID:hebcal-20260214-713517f2\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat before Rosh Chodesh Adar. Read in preparation for Puri\r\n m\\n\\nHaftarah: II Kings 12:1-17\\nHaftarah for Sephardim: II Kings 11:17-12\r\n :17\\n\\nhttps://hebcal.com/h/shabbat-shekalim-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Mishpatim\r\nDTSTART;VALUE=DATE:20260214\r\nDTEND;VALUE=DATE:20260215\r\nUID:hebcal-20260214-dd646af9\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 21:1-24:18\\, 30:11-16\\nHaftarah: II Kings 12:1-1\r\n 7 | Shabbat Shekalim\\nHaftarah for Sephardim: II Kings 11:17-12:17\\n\\nhttp\r\n s://hebcal.com/s/5786/18?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Adar\r\nDTSTART;VALUE=DATE:20260214\r\nDTEND;VALUE=DATE:20260215\r\nUID:hebcal-20260214-0042bb6e\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Adar: Tuesday\\, 3:50am and 12 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260214T192200\r\nDTEND;TZID=America/Sao_Paulo:20260214T192200\r\nUID:hebcal-20260214-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Adar\r\nDTSTART;VALUE=DATE:20260217\r\nDTEND;VALUE=DATE:20260218\r\nUID:hebcal-20260217-28e8a555\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Adar on the Hebrew calendar. Adar (אֲדָ\r\n ר) is the 6th month of the civil Hebrew year and the 12th month of the bi\r\n blical Hebrew year. It has 29 days and corresponds to February or March on\r\n  the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\, transliterated Rosh C\r\n hodesh or Rosh Hodesh\\, is a minor holiday that occurs at the beginning of\r\n  every month in the Hebrew calendar. It is marked by the birth of a new mo\r\n on\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal.com/h/rosh-chodesh-adar-202\r\n 6?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Adar\r\nDTSTART;VALUE=DATE:20260218\r\nDTEND;VALUE=DATE:20260219\r\nUID:hebcal-20260218-28e8a555\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Adar on the Hebrew calendar. Adar (אֲדָ\r\n ר) is the 6th month of the civil Hebrew year and the 12th month of the bi\r\n blical Hebrew year. It has 29 days and corresponds to February or March on\r\n  the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\, transliterated Rosh C\r\n hodesh or Rosh Hodesh\\, is a minor holiday that occurs at the beginning of\r\n  every month in the Hebrew calendar. It is marked by the birth of a new mo\r\n on\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal.com/h/rosh-chodesh-adar-202\r\n 6?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260220T182400\r\nDTEND;TZID=America/Sao_Paulo:20260220T182400\r\nUID:hebcal-20260220-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Terumah\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Terumah\r\nDTSTART;VALUE=DATE:20260221\r\nDTEND;VALUE=DATE:20260222\r\nUID:hebcal-20260221-4b20a3dc\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 25:1-27:19\\nHaftarah: I Kings 5:26-6:13\\n\\nhttps\r\n ://hebcal.com/s/5786/19?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260221T191600\r\nDTEND;TZID=America/Sao_Paulo:20260221T191600\r\nUID:hebcal-20260221-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260227T181900\r\nDTEND;TZID=America/Sao_Paulo:20260227T181900\r\nUID:hebcal-20260227-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Tetzaveh\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Zachor\r\nDTSTART;VALUE=DATE:20260228\r\nDTEND;VALUE=DATE:20260301\r\nUID:hebcal-20260228-b709beaa\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat of Remembrance. Shabbat before Purim\\n\\nHaftarah: I Sa\r\n muel 15:2-34\\nHaftarah for Sephardim: I Samuel 15:1-34\\n\\nhttps://hebcal.c\r\n om/h/shabbat-zachor-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Tetzaveh\r\nDTSTART;VALUE=DATE:20260228\r\nDTEND;VALUE=DATE:20260301\r\nUID:hebcal-20260228-36153cbc\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 27:20-30:10\\; Deuteronomy 25:17-19\\nHaftarah: I \r\n Samuel 15:2-34 | Shabbat Zachor\\nHaftarah for Sephardim: I Samuel 15:1-34\\\r\n n\\nhttps://hebcal.com/s/5786/20?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260228T191000\r\nDTEND;TZID=America/Sao_Paulo:20260228T191000\r\nUID:hebcal-20260228-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast begins\r\nDTSTART;TZID=America/Sao_Paulo:20260302T045400\r\nDTEND;TZID=America/Sao_Paulo:20260302T045400\r\nUID:hebcal-20260302-fd646bb5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Ta’anit Esther\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Ta’anit Esther\r\nDTSTART;VALUE=DATE:20260302\r\nDTEND;VALUE=DATE:20260303\r\nUID:hebcal-20260302-65e47969\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Fast of Esther\\n\\nTorah: Exodus 32:11-14\\, 34:1-10\\n\\nhttps://\r\n hebcal.com/h/taanit-esther-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast ends\r\nDTSTART;TZID=America/Sao_Paulo:20260302T190200\r\nDTEND;TZID=America/Sao_Paulo:20260302T190200\r\nUID:hebcal-20260302-82e6d873-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Ta’anit Esther\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Purim\r\nDTSTART;VALUE=DATE:20260302\r\nDTEND;VALUE=DATE:20260303\r\nUID:hebcal-20260302-4fdbaae2\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Celebration of Jewish deliverance as told by Megilat Esther. I\r\n t commemorates a time when the Jewish people living in Persia were saved f\r\n rom extermination\\n\\nTorah: Esther 1:1-10:3\\n\\nhttps://hebcal.com/h/purim-\r\n 2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Purim\r\nDTSTART;VALUE=DATE:20260303\r\nDTEND;VALUE=DATE:20260304\r\nUID:hebcal-20260303-b59993b2\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Celebration of Jewish deliverance as told by Megilat Esther. I\r\n t commemorates a time when the Jewish people living in Persia were saved f\r\n rom extermination\\n\\nTorah: Exodus 17:8-16\\; Esther 1:1-10:3\\n\\nhttps://he\r\n bcal.com/h/purim-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shushan Purim\r\nDTSTART;VALUE=DATE:20260304\r\nDTEND;VALUE=DATE:20260305\r\nUID:hebcal-20260304-12d3cbc7\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Purim celebrated in Jerusalem and walled cities\\n\\nhttps://heb\r\n cal.com/h/shushan-purim-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260306T181200\r\nDTEND;TZID=America/Sao_Paulo:20260306T181200\r\nUID:hebcal-20260306-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Ki Tisa\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Parah\r\nDTSTART;VALUE=DATE:20260307\r\nDTEND;VALUE=DATE:20260308\r\nUID:hebcal-20260307-1624bd32\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat of the Red Heifer. Shabbat before Shabbat HaChodesh\\, \r\n in preparation for Passover\\n\\nHaftarah: Ezekiel 36:16-38\\nHaftarah for Se\r\n phardim: Ezekiel 36:16-36\\n\\nhttps://hebcal.com/h/shabbat-parah-2026?us=ap\r\n i&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Ki Tisa\r\nDTSTART;VALUE=DATE:20260307\r\nDTEND;VALUE=DATE:20260308\r\nUID:hebcal-20260307-213849be\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 30:11-34:35\\; Numbers 19:1-22\\nHaftarah: Ezekiel\r\n  36:16-38 | Shabbat Parah\\nHaftarah for Sephardim: Ezekiel 36:16-36\\n\\nhtt\r\n ps://hebcal.com/s/5786/21?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260307T190400\r\nDTEND;TZID=America/Sao_Paulo:20260307T190400\r\nUID:hebcal-20260307-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260313T180600\r\nDTEND;TZID=America/Sao_Paulo:20260313T180600\r\nUID:hebcal-20260313-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayakhel-Pekudei\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat HaChodesh\r\nDTSTART;VALUE=DATE:20260314\r\nDTEND;VALUE=DATE:20260315\r\nUID:hebcal-20260314-3e8a7379\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat before Rosh Chodesh Nissan. Read in preparation for Pa\r\n ssover\\n\\nHaftarah: Ezekiel 45:16-46:18\\nHaftarah for Sephardim: Ezekiel 4\r\n 5:18-46:15\\n\\nhttps://hebcal.com/h/shabbat-hachodesh-2026?us=api&um=icalen\r\n dar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayakhel-Pekudei\r\nDTSTART;VALUE=DATE:20260314\r\nDTEND;VALUE=DATE:20260315\r\nUID:hebcal-20260314-c188da63\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Exodus 35:1-40:38\\, 12:1-20\\nHaftarah: Ezekiel 45:16-46\r\n :18 | Shabbat HaChodesh\\nHaftarah for Sephardim: Ezekiel 45:18-46:15\\n\\nht\r\n tps://hebcal.com/s/5786/22d?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Nisan\r\nDTSTART;VALUE=DATE:20260314\r\nDTEND;VALUE=DATE:20260315\r\nUID:hebcal-20260314-d006cb53\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Nisan: Wednesday\\, 4:34pm and 13 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260314T185700\r\nDTEND;TZID=America/Sao_Paulo:20260314T185700\r\nUID:hebcal-20260314-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Nisan\r\nDTSTART;VALUE=DATE:20260319\r\nDTEND;VALUE=DATE:20260320\r\nUID:hebcal-20260319-26a17e2b\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Nisan on the Hebrew calendar. נִיסָן (\r\n transliterated Nisan or Nissan) is the 7th month of the civil Hebrew year \r\n (8th on leap years) and the 1st month of the biblical Hebrew year. It has \r\n 30 days and corresponds to March or April on the Gregorian calendar. רֹ\r\n אשׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, is a \r\n minor holiday that occurs at the beginning of every month in the Hebrew ca\r\n lendar. It is marked by the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\\r\n n\\nhttps://hebcal.com/h/rosh-chodesh-nisan-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260320T175900\r\nDTEND;TZID=America/Sao_Paulo:20260320T175900\r\nUID:hebcal-20260320-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayikra\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayikra\r\nDTSTART;VALUE=DATE:20260321\r\nDTEND;VALUE=DATE:20260322\r\nUID:hebcal-20260321-fef12dca\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 1:1-5:26\\nHaftarah: Isaiah 43:21-44:23\\n\\nhtt\r\n ps://hebcal.com/s/5786/24?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260321T185000\r\nDTEND;TZID=America/Sao_Paulo:20260321T185000\r\nUID:hebcal-20260321-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260327T175200\r\nDTEND;TZID=America/Sao_Paulo:20260327T175200\r\nUID:hebcal-20260327-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Tzav\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat HaGadol\r\nDTSTART;VALUE=DATE:20260328\r\nDTEND;VALUE=DATE:20260329\r\nUID:hebcal-20260328-2e333569\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat before Pesach (The Great Shabbat)\\n\\nHaftarah: Malachi\r\n  3:4-24\\n\\nhttps://hebcal.com/h/shabbat-hagadol-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Yom HaAliyah\r\nDTSTART;VALUE=DATE:20260328\r\nDTEND;VALUE=DATE:20260329\r\nUID:hebcal-20260328-7ef10a7e\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Recognizes Aliyah\\, immigration to the Jewish State of Israel\\\r\n n\\nhttps://hebcal.com/h/yom-haaliyah-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Tzav\r\nDTSTART;VALUE=DATE:20260328\r\nDTEND;VALUE=DATE:20260329\r\nUID:hebcal-20260328-b025cb50\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 6:1-8:36\\nHaftarah: Malachi 3:4-24 | Shabbat \r\n HaGadol\\n\\nhttps://hebcal.com/s/5786/25?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260328T184300\r\nDTEND;TZID=America/Sao_Paulo:20260328T184300\r\nUID:hebcal-20260328-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast begins\r\nDTSTART;TZID=America/Sao_Paulo:20260401T050800\r\nDTEND;TZID=America/Sao_Paulo:20260401T050800\r\nUID:hebcal-20260401-fd646bb5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Ta’anit Bechorot\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Ta’anit Bechorot\r\nDTSTART;VALUE=DATE:20260401\r\nDTEND;VALUE=DATE:20260402\r\nUID:hebcal-20260401-73101110\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Fast of the First Born\\n\\nhttps://hebcal.com/h/taanit-bechorot\r\n -2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Pesach\r\nDTSTART;VALUE=DATE:20260401\r\nDTEND;VALUE=DATE:20260402\r\nUID:hebcal-20260401-b899d38a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nhttps://hebcal.com/h/pesach-2026?us=\r\n api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260401T174700\r\nDTEND;TZID=America/Sao_Paulo:20260401T174700\r\nUID:hebcal-20260401-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach I\r\nDTSTART;VALUE=DATE:20260402\r\nDTEND;VALUE=DATE:20260403\r\nUID:hebcal-20260402-f5de93e3\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Exodus 12:21-51\\; Numbers 28:\r\n 16-25\\nHaftarah: Joshua 3:5-7\\, 5:2-6:1\\, 6:27\\nHaftarah for Sephardim: Jo\r\n shua 5:2-6:1\\, 6:27\\n\\nhttps://hebcal.com/h/pesach-2026?us=api&um=icalenda\r\n r\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260402T183800\r\nDTEND;TZID=America/Sao_Paulo:20260402T183800\r\nUID:hebcal-20260402-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach II\r\nDTSTART;VALUE=DATE:20260403\r\nDTEND;VALUE=DATE:20260404\r\nUID:hebcal-20260403-8a7f3521\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Leviticus 22:26-23:44\\; Numbe\r\n rs 28:16-25\\nHaftarah: II Kings 23:1-9\\, 23:21-25\\n\\nhttps://hebcal.com/h/\r\n pesach-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260403T174500\r\nDTEND;TZID=America/Sao_Paulo:20260403T174500\r\nUID:hebcal-20260403-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach III (CH’’M)\r\nDTSTART;VALUE=DATE:20260404\r\nDTEND;VALUE=DATE:20260405\r\nUID:hebcal-20260404-c5af2e47\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Exodus 33:12-34:26\\; Numbers \r\n 28:19-25\\; Song of Songs 1:1-8:14\\nHaftarah: Ezekiel 37:1-14\\n\\nhttps://he\r\n bcal.com/h/pesach-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260404T183600\r\nDTEND;TZID=America/Sao_Paulo:20260404T183600\r\nUID:hebcal-20260404-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach IV (CH’’M)\r\nDTSTART;VALUE=DATE:20260405\r\nDTEND;VALUE=DATE:20260406\r\nUID:hebcal-20260405-22088d98\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Exodus 13:1-16\\; Numbers 28:1\r\n 9-25\\n\\nhttps://hebcal.com/h/pesach-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach V (CH’’M)\r\nDTSTART;VALUE=DATE:20260406\r\nDTEND;VALUE=DATE:20260407\r\nUID:hebcal-20260406-ccdb6a58\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Exodus 22:24-23:19\\; Numbers \r\n 28:19-25\\n\\nhttps://hebcal.com/h/pesach-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach VI (CH’’M)\r\nDTSTART;VALUE=DATE:20260407\r\nDTEND;VALUE=DATE:20260408\r\nUID:hebcal-20260407-a146401d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Numbers 9:1-14\\, 28:19-25\\n\\n\r\n https://hebcal.com/h/pesach-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260407T174100\r\nDTEND;TZID=America/Sao_Paulo:20260407T174100\r\nUID:hebcal-20260407-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach VII\r\nDTSTART;VALUE=DATE:20260408\r\nDTEND;VALUE=DATE:20260409\r\nUID:hebcal-20260408-0133feb2\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Exodus 13:17-15:26\\; Numbers \r\n 28:19-25\\nHaftarah: II Samuel 22:1-51\\n\\nhttps://hebcal.com/h/pesach-2026?\r\n us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260408T183200\r\nDTEND;TZID=America/Sao_Paulo:20260408T183200\r\nUID:hebcal-20260408-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach VIII\r\nDTSTART;VALUE=DATE:20260409\r\nDTEND;VALUE=DATE:20260410\r\nUID:hebcal-20260409-9b5e763c\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Passover\\, the Feast of Unleavened Bread. Also called Chag HaM\r\n atzot (the Festival of Matzah)\\, it commemorates the Exodus and freedom of\r\n  the Israelites from ancient Egypt\\n\\nTorah: Deuteronomy 15:19-16:17\\; Num\r\n bers 28:19-25\\nHaftarah: Isaiah 10:32-12:6\\n\\nhttps://hebcal.com/h/pesach-\r\n 2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260409T183200\r\nDTEND;TZID=America/Sao_Paulo:20260409T183200\r\nUID:hebcal-20260409-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260410T173900\r\nDTEND;TZID=America/Sao_Paulo:20260410T173900\r\nUID:hebcal-20260410-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Shmini\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Shmini\r\nDTSTART;VALUE=DATE:20260411\r\nDTEND;VALUE=DATE:20260412\r\nUID:hebcal-20260411-d5e13d8a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 9:1-11:47\\nHaftarah: II Samuel 6:1-7:17\\nHaft\r\n arah for Sephardim: II Samuel 6:1-19\\n\\nhttps://hebcal.com/s/5786/26?us=ap\r\n i&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Iyyar\r\nDTSTART;VALUE=DATE:20260411\r\nDTEND;VALUE=DATE:20260412\r\nUID:hebcal-20260411-6ddbc8f4\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Iyyar: Friday\\, 5:18am and 14 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260411T183000\r\nDTEND;TZID=America/Sao_Paulo:20260411T183000\r\nUID:hebcal-20260411-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Yom HaShoah\r\nDTSTART;VALUE=DATE:20260414\r\nDTEND;VALUE=DATE:20260415\r\nUID:hebcal-20260414-397e0803\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Holocaust Memorial Day\\n\\nhttps://hebcal.com/h/yom-hashoah-202\r\n 6?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Iyyar\r\nDTSTART;VALUE=DATE:20260417\r\nDTEND;VALUE=DATE:20260418\r\nUID:hebcal-20260417-21689341\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Iyyar on the Hebrew calendar. אִיָּיר\r\n  (transliterated Iyyar or Iyar) is the 8th month of the civil Hebrew year \r\n (9th on leap years) and the 2nd month of the biblical Hebrew year. It has \r\n 29 days and corresponds to April or May on the Gregorian calendar. רֹא\r\n שׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, is a mi\r\n nor holiday that occurs at the beginning of every month in the Hebrew cale\r\n ndar. It is marked by the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\\r\n nhttps://hebcal.com/h/rosh-chodesh-iyyar-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260417T173200\r\nDTEND;TZID=America/Sao_Paulo:20260417T173200\r\nUID:hebcal-20260417-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Tazria-Metzora\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Iyyar\r\nDTSTART;VALUE=DATE:20260418\r\nDTEND;VALUE=DATE:20260419\r\nUID:hebcal-20260418-21689341\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Iyyar on the Hebrew calendar. אִיָּיר\r\n  (transliterated Iyyar or Iyar) is the 8th month of the civil Hebrew year \r\n (9th on leap years) and the 2nd month of the biblical Hebrew year. It has \r\n 29 days and corresponds to April or May on the Gregorian calendar. רֹא\r\n שׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, is a mi\r\n nor holiday that occurs at the beginning of every month in the Hebrew cale\r\n ndar. It is marked by the birth of a new moon\\n\\nHaftarah: Isaiah 66:1-24\\\r\n n\\nhttps://hebcal.com/h/rosh-chodesh-iyyar-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Tazria-Metzora\r\nDTSTART;VALUE=DATE:20260418\r\nDTEND;VALUE=DATE:20260419\r\nUID:hebcal-20260418-5298c428\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 12:1-15:33\\; Numbers 28:9-15\\nHaftarah: Isaia\r\n h 66:1-24 | Shabbat Rosh Chodesh\\n\\nhttps://hebcal.com/s/5786/27d?us=api&u\r\n m=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260418T182400\r\nDTEND;TZID=America/Sao_Paulo:20260418T182400\r\nUID:hebcal-20260418-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Yom HaZikaron\r\nDTSTART;VALUE=DATE:20260421\r\nDTEND;VALUE=DATE:20260422\r\nUID:hebcal-20260421-d53cc31d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Israeli Memorial Day. Remembers those who died in the War of I\r\n ndependence and other wars in Israel. The full name of the holiday is Yom \r\n HaZikaron LeHalalei Ma’arakhot Yisrael ul’Nifge’ei Pe’ulot HaEivah\r\n  (Hebrew: יוֹם הזִּכָּרוֹן לְחַלְלֵי מַעֲרָ\r\n כוֹת יִשְׂרָאֵל וּלְנִפְגְעֵי פְּעֻלּ\r\n וֹת הָאֵיבָה)\\, Memorial Day for the Fallen Soldiers of the War\r\n s of Israel and Victims of Actions of Terrorism. Although Yom Hazikaron is\r\n  normally observed on the 4th of Iyyar\\, it may be moved earlier or postpo\r\n ned if observance of the holiday (or Yom HaAtzma’ut\\, which always follo\r\n ws it) would conflict with Shabbat\\n\\nhttps://hebcal.com/h/yom-hazikaron-2\r\n 026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Yom HaAtzma’ut\r\nDTSTART;VALUE=DATE:20260422\r\nDTEND;VALUE=DATE:20260423\r\nUID:hebcal-20260422-dd24e12d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Israeli Independence Day. Commemorates the declaration of inde\r\n pendence of Israel in 1948. Although Yom HaAtzma’ut is normally observed\r\n  on the 5th of Iyyar\\, it may be moved earlier or postponed if observance \r\n of the holiday (or Yom HaZikaron\\, which always precedes it) would conflic\r\n t with Shabbat\\n\\nhttps://hebcal.com/h/yom-haatzmaut-2026?us=api&um=icalen\r\n dar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260424T172700\r\nDTEND;TZID=America/Sao_Paulo:20260424T172700\r\nUID:hebcal-20260424-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Achrei Mot-Kedoshim\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Achrei Mot-Kedoshim\r\nDTSTART;VALUE=DATE:20260425\r\nDTEND;VALUE=DATE:20260426\r\nUID:hebcal-20260425-59055acd\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 16:1-20:27\\nHaftarah: Amos 9:7-15\\nHaftarah f\r\n or Sephardim: Ezekiel 20:2-20\\n\\nhttps://hebcal.com/s/achrei-mot-kedoshim-\r\n 20260425?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260425T181900\r\nDTEND;TZID=America/Sao_Paulo:20260425T181900\r\nUID:hebcal-20260425-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Pesach Sheni\r\nDTSTART;VALUE=DATE:20260501\r\nDTEND;VALUE=DATE:20260502\r\nUID:hebcal-20260501-f222d099\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Second Passover\\, one month after Passover\\n\\nhttps://hebcal.c\r\n om/h/pesach-sheni-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260501T172200\r\nDTEND;TZID=America/Sao_Paulo:20260501T172200\r\nUID:hebcal-20260501-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Emor\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Emor\r\nDTSTART;VALUE=DATE:20260502\r\nDTEND;VALUE=DATE:20260503\r\nUID:hebcal-20260502-4287acbc\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 21:1-24:23\\nHaftarah: Ezekiel 44:15-31\\n\\nhtt\r\n ps://hebcal.com/s/5786/31?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260502T181400\r\nDTEND;TZID=America/Sao_Paulo:20260502T181400\r\nUID:hebcal-20260502-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Lag BaOmer\r\nDTSTART;VALUE=DATE:20260505\r\nDTEND;VALUE=DATE:20260506\r\nUID:hebcal-20260505-4223318c\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:33rd day of counting the Omer. The holiday is a temporary brea\r\n k from the semi-mourning period the counting of the Omer. Practices includ\r\n e lighting bonfires\\, getting haircuts\\, and Jewish weddings\\n\\nhttps://he\r\n bcal.com/h/lag-baomer-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260508T171700\r\nDTEND;TZID=America/Sao_Paulo:20260508T171700\r\nUID:hebcal-20260508-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Behar-Bechukotai\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Behar-Bechukotai\r\nDTSTART;VALUE=DATE:20260509\r\nDTEND;VALUE=DATE:20260510\r\nUID:hebcal-20260509-92bbdabd\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Leviticus 25:1-27:34\\nHaftarah: Jeremiah 16:19-17:14\\n\\\r\n nhttps://hebcal.com/s/5786/32d?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260509T181000\r\nDTEND;TZID=America/Sao_Paulo:20260509T181000\r\nUID:hebcal-20260509-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Yom Yerushalayim\r\nDTSTART;VALUE=DATE:20260515\r\nDTEND;VALUE=DATE:20260516\r\nUID:hebcal-20260515-bd3ce4b3\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Jerusalem Day. Commemorates the re-unification of Jerusalem in\r\n  1967\\n\\nhttps://hebcal.com/h/yom-yerushalayim-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260515T171400\r\nDTEND;TZID=America/Sao_Paulo:20260515T171400\r\nUID:hebcal-20260515-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Bamidbar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Bamidbar\r\nDTSTART;VALUE=DATE:20260516\r\nDTEND;VALUE=DATE:20260517\r\nUID:hebcal-20260516-1fac12a2\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 1:1-4:20\\nHaftarah: I Samuel 20:18-42 | Shabbat\r\n  Machar Chodesh\\n\\nhttps://hebcal.com/s/5786/34?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Sivan\r\nDTSTART;VALUE=DATE:20260516\r\nDTEND;VALUE=DATE:20260517\r\nUID:hebcal-20260516-ccad0557\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Sivan: Saturday\\, 6:02pm and 15 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260516T180700\r\nDTEND;TZID=America/Sao_Paulo:20260516T180700\r\nUID:hebcal-20260516-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Sivan\r\nDTSTART;VALUE=DATE:20260517\r\nDTEND;VALUE=DATE:20260518\r\nUID:hebcal-20260517-ea657a21\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Sivan on the Hebrew calendar. Sivan (סִי\r\n וָן) is the 9th month of the civil Hebrew year (10th on leap years) and\r\n  the 3rd month of the biblical Hebrew year. It has 30 days and corresponds\r\n  to May or June on the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\, tra\r\n nsliterated Rosh Chodesh or Rosh Hodesh\\, is a minor holiday that occurs a\r\n t the beginning of every month in the Hebrew calendar. It is marked by the\r\n  birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal.com/h/ros\r\n h-chodesh-sivan-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Shavuot\r\nDTSTART;VALUE=DATE:20260521\r\nDTEND;VALUE=DATE:20260522\r\nUID:hebcal-20260521-516b1178\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Festival of Weeks. Commemorates the giving of the Torah at Mou\r\n nt Sinai\\n\\nhttps://hebcal.com/h/shavuot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260521T171100\r\nDTEND;TZID=America/Sao_Paulo:20260521T171100\r\nUID:hebcal-20260521-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shavuot I\r\nDTSTART;VALUE=DATE:20260522\r\nDTEND;VALUE=DATE:20260523\r\nUID:hebcal-20260522-547670dd\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Festival of Weeks. Commemorates the giving of the Torah at Mou\r\n nt Sinai\\n\\nTorah: Exodus 19:1-20:23\\; Numbers 28:26-31\\nHaftarah: Ezekiel\r\n  1:1-28\\, 3:12\\n\\nhttps://hebcal.com/h/shavuot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260522T171100\r\nDTEND;TZID=America/Sao_Paulo:20260522T171100\r\nUID:hebcal-20260522-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shavuot II\r\nDTSTART;VALUE=DATE:20260523\r\nDTEND;VALUE=DATE:20260524\r\nUID:hebcal-20260523-69691cf1\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Festival of Weeks. Commemorates the giving of the Torah at Mou\r\n nt Sinai\\n\\nTorah: Deuteronomy 14:22-16:17\\; Numbers 28:26-31\\; Ruth 1:1-4\r\n :22\\nHaftarah: Habakkuk 3:1-19\\nHaftarah for Sephardim: Habakkuk 2:20-3:19\r\n \\n\\nhttps://hebcal.com/h/shavuot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260523T180500\r\nDTEND;TZID=America/Sao_Paulo:20260523T180500\r\nUID:hebcal-20260523-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260529T171000\r\nDTEND;TZID=America/Sao_Paulo:20260529T171000\r\nUID:hebcal-20260529-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Nasso\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Nasso\r\nDTSTART;VALUE=DATE:20260530\r\nDTEND;VALUE=DATE:20260531\r\nUID:hebcal-20260530-8525b665\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 4:21-7:89\\nHaftarah: Judges 13:2-25\\n\\nhttps://\r\n hebcal.com/s/5786/35?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260530T180400\r\nDTEND;TZID=America/Sao_Paulo:20260530T180400\r\nUID:hebcal-20260530-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260605T170900\r\nDTEND;TZID=America/Sao_Paulo:20260605T170900\r\nUID:hebcal-20260605-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Beha’alotcha\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Beha’alotcha\r\nDTSTART;VALUE=DATE:20260606\r\nDTEND;VALUE=DATE:20260607\r\nUID:hebcal-20260606-b1003d5c\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 8:1-12:16\\nHaftarah: Zechariah 2:14-4:7\\n\\nhttp\r\n s://hebcal.com/s/5786/36?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260606T180400\r\nDTEND;TZID=America/Sao_Paulo:20260606T180400\r\nUID:hebcal-20260606-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260612T170900\r\nDTEND;TZID=America/Sao_Paulo:20260612T170900\r\nUID:hebcal-20260612-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Sh’lach\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Sh’lach\r\nDTSTART;VALUE=DATE:20260613\r\nDTEND;VALUE=DATE:20260614\r\nUID:hebcal-20260613-c3c5ff30\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 13:1-15:41\\nHaftarah: Joshua 2:1-24\\n\\nhttps://\r\n hebcal.com/s/5786/37?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Tamuz\r\nDTSTART;VALUE=DATE:20260613\r\nDTEND;VALUE=DATE:20260614\r\nUID:hebcal-20260613-cdc33b62\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Tamuz: Monday\\, 6:46am and 16 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260613T180400\r\nDTEND;TZID=America/Sao_Paulo:20260613T180400\r\nUID:hebcal-20260613-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Tamuz\r\nDTSTART;VALUE=DATE:20260615\r\nDTEND;VALUE=DATE:20260616\r\nUID:hebcal-20260615-e57e8b15\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Tammuz on the Hebrew calendar. תַּמּ\r\n וּז (transliterated Tamuz or Tammuz) is the 10th month of the civil Heb\r\n rew year (11th on leap years) and the 4th month of the biblical Hebrew yea\r\n r. It has 29 days and corresponds to June or July on the Gregorian calenda\r\n r. רֹאשׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\\r\n , is a minor holiday that occurs at the beginning of every month in the He\r\n brew calendar. It is marked by the birth of a new moon\\n\\nTorah: Numbers 2\r\n 8:1-15\\n\\nhttps://hebcal.com/h/rosh-chodesh-tamuz-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Tamuz\r\nDTSTART;VALUE=DATE:20260616\r\nDTEND;VALUE=DATE:20260617\r\nUID:hebcal-20260616-e57e8b15\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Tammuz on the Hebrew calendar. תַּמּ\r\n וּז (transliterated Tamuz or Tammuz) is the 10th month of the civil Heb\r\n rew year (11th on leap years) and the 4th month of the biblical Hebrew yea\r\n r. It has 29 days and corresponds to June or July on the Gregorian calenda\r\n r. רֹאשׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\\r\n , is a minor holiday that occurs at the beginning of every month in the He\r\n brew calendar. It is marked by the birth of a new moon\\n\\nTorah: Numbers 2\r\n 8:1-15\\n\\nhttps://hebcal.com/h/rosh-chodesh-tamuz-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260619T171000\r\nDTEND;TZID=America/Sao_Paulo:20260619T171000\r\nUID:hebcal-20260619-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Korach\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Korach\r\nDTSTART;VALUE=DATE:20260620\r\nDTEND;VALUE=DATE:20260621\r\nUID:hebcal-20260620-a23938d3\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 16:1-18:32\\nHaftarah: I Samuel 11:14-12:22\\n\\nh\r\n ttps://hebcal.com/s/5786/38?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260620T180500\r\nDTEND;TZID=America/Sao_Paulo:20260620T180500\r\nUID:hebcal-20260620-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260626T171200\r\nDTEND;TZID=America/Sao_Paulo:20260626T171200\r\nUID:hebcal-20260626-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Chukat-Balak\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Chukat-Balak\r\nDTSTART;VALUE=DATE:20260627\r\nDTEND;VALUE=DATE:20260628\r\nUID:hebcal-20260627-44409c12\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 19:1-25:9\\nHaftarah: Micah 5:6-6:8\\n\\nhttps://h\r\n ebcal.com/s/5786/39d?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260627T180700\r\nDTEND;TZID=America/Sao_Paulo:20260627T180700\r\nUID:hebcal-20260627-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast begins\r\nDTSTART;TZID=America/Sao_Paulo:20260702T053800\r\nDTEND;TZID=America/Sao_Paulo:20260702T053800\r\nUID:hebcal-20260702-fd646bb5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Tzom Tammuz\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Tzom Tammuz\r\nDTSTART;VALUE=DATE:20260702\r\nDTEND;VALUE=DATE:20260703\r\nUID:hebcal-20260702-227143a8\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Fast commemorating breaching of the walls of Jerusalem before \r\n the destruction of the Second Temple\\n\\nTorah: Exodus 32:11-14\\, 34:1-10\\n\r\n \\nhttps://hebcal.com/h/tzom-tammuz-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast ends\r\nDTSTART;TZID=America/Sao_Paulo:20260702T180200\r\nDTEND;TZID=America/Sao_Paulo:20260702T180200\r\nUID:hebcal-20260702-82e6d873-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Tzom Tammuz\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260703T171400\r\nDTEND;TZID=America/Sao_Paulo:20260703T171400\r\nUID:hebcal-20260703-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Pinchas\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Pinchas\r\nDTSTART;VALUE=DATE:20260704\r\nDTEND;VALUE=DATE:20260705\r\nUID:hebcal-20260704-06a11ba4\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 25:10-30:1\\nHaftarah: Jeremiah 1:1-2:3 | Pincha\r\n s occurring after 17 Tammuz\\n\\nhttps://hebcal.com/s/5786/41?us=api&um=ical\r\n endar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260704T180900\r\nDTEND;TZID=America/Sao_Paulo:20260704T180900\r\nUID:hebcal-20260704-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260710T171700\r\nDTEND;TZID=America/Sao_Paulo:20260710T171700\r\nUID:hebcal-20260710-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Matot-Masei\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Matot-Masei\r\nDTSTART;VALUE=DATE:20260711\r\nDTEND;VALUE=DATE:20260712\r\nUID:hebcal-20260711-fa9f2fc8\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Numbers 30:2-36:13\\nHaftarah: Jeremiah 2:4-28\\, 3:4\\nHa\r\n ftarah for Sephardim: Jeremiah 2:4-28\\, 4:1-2\\n\\nhttps://hebcal.com/s/5786\r\n /42d?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Av\r\nDTSTART;VALUE=DATE:20260711\r\nDTEND;VALUE=DATE:20260712\r\nUID:hebcal-20260711-cd524889\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Av: Tuesday\\, 7:30pm and 17 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260711T181200\r\nDTEND;TZID=America/Sao_Paulo:20260711T181200\r\nUID:hebcal-20260711-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Av\r\nDTSTART;VALUE=DATE:20260715\r\nDTEND;VALUE=DATE:20260716\r\nUID:hebcal-20260715-b20a292a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Av on the Hebrew calendar. Av (אָב) is th\r\n e 11th month of the civil Hebrew year (12th on leap years) and the 5th mon\r\n th of the biblical Hebrew year. It has 30 days and corresponds to July or \r\n August on the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\, transliterat\r\n ed Rosh Chodesh or Rosh Hodesh\\, is a minor holiday that occurs at the beg\r\n inning of every month in the Hebrew calendar. It is marked by the birth of\r\n  a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal.com/h/rosh-chodesh\r\n -av-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260717T172000\r\nDTEND;TZID=America/Sao_Paulo:20260717T172000\r\nUID:hebcal-20260717-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Devarim\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Chazon\r\nDTSTART;VALUE=DATE:20260718\r\nDTEND;VALUE=DATE:20260719\r\nUID:hebcal-20260718-40fb55a8\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat of Prophecy/Shabbat of Vision. Shabbat before Tish’a\r\n  B’Av\\n\\nhttps://hebcal.com/h/shabbat-chazon-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Devarim\r\nDTSTART;VALUE=DATE:20260718\r\nDTEND;VALUE=DATE:20260719\r\nUID:hebcal-20260718-a3366030\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 1:1-3:22\\nHaftarah: Isaiah 1:1-27\\n\\nhttps:\r\n //hebcal.com/s/5786/44?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260718T181400\r\nDTEND;TZID=America/Sao_Paulo:20260718T181400\r\nUID:hebcal-20260718-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast begins\r\nDTSTART;TZID=America/Sao_Paulo:20260722T174000\r\nDTEND;TZID=America/Sao_Paulo:20260722T174000\r\nUID:hebcal-20260722-fd646bb5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Erev Tish’a B’Av\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Tish’a B’Av\r\nDTSTART;VALUE=DATE:20260722\r\nDTEND;VALUE=DATE:20260723\r\nUID:hebcal-20260722-16aac1cb\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:The Ninth of Av. Fast commemorating the destruction of the two\r\n  Temples\\n\\nTorah: Lamentations 1:1-5:22\\n\\nhttps://hebcal.com/h/tisha-bav\r\n -2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Tish’a B’Av\r\nDTSTART;VALUE=DATE:20260723\r\nDTEND;VALUE=DATE:20260724\r\nUID:hebcal-20260723-1fe8650c\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:The Ninth of Av. Fast commemorating the destruction of the two\r\n  Temples\\n\\nTorah: Deuteronomy 4:25-40\\; Lamentations 1:1-5:22\\nHaftarah: \r\n Jeremiah 8:13-9:23\\n\\nhttps://hebcal.com/h/tisha-bav-2026?us=api&um=icalen\r\n dar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast ends\r\nDTSTART;TZID=America/Sao_Paulo:20260723T181000\r\nDTEND;TZID=America/Sao_Paulo:20260723T181000\r\nUID:hebcal-20260723-82e6d873-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Tish’a B’Av\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260724T172300\r\nDTEND;TZID=America/Sao_Paulo:20260724T172300\r\nUID:hebcal-20260724-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vaetchanan\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Nachamu\r\nDTSTART;VALUE=DATE:20260725\r\nDTEND;VALUE=DATE:20260726\r\nUID:hebcal-20260725-57d358fc\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat after Tish’a B’Av (Shabbat of Consolation). The fi\r\n rst of seven Shabbatot leading up to Rosh Hashanah. Named after the Haftar\r\n ah (from Isaiah 40) which begins with the verse נַחֲמוּ נַחֲמ\r\n וּ\\, עַמִּי (“Comfort\\, oh comfort my people”)\\n\\nhttps://hebc\r\n al.com/h/shabbat-nachamu-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vaetchanan\r\nDTSTART;VALUE=DATE:20260725\r\nDTEND;VALUE=DATE:20260726\r\nUID:hebcal-20260725-e3f209fb\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 3:23-7:11\\nHaftarah: Isaiah 40:1-26\\n\\nhttp\r\n s://hebcal.com/s/5786/45?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260725T181700\r\nDTEND;TZID=America/Sao_Paulo:20260725T181700\r\nUID:hebcal-20260725-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Tu B’Av\r\nDTSTART;VALUE=DATE:20260729\r\nDTEND;VALUE=DATE:20260730\r\nUID:hebcal-20260729-ccea991a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Minor Jewish holiday of love. Observed on the 15th day of the \r\n Hebrew month of Av\\n\\nhttps://hebcal.com/h/tu-bav-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260731T172600\r\nDTEND;TZID=America/Sao_Paulo:20260731T172600\r\nUID:hebcal-20260731-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Eikev\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Eikev\r\nDTSTART;VALUE=DATE:20260801\r\nDTEND;VALUE=DATE:20260802\r\nUID:hebcal-20260801-727edc95\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 7:12-11:25\\nHaftarah: Isaiah 49:14-51:3\\n\\n\r\n https://hebcal.com/s/5786/46?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260801T182000\r\nDTEND;TZID=America/Sao_Paulo:20260801T182000\r\nUID:hebcal-20260801-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260807T172800\r\nDTEND;TZID=America/Sao_Paulo:20260807T172800\r\nUID:hebcal-20260807-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Re’eh\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Re’eh\r\nDTSTART;VALUE=DATE:20260808\r\nDTEND;VALUE=DATE:20260809\r\nUID:hebcal-20260808-52972ead\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 11:26-16:17\\nHaftarah: Isaiah 54:11-55:5\\n\\\r\n nhttps://hebcal.com/s/5786/47?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Elul\r\nDTSTART;VALUE=DATE:20260808\r\nDTEND;VALUE=DATE:20260809\r\nUID:hebcal-20260808-61fb928c\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Elul: Thursday\\, 8:15am\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260808T182200\r\nDTEND;TZID=America/Sao_Paulo:20260808T182200\r\nUID:hebcal-20260808-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Elul\r\nDTSTART;VALUE=DATE:20260813\r\nDTEND;VALUE=DATE:20260814\r\nUID:hebcal-20260813-4a2abce2\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Elul on the Hebrew calendar. Elul (אֱל\r\n וּל) is the 12th month of the civil Hebrew year (13th on leap years) an\r\n d the 6th month of the biblical Hebrew year. It has 29 days and correspond\r\n s to August or September on the Gregorian calendar. רֹאשׁ חוֹדֶ\r\n שׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, is a minor holiday tha\r\n t occurs at the beginning of every month in the Hebrew calendar. It is mar\r\n ked by the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal\r\n .com/h/rosh-chodesh-elul-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Hashana LaBehemot\r\nDTSTART;VALUE=DATE:20260814\r\nDTEND;VALUE=DATE:20260815\r\nUID:hebcal-20260814-0a58fcce\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:New Year for Tithing Animals\\n\\nhttps://hebcal.com/h/rosh-hash\r\n ana-labehemot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Elul\r\nDTSTART;VALUE=DATE:20260814\r\nDTEND;VALUE=DATE:20260815\r\nUID:hebcal-20260814-4a2abce2\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Elul on the Hebrew calendar. Elul (אֱל\r\n וּל) is the 12th month of the civil Hebrew year (13th on leap years) an\r\n d the 6th month of the biblical Hebrew year. It has 29 days and correspond\r\n s to August or September on the Gregorian calendar. רֹאשׁ חוֹדֶ\r\n שׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, is a minor holiday tha\r\n t occurs at the beginning of every month in the Hebrew calendar. It is mar\r\n ked by the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal\r\n .com/h/rosh-chodesh-elul-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260814T173100\r\nDTEND;TZID=America/Sao_Paulo:20260814T173100\r\nUID:hebcal-20260814-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Shoftim\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Shoftim\r\nDTSTART;VALUE=DATE:20260815\r\nDTEND;VALUE=DATE:20260816\r\nUID:hebcal-20260815-70e24d65\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 16:18-21:9\\nHaftarah: Isaiah 51:12-52:12\\n\\\r\n nhttps://hebcal.com/s/5786/48?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260815T182400\r\nDTEND;TZID=America/Sao_Paulo:20260815T182400\r\nUID:hebcal-20260815-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260821T173400\r\nDTEND;TZID=America/Sao_Paulo:20260821T173400\r\nUID:hebcal-20260821-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Ki Teitzei\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Ki Teitzei\r\nDTSTART;VALUE=DATE:20260822\r\nDTEND;VALUE=DATE:20260823\r\nUID:hebcal-20260822-e24e254a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 21:10-25:19\\nHaftarah: Isaiah 54:1-10\\n\\nht\r\n tps://hebcal.com/s/5786/49?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260822T182700\r\nDTEND;TZID=America/Sao_Paulo:20260822T182700\r\nUID:hebcal-20260822-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260828T173600\r\nDTEND;TZID=America/Sao_Paulo:20260828T173600\r\nUID:hebcal-20260828-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Ki Tavo\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Ki Tavo\r\nDTSTART;VALUE=DATE:20260829\r\nDTEND;VALUE=DATE:20260830\r\nUID:hebcal-20260829-e8a98b00\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 26:1-29:8\\nHaftarah: Isaiah 60:1-22\\n\\nhttp\r\n s://hebcal.com/s/5786/50?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260829T182900\r\nDTEND;TZID=America/Sao_Paulo:20260829T182900\r\nUID:hebcal-20260829-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260904T173800\r\nDTEND;TZID=America/Sao_Paulo:20260904T173800\r\nUID:hebcal-20260904-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Nitzavim-Vayeilech\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Leil Selichot\r\nDTSTART;VALUE=DATE:20260905\r\nDTEND;VALUE=DATE:20260906\r\nUID:hebcal-20260905-121db6a8\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Prayers for forgiveness in preparation for the High Holidays\\n\r\n \\nhttps://hebcal.com/h/leil-selichot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Nitzavim-Vayeilech\r\nDTSTART;VALUE=DATE:20260905\r\nDTEND;VALUE=DATE:20260906\r\nUID:hebcal-20260905-b7fe4e02\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 29:9-31:30\\nHaftarah: Isaiah 61:10-63:9\\n\\n\r\n https://hebcal.com/s/5786/51d?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260905T183100\r\nDTEND;TZID=America/Sao_Paulo:20260905T183100\r\nUID:hebcal-20260905-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Rosh Hashana\r\nDTSTART;VALUE=DATE:20260911\r\nDTEND;VALUE=DATE:20260912\r\nUID:hebcal-20260911-69c47b58\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:The Jewish New Year. Also spelled Rosh Hashanah\\n\\nhttps://heb\r\n cal.com/h/rosh-hashana-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260911T174100\r\nDTEND;TZID=America/Sao_Paulo:20260911T174100\r\nUID:hebcal-20260911-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Hashana 5787\r\nDTSTART;VALUE=DATE:20260912\r\nDTEND;VALUE=DATE:20260913\r\nUID:hebcal-20260912-105e5259\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:The Jewish New Year. Also spelled Rosh Hashanah\\n\\nTorah: Gene\r\n sis 21:1-34\\; Numbers 29:1-6\\nHaftarah: I Samuel 1:1-2:10\\n\\nhttps://hebca\r\n l.com/h/rosh-hashana-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260912T183300\r\nDTEND;TZID=America/Sao_Paulo:20260912T183300\r\nUID:hebcal-20260912-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Hashana II\r\nDTSTART;VALUE=DATE:20260913\r\nDTEND;VALUE=DATE:20260914\r\nUID:hebcal-20260913-e24e7167\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:The Jewish New Year. Also spelled Rosh Hashanah\\n\\nTorah: Gene\r\n sis 22:1-24\\; Numbers 29:1-6\\nHaftarah: Jeremiah 31:2-20\\n\\nhttps://hebcal\r\n .com/h/rosh-hashana-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260913T183300\r\nDTEND;TZID=America/Sao_Paulo:20260913T183300\r\nUID:hebcal-20260913-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast begins\r\nDTSTART;TZID=America/Sao_Paulo:20260914T045800\r\nDTEND;TZID=America/Sao_Paulo:20260914T045800\r\nUID:hebcal-20260914-fd646bb5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Tzom Gedaliah\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Tzom Gedaliah\r\nDTSTART;VALUE=DATE:20260914\r\nDTEND;VALUE=DATE:20260915\r\nUID:hebcal-20260914-398de2df\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Fast of the Seventh Month. Commemorates the assassination of t\r\n he Jewish governor of Judah\\n\\nTorah: Exodus 32:11-14\\, 34:1-10\\n\\nhttps:/\r\n /hebcal.com/h/tzom-gedaliah-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast ends\r\nDTSTART;TZID=America/Sao_Paulo:20260914T182700\r\nDTEND;TZID=America/Sao_Paulo:20260914T182700\r\nUID:hebcal-20260914-82e6d873-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Tzom Gedaliah\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260918T174300\r\nDTEND;TZID=America/Sao_Paulo:20260918T174300\r\nUID:hebcal-20260918-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Ha’azinu\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shabbat Shuva\r\nDTSTART;VALUE=DATE:20260919\r\nDTEND;VALUE=DATE:20260920\r\nUID:hebcal-20260919-e3c3a1e4\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Shabbat of Returning. Shabbat that occurs during the Ten Days \r\n of Repentance between Rosh Hashanah and Yom Kippur\\n\\nHaftarah: Hosea 14:2\r\n -10\\; Micah 7:18-20\\; Joel 2:15-27\\n\\nhttps://hebcal.com/h/shabbat-shuva-2\r\n 026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Ha’azinu\r\nDTSTART;VALUE=DATE:20260919\r\nDTEND;VALUE=DATE:20260920\r\nUID:hebcal-20260919-09a06ed0\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Deuteronomy 32:1-52\\nHaftarah: Hosea 14:2-10\\; Joel 2:1\r\n 5-27 | Shabbat Shuva (with Ha'azinu)\\nHaftarah for Sephardim: Hosea 14:2-1\r\n 0\\; Micah 7:18-20\\n\\nhttps://hebcal.com/s/5787/53?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260919T183500\r\nDTEND;TZID=America/Sao_Paulo:20260919T183500\r\nUID:hebcal-20260919-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Yom Kippur\r\nDTSTART;VALUE=DATE:20260920\r\nDTEND;VALUE=DATE:20260921\r\nUID:hebcal-20260920-821e8c6f\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Evening of Yom Kippur (Day of Atonement)\\, which includes the \r\n Kol Nidre service. The Yom Kippur fast begins at sundown and continues for\r\n  25 hours\\n\\nhttps://hebcal.com/h/yom-kippur-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260920T174400\r\nDTEND;TZID=America/Sao_Paulo:20260920T174400\r\nUID:hebcal-20260920-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Yom Kippur\r\nDTSTART;VALUE=DATE:20260921\r\nDTEND;VALUE=DATE:20260922\r\nUID:hebcal-20260921-3eebed91\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Day of Atonement. The holiest day of the year in Judaism\\, tra\r\n ditionally observed with a 25-hour period of fasting and intensive prayer\\\r\n n\\nTorah: Leviticus 16:1-34\\; Numbers 29:7-11\\nHaftarah: Isaiah 57:14-58:1\r\n 4\\n\\nhttps://hebcal.com/h/yom-kippur-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260921T183600\r\nDTEND;TZID=America/Sao_Paulo:20260921T183600\r\nUID:hebcal-20260921-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Erev Sukkot\r\nDTSTART;VALUE=DATE:20260925\r\nDTEND;VALUE=DATE:20260926\r\nUID:hebcal-20260925-2e047aaf\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nhttps://hebcal.com/h/sukkot-2026?us=api&\r\n um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260925T174500\r\nDTEND;TZID=America/Sao_Paulo:20260925T174500\r\nUID:hebcal-20260925-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot I\r\nDTSTART;VALUE=DATE:20260926\r\nDTEND;VALUE=DATE:20260927\r\nUID:hebcal-20260926-3b6b9611\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Leviticus 22:26-23:44\\; Numbers 2\r\n 9:12-16\\nHaftarah: Zechariah 14:1-21\\n\\nhttps://hebcal.com/h/sukkot-2026?u\r\n s=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20260926T183800\r\nDTEND;TZID=America/Sao_Paulo:20260926T183800\r\nUID:hebcal-20260926-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot II\r\nDTSTART;VALUE=DATE:20260927\r\nDTEND;VALUE=DATE:20260928\r\nUID:hebcal-20260927-dd814373\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Leviticus 22:26-23:44\\; Numbers 2\r\n 9:12-16\\nHaftarah: I Kings 8:2-21\\n\\nhttps://hebcal.com/h/sukkot-2026?us=a\r\n pi&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20260927T183800\r\nDTEND;TZID=America/Sao_Paulo:20260927T183800\r\nUID:hebcal-20260927-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot III (CH’’M)\r\nDTSTART;VALUE=DATE:20260928\r\nDTEND;VALUE=DATE:20260929\r\nUID:hebcal-20260928-5e93ab94\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Numbers 29:17-25\\, 29:17-22\\n\\nht\r\n tps://hebcal.com/h/sukkot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot IV (CH’’M)\r\nDTSTART;VALUE=DATE:20260929\r\nDTEND;VALUE=DATE:20260930\r\nUID:hebcal-20260929-ffda39c9\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Numbers 29:20-28\\, 29:20-25\\n\\nht\r\n tps://hebcal.com/h/sukkot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot V (CH’’M)\r\nDTSTART;VALUE=DATE:20260930\r\nDTEND;VALUE=DATE:20261001\r\nUID:hebcal-20260930-68c6e88e\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Numbers 29:23-31\\, 29:23-28\\n\\nht\r\n tps://hebcal.com/h/sukkot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot VI (CH’’M)\r\nDTSTART;VALUE=DATE:20261001\r\nDTEND;VALUE=DATE:20261002\r\nUID:hebcal-20261001-698f117c\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Numbers 29:26-34\\, 29:26-31\\n\\nht\r\n tps://hebcal.com/h/sukkot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sukkot VII (Hoshana Raba)\r\nDTSTART;VALUE=DATE:20261002\r\nDTEND;VALUE=DATE:20261003\r\nUID:hebcal-20261002-f5de0f6c\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Feast of Booths. Also called the Feast of Tabernacles\\, the se\r\n ven-day holiday is one of the Three Pilgrimage Festivals (Hebrew: שלוש\r\n  רגלים\\, shalosh regalim)\\n\\nTorah: Numbers 29:26-34\\n\\nhttps://hebca\r\n l.com/h/sukkot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261002T174800\r\nDTEND;TZID=America/Sao_Paulo:20261002T174800\r\nUID:hebcal-20261002-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Shmini Atzeret\r\nDTSTART;VALUE=DATE:20261003\r\nDTEND;VALUE=DATE:20261004\r\nUID:hebcal-20261003-e6edcf39\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Eighth Day of Assembly. Immediately following Sukkot\\, it is o\r\n bserved as a separate holiday in the Diaspora and is combined with Simchat\r\n  Torah in Israel\\n\\nTorah: Deuteronomy 14:22-16:17\\; Numbers 29:35-30:1\\; \r\n Ecclesiastes 1:1-12:14\\nHaftarah: I Kings 8:54-66\\n\\nhttps://hebcal.com/h/\r\n shmini-atzeret-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261003T184000\r\nDTEND;TZID=America/Sao_Paulo:20261003T184000\r\nUID:hebcal-20261003-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Simchat Torah\r\nDTSTART;VALUE=DATE:20261004\r\nDTEND;VALUE=DATE:20261005\r\nUID:hebcal-20261004-952508c2\r\nTRANSP:OPAQUE\r\nX-MICROSOFT-CDO-BUSYSTATUS:OOF\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Day of Celebrating the Torah. Celebration marking the conclusi\r\n on of the annual cycle of public Torah readings\\, and the beginning of a n\r\n ew cycle\\n\\nTorah: Deuteronomy 33:1-34:12\\; Genesis 1:1-2:3\\; Numbers 29:3\r\n 5-30:1\\nHaftarah: Joshua 1:1-18\\n\\nhttps://hebcal.com/h/simchat-torah-2026\r\n ?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261004T184100\r\nDTEND;TZID=America/Sao_Paulo:20261004T184100\r\nUID:hebcal-20261004-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261009T175000\r\nDTEND;TZID=America/Sao_Paulo:20261009T175000\r\nUID:hebcal-20261009-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Bereshit\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Bereshit\r\nDTSTART;VALUE=DATE:20261010\r\nDTEND;VALUE=DATE:20261011\r\nUID:hebcal-20261010-d34ff3c5\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 1:1-6:8\\nHaftarah: I Samuel 20:18-42 | Shabbat \r\n Machar Chodesh\\n\\nhttps://hebcal.com/s/5787/1?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Cheshvan\r\nDTSTART;VALUE=DATE:20261010\r\nDTEND;VALUE=DATE:20261011\r\nUID:hebcal-20261010-864cf86a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Cheshvan: Sunday\\, 9:43am and 2 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261010T184300\r\nDTEND;TZID=America/Sao_Paulo:20261010T184300\r\nUID:hebcal-20261010-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Cheshvan\r\nDTSTART;VALUE=DATE:20261011\r\nDTEND;VALUE=DATE:20261012\r\nUID:hebcal-20261011-6fbbc895\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Cheshvan on the Hebrew calendar. חֶשְׁ\r\n וָן (transliterated Cheshvan or Heshvan) is the 2nd month of the civil \r\n Hebrew year and the 8th month of the biblical Hebrew year. It has 29 or 30\r\n  days and corresponds to October or November on the Gregorian calendar. \r\n רֹאשׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, i\r\n s a minor holiday that occurs at the beginning of every month in the Hebre\r\n w calendar. It is marked by the birth of a new moon\\n\\nTorah: Numbers 28:1\r\n -15\\n\\nhttps://hebcal.com/h/rosh-chodesh-cheshvan-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Cheshvan\r\nDTSTART;VALUE=DATE:20261012\r\nDTEND;VALUE=DATE:20261013\r\nUID:hebcal-20261012-6fbbc895\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Cheshvan on the Hebrew calendar. חֶשְׁ\r\n וָן (transliterated Cheshvan or Heshvan) is the 2nd month of the civil \r\n Hebrew year and the 8th month of the biblical Hebrew year. It has 29 or 30\r\n  days and corresponds to October or November on the Gregorian calendar. \r\n רֹאשׁ חוֹדֶשׁ\\, transliterated Rosh Chodesh or Rosh Hodesh\\, i\r\n s a minor holiday that occurs at the beginning of every month in the Hebre\r\n w calendar. It is marked by the birth of a new moon\\n\\nTorah: Numbers 28:1\r\n -15\\n\\nhttps://hebcal.com/h/rosh-chodesh-cheshvan-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261016T175300\r\nDTEND;TZID=America/Sao_Paulo:20261016T175300\r\nUID:hebcal-20261016-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Noach\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Noach\r\nDTSTART;VALUE=DATE:20261017\r\nDTEND;VALUE=DATE:20261018\r\nUID:hebcal-20261017-4220ac24\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 6:9-11:32\\nHaftarah: Isaiah 54:1-55:5\\nHaftarah\r\n  for Sephardim: Isaiah 54:1-10\\n\\nhttps://hebcal.com/s/5787/2?us=api&um=ic\r\n alendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261017T184600\r\nDTEND;TZID=America/Sao_Paulo:20261017T184600\r\nUID:hebcal-20261017-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261023T175700\r\nDTEND;TZID=America/Sao_Paulo:20261023T175700\r\nUID:hebcal-20261023-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Lech-Lecha\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Lech-Lecha\r\nDTSTART;VALUE=DATE:20261024\r\nDTEND;VALUE=DATE:20261025\r\nUID:hebcal-20261024-ab308a6d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 12:1-17:27\\nHaftarah: Isaiah 40:27-41:16\\n\\nhtt\r\n ps://hebcal.com/s/5787/3?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261024T185000\r\nDTEND;TZID=America/Sao_Paulo:20261024T185000\r\nUID:hebcal-20261024-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261030T180000\r\nDTEND;TZID=America/Sao_Paulo:20261030T180000\r\nUID:hebcal-20261030-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayera\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayera\r\nDTSTART;VALUE=DATE:20261031\r\nDTEND;VALUE=DATE:20261101\r\nUID:hebcal-20261031-7b4e2bbb\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 18:1-22:24\\nHaftarah: II Kings 4:1-37\\nHaftarah\r\n  for Sephardim: II Kings 4:1-23\\n\\nhttps://hebcal.com/s/5787/4?us=api&um=i\r\n calendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261031T185500\r\nDTEND;TZID=America/Sao_Paulo:20261031T185500\r\nUID:hebcal-20261031-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261106T180500\r\nDTEND;TZID=America/Sao_Paulo:20261106T180500\r\nUID:hebcal-20261106-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Chayei Sara\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Chayei Sara\r\nDTSTART;VALUE=DATE:20261107\r\nDTEND;VALUE=DATE:20261108\r\nUID:hebcal-20261107-6fdad451\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 23:1-25:18\\nHaftarah: I Kings 1:1-31\\n\\nhttps:/\r\n /hebcal.com/s/5787/5?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Kislev\r\nDTSTART;VALUE=DATE:20261107\r\nDTEND;VALUE=DATE:20261108\r\nUID:hebcal-20261107-6ce4b2c3\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Kislev: Monday\\, 10:27pm and 3 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261107T185900\r\nDTEND;TZID=America/Sao_Paulo:20261107T185900\r\nUID:hebcal-20261107-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Sigd\r\nDTSTART;VALUE=DATE:20261109\r\nDTEND;VALUE=DATE:20261110\r\nUID:hebcal-20261109-3079e054\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Ethiopian Jewish holiday occurring 50 days after Yom Kippur\\n\\\r\n nhttps://hebcal.com/h/sigd-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Kislev\r\nDTSTART;VALUE=DATE:20261110\r\nDTEND;VALUE=DATE:20261111\r\nUID:hebcal-20261110-171af096\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Kislev on the Hebrew calendar. Kislev (\r\n כִּסְלֵו) is the 3rd month of the civil Hebrew year and the 9th mo\r\n nth of the biblical Hebrew year. It has 30 or 29 days and corresponds to N\r\n ovember or December on the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\,\r\n  transliterated Rosh Chodesh or Rosh Hodesh\\, is a minor holiday that occu\r\n rs at the beginning of every month in the Hebrew calendar. It is marked by\r\n  the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal.com/h\r\n /rosh-chodesh-kislev-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Kislev\r\nDTSTART;VALUE=DATE:20261111\r\nDTEND;VALUE=DATE:20261112\r\nUID:hebcal-20261111-171af096\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Kislev on the Hebrew calendar. Kislev (\r\n כִּסְלֵו) is the 3rd month of the civil Hebrew year and the 9th mo\r\n nth of the biblical Hebrew year. It has 30 or 29 days and corresponds to N\r\n ovember or December on the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\,\r\n  transliterated Rosh Chodesh or Rosh Hodesh\\, is a minor holiday that occu\r\n rs at the beginning of every month in the Hebrew calendar. It is marked by\r\n  the birth of a new moon\\n\\nTorah: Numbers 28:1-15\\n\\nhttps://hebcal.com/h\r\n /rosh-chodesh-kislev-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261113T180900\r\nDTEND;TZID=America/Sao_Paulo:20261113T180900\r\nUID:hebcal-20261113-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Toldot\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Toldot\r\nDTSTART;VALUE=DATE:20261114\r\nDTEND;VALUE=DATE:20261115\r\nUID:hebcal-20261114-7a5866da\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 25:19-28:9\\nHaftarah: Malachi 1:1-2:7\\n\\nhttps:\r\n //hebcal.com/s/5787/6?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261114T190400\r\nDTEND;TZID=America/Sao_Paulo:20261114T190400\r\nUID:hebcal-20261114-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261120T181400\r\nDTEND;TZID=America/Sao_Paulo:20261120T181400\r\nUID:hebcal-20261120-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayetzei\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayetzei\r\nDTSTART;VALUE=DATE:20261121\r\nDTEND;VALUE=DATE:20261122\r\nUID:hebcal-20261121-b5f27b2a\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 28:10-32:3\\nHaftarah: Hosea 12:13-14:10\\nHaftar\r\n ah for Sephardim: Hosea 11:7-12:12\\n\\nhttps://hebcal.com/s/5787/7?us=api&u\r\n m=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261121T191000\r\nDTEND;TZID=America/Sao_Paulo:20261121T191000\r\nUID:hebcal-20261121-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261127T181900\r\nDTEND;TZID=America/Sao_Paulo:20261127T181900\r\nUID:hebcal-20261127-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayishlach\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayishlach\r\nDTSTART;VALUE=DATE:20261128\r\nDTEND;VALUE=DATE:20261129\r\nUID:hebcal-20261128-2bda4adf\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 32:4-36:43\\nHaftarah: Obadiah 1:1-21\\n\\nhttps:/\r\n /hebcal.com/s/5787/8?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261128T191500\r\nDTEND;TZID=America/Sao_Paulo:20261128T191500\r\nUID:hebcal-20261128-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 1 Candle\r\nDTSTART;TZID=America/Sao_Paulo:20261204T182400\r\nDTEND;TZID=America/Sao_Paulo:20261204T182400\r\nUID:hebcal-20261204-1c6fa26d-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261204T182400\r\nDTEND;TZID=America/Sao_Paulo:20261204T182400\r\nUID:hebcal-20261204-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayeshev\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 2 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261205T192000\r\nDTEND;TZID=America/Sao_Paulo:20261205T192000\r\nUID:hebcal-20261205-bf71330e-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayeshev\r\nDTSTART;VALUE=DATE:20261205\r\nDTEND;VALUE=DATE:20261206\r\nUID:hebcal-20261205-b2a8edf8\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 37:1-40:23\\; Numbers 7:1-17\\nHaftarah: Zecharia\r\n h 2:14-4:7 | Chanukah Day 1 (on Shabbat)\\n\\nhttps://hebcal.com/s/5787/9?us\r\n =api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Mevarchim Chodesh Tevet\r\nDTSTART;VALUE=DATE:20261205\r\nDTEND;VALUE=DATE:20261206\r\nUID:hebcal-20261205-e0441a9f\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Molad Tevet: Wednesday\\, 11:11am and 4 chalakim\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261205T192000\r\nDTEND;TZID=America/Sao_Paulo:20261205T192000\r\nUID:hebcal-20261205-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 3 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261206T190100\r\nDTEND;TZID=America/Sao_Paulo:20261206T190100\r\nUID:hebcal-20261206-3a5e82d5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 4 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261207T190100\r\nDTEND;TZID=America/Sao_Paulo:20261207T190100\r\nUID:hebcal-20261207-8341b82a-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 5 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261208T190200\r\nDTEND;TZID=America/Sao_Paulo:20261208T190200\r\nUID:hebcal-20261208-841127b9-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 6 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261209T190300\r\nDTEND;TZID=America/Sao_Paulo:20261209T190300\r\nUID:hebcal-20261209-9733c9a9-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chag HaBanot\r\nDTSTART;VALUE=DATE:20261210\r\nDTEND;VALUE=DATE:20261211\r\nUID:hebcal-20261210-0139c73e\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:North African Chanukah festival of daughters. Called Eid al-Ba\r\n nat in Arabic\\, the holiday was most preserved in Tunisia\\n\\nhttps://hebca\r\n l.com/h/chag-habanot-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 7 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261210T190300\r\nDTEND;TZID=America/Sao_Paulo:20261210T190300\r\nUID:hebcal-20261210-635c3774-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Tevet\r\nDTSTART;VALUE=DATE:20261210\r\nDTEND;VALUE=DATE:20261211\r\nUID:hebcal-20261210-e83ced3d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Tevet on the Hebrew calendar. Tevet (טֵ\r\n בֵת) is the 4th month of the civil Hebrew year and the 10th month of th\r\n e biblical Hebrew year. It has 29 days and corresponds to December or Janu\r\n ary on the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\, transliterated \r\n Rosh Chodesh or Rosh Hodesh\\, is a minor holiday that occurs at the beginn\r\n ing of every month in the Hebrew calendar. It is marked by the birth of a \r\n new moon\\n\\nTorah: Numbers 28:1-15\\, 7:42-47\\n\\nhttps://hebcal.com/h/rosh-\r\n chodesh-tevet-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 8 Candles\r\nDTSTART;TZID=America/Sao_Paulo:20261211T182800\r\nDTEND;TZID=America/Sao_Paulo:20261211T182800\r\nUID:hebcal-20261211-d85c28dc-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nhttps://hebcal.com/h/chanukah-2026?u\r\n s=api&um=icalendar\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Rosh Chodesh Tevet\r\nDTSTART;VALUE=DATE:20261211\r\nDTEND;VALUE=DATE:20261212\r\nUID:hebcal-20261211-e83ced3d\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Start of month of Tevet on the Hebrew calendar. Tevet (טֵ\r\n בֵת) is the 4th month of the civil Hebrew year and the 10th month of th\r\n e biblical Hebrew year. It has 29 days and corresponds to December or Janu\r\n ary on the Gregorian calendar. רֹאשׁ חוֹדֶשׁ\\, transliterated \r\n Rosh Chodesh or Rosh Hodesh\\, is a minor holiday that occurs at the beginn\r\n ing of every month in the Hebrew calendar. It is marked by the birth of a \r\n new moon\\n\\nTorah: Numbers 28:1-15\\, 7:48-53\\n\\nhttps://hebcal.com/h/rosh-\r\n chodesh-tevet-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261211T182800\r\nDTEND;TZID=America/Sao_Paulo:20261211T182800\r\nUID:hebcal-20261211-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Miketz\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Chanukah: 8th Day\r\nDTSTART;VALUE=DATE:20261212\r\nDTEND;VALUE=DATE:20261213\r\nUID:hebcal-20261212-7c4cd5b6\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Hanukkah\\, the Jewish festival of rededication. Also known as \r\n the Festival of Lights\\, the eight-day festival is observed by lighting th\r\n e candles of a hanukkiah (menorah)\\n\\nHaftarah: I Kings 7:40-50\\n\\nhttps:/\r\n /hebcal.com/h/chanukah-2026?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Miketz\r\nDTSTART;VALUE=DATE:20261212\r\nDTEND;VALUE=DATE:20261213\r\nUID:hebcal-20261212-b3d4a417\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 41:1-44:17\\; Numbers 7:54-8:4\\nHaftarah: I King\r\n s 7:40-50 | Chanukah Day 8 (on Shabbat)\\n\\nhttps://hebcal.com/s/5787/10?us\r\n =api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261212T192500\r\nDTEND;TZID=America/Sao_Paulo:20261212T192500\r\nUID:hebcal-20261212-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261218T183200\r\nDTEND;TZID=America/Sao_Paulo:20261218T183200\r\nUID:hebcal-20261218-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayigash\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayigash\r\nDTSTART;VALUE=DATE:20261219\r\nDTEND;VALUE=DATE:20261220\r\nUID:hebcal-20261219-b9528bad\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 44:18-47:27\\nHaftarah: Ezekiel 37:15-28\\n\\nhttp\r\n s://hebcal.com/s/5787/11?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261219T192900\r\nDTEND;TZID=America/Sao_Paulo:20261219T192900\r\nUID:hebcal-20261219-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast begins\r\nDTSTART;TZID=America/Sao_Paulo:20261220T035900\r\nDTEND;TZID=America/Sao_Paulo:20261220T035900\r\nUID:hebcal-20261220-fd646bb5-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Asara B’Tevet\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Asara B’Tevet\r\nDTSTART;VALUE=DATE:20261220\r\nDTEND;VALUE=DATE:20261221\r\nUID:hebcal-20261220-16d2435e\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Fast commemorating the siege of Jerusalem\\n\\nTorah: Exodus 32:\r\n 11-14\\, 34:1-10\\n\\nhttps://hebcal.com/h/asara-btevet-20261220?us=api&um=ic\r\n alendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nSUMMARY:Fast ends\r\nDTSTART;TZID=America/Sao_Paulo:20261220T192300\r\nDTEND;TZID=America/Sao_Paulo:20261220T192300\r\nUID:hebcal-20261220-82e6d873-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Asara B’Tevet\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Candle lighting\r\nDTSTART;TZID=America/Sao_Paulo:20261225T183600\r\nDTEND;TZID=America/Sao_Paulo:20261225T183600\r\nUID:hebcal-20261225-37b70ea1-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Parashat Vayechi\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Event reminder\r\nTRIGGER:-P0DT0H10M0S\r\nEND:VALARM\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Parsha\r\nSUMMARY:Parashat Vayechi\r\nDTSTART;VALUE=DATE:20261226\r\nDTEND;VALUE=DATE:20261227\r\nUID:hebcal-20261226-34317a08\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nX-MICROSOFT-CDO-ALLDAYEVENT:TRUE\r\nCLASS:PUBLIC\r\nDESCRIPTION:Torah: Genesis 47:28-50:26\\nHaftarah: I Kings 2:1-12\\n\\nhttps:\r\n //hebcal.com/s/5787/12?us=api&um=icalendar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTAMP:20260308T083900Z\r\nCATEGORIES:Holiday\r\nSUMMARY:Havdalah\r\nDTSTART;TZID=America/Sao_Paulo:20261226T193300\r\nDTEND;TZID=America/Sao_Paulo:20261226T193300\r\nUID:hebcal-20261226-a35a8505-3448439\r\nTRANSP:TRANSPARENT\r\nX-MICROSOFT-CDO-BUSYSTATUS:FREE\r\nCLASS:PUBLIC\r\nLOCATION:São Paulo\r\nGEO:-23.5475;-46.63611\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
  },
  {
    "path": "packages/fixtures/ics/meetup-ny-tech.ics",
    "content": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Meetup//Meetup Calendar 1.0//EN\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nNAME:NY Tech Meetup\r\nX-WR-CALNAME:NY Tech Meetup\r\nBEGIN:VTIMEZONE\r\nTZID:America/New_York\r\nTZURL:http://tzurl.org/zoneinfo-outlook/America/New_York\r\nX-LIC-LOCATION:America/New_York\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:event_313545827@meetup.com\r\nSEQUENCE:1\r\nDTSTAMP:20260308T083902Z\r\nDTSTART;TZID=America/New_York:20260309T180000\r\nDTEND;TZID=America/New_York:20260309T213000\r\nSUMMARY:NY Tech Meetup\r\nDESCRIPTION:NY Tech Meetup\\nThe NY Tech Meetup returns on Monday\\, March 9\r\n  with a Space Tech Edition\\, bringing together the founders\\, engineers\\, \r\n researchers\\, and investors building what’s next beyond Earth.\\n​From \r\n robots to radiation protection\\, wireless power technology to deep space i\r\n nnovation and more. Come explore how NYC is contributing to the future of \r\n space.\\n​\\nCome for the innovation. Stay for the connections.\\n\\nLearn m\r\n ore and register [here](https://luma.com/taa36825)\r\nURL;VALUE=URI:https://www.meetup.com/ny-tech/events/313545827/\r\nSTATUS:CONFIRMED\r\nCREATED:20260226T212356Z\r\nLAST-MODIFIED:20260226T212356Z\r\nCLASS:PUBLIC\r\nEND:VEVENT\r\nX-ORIGINAL-URL:https://www.meetup.com/ny-tech/events/ical/\r\nX-WR-CALNAME:NY Tech Meetup\r\nEND:VCALENDAR"
  },
  {
    "path": "packages/fixtures/ics/meetup-torontojs.ics",
    "content": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Meetup//Meetup Calendar 1.0//EN\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nNAME:Toronto JavaScript\r\nX-WR-CALNAME:Toronto JavaScript\r\nBEGIN:VTIMEZONE\r\nTZID:America/Toronto\r\nTZURL:http://tzurl.org/zoneinfo-outlook/America/Toronto\r\nX-LIC-LOCATION:America/Toronto\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nTZNAME:EDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nTZNAME:EST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:event_313618512@meetup.com\r\nSEQUENCE:1\r\nDTSTAMP:20260308T083902Z\r\nDTSTART;TZID=America/Toronto:20260319T180000\r\nDTEND;TZID=America/Toronto:20260319T210000\r\nSUMMARY:TechTalk (In-Person) - March 2026\r\nDESCRIPTION:Toronto JavaScript\\nHere’s the March edition of our Tech Tal\r\n k event at Super.com on March 19\\, 2026\\n\\nJoin us for some drinks\\, snack\r\n s\\, and Tech Talks.\\n\\nMake sure to mark your calendars and come out and j\r\n oin us for this event!\\n\\n**🕑 Agenda & Schedule ✨**\\n\\n* 18:00 - Door\r\n s open\\n* 18:20 - Intro and announcements\\n* 18:30 - **Understanding envir\r\n onment variables in the Javascript ecosystem** by **[Evert Pot](https://ev\r\n ertpot.com/)**\\n*Abstract*: Environment variables are weird and can behave\r\n  confusingly. This talk is a pure coding talk that goes into what environm\r\n ent variables are\\, why they are and what they've become.\\nand how we can \r\n protect our pipelines moving forward.\\n* 19:00 - **TBD**\\n*Abstract*: TBD\\\r\n n* 19:30 - Networking\\n* 21:00 - Doors Close\\n\\n(**Note**: *All times in t\r\n he schedule are an approximation.*)\\n\\nPlease RSVP to confirm your attenda\r\n nce. If you have your friends or teammates joining please ask them to RSVP\r\n  as well.\\n\\nThis event is open to all skill levels.\\n\\nMany thanks to [Su\r\n per.com](Super.com) for hosting us!\\n\\nWe're looking for sponsors for even\r\n ts like these. If you or your company would like to support TorontoJS and \r\n get a message out to our community\\, please get in touch with organizers@t\r\n orontojs.com\\n\\nThe Code of Conduct is enforced at all TorontoJS events an\r\n d spaces - online or in-person.\\n\\nTorontoJS is a volunteer-led not-for-pr\r\n ofit organization.\\n\\n**Please help us** with tidying up. Otherwise\\, the \r\n venue staff and volunteers will have to pick up after you.\\n\\\\-\\\\-\\\\-\\n\\n#\r\n  **The Venue 🏠**\\n\\nThe venue is next door to Shoppers Drug Mart\\, a no\r\n ndescript door that you'll have to look for a little carefully.\\n\\\\-\\\\-\\\\-\r\n \\n*TorontoJS is committed to creating a safe and inclusive environment for\r\n  all. Our Code of Conduct applies both online and in person at all our eve\r\n nts and spaces.*\\n\\nSee you there! 🎉\r\nURL;VALUE=URI:https://www.meetup.com/torontojs/events/313618512/\r\nSTATUS:CONFIRMED\r\nCREATED:20260303T153206Z\r\nLAST-MODIFIED:20260303T153206Z\r\nCLASS:PUBLIC\r\nEND:VEVENT\r\nX-ORIGINAL-URL:https://www.meetup.com/torontojs/events/ical/\r\nX-WR-CALNAME:Toronto JavaScript\r\nEND:VCALENDAR"
  },
  {
    "path": "packages/fixtures/ics/outlook-exchange-windows-timezones.ics",
    "content": "BEGIN:VCALENDAR\nMETHOD:PUBLISH\nPRODID:Microsoft Exchange Server 2010\nVERSION:2.0\nX-WR-CALNAME:Calendar\nBEGIN:VTIMEZONE\nTZID:Eastern Standard Time\nBEGIN:STANDARD\nDTSTART:16010101T020000\nTZOFFSETFROM:-0400\nTZOFFSETTO:-0500\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11\nEND:STANDARD\nBEGIN:DAYLIGHT\nDTSTART:16010101T020000\nTZOFFSETFROM:-0500\nTZOFFSETTO:-0400\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTIMEZONE\nTZID:UTC\nBEGIN:STANDARD\nDTSTART:16010101T000000\nTZOFFSETFROM:+0000\nTZOFFSETTO:+0000\nEND:STANDARD\nBEGIN:DAYLIGHT\nDTSTART:16010101T000000\nTZOFFSETFROM:+0000\nTZOFFSETTO:+0000\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VTIMEZONE\nTZID:Central Standard Time\nBEGIN:STANDARD\nDTSTART:16010101T020000\nTZOFFSETFROM:-0500\nTZOFFSETTO:-0600\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11\nEND:STANDARD\nBEGIN:DAYLIGHT\nDTSTART:16010101T020000\nTZOFFSETFROM:-0600\nTZOFFSETTO:-0500\nRRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3\nEND:DAYLIGHT\nEND:VTIMEZONE\nBEGIN:VEVENT\nDESCRIPTION:One-time meeting\nUID:040000008200E00074C5B7101A82E00800000000A1B2C3D4E5F6A7B8\nSUMMARY:One-time Standup\nDTSTART;TZID=Eastern Standard Time:20260310T090000\nDTEND;TZID=Eastern Standard Time:20260310T093000\nCLASS:PUBLIC\nPRIORITY:5\nDTSTAMP:20260314T183308Z\nTRANSP:OPAQUE\nSTATUS:CONFIRMED\nSEQUENCE:0\nLOCATION:Microsoft Teams Meeting\nEND:VEVENT\nBEGIN:VEVENT\nDESCRIPTION:Weekly recurring meeting\nRRULE:FREQ=WEEKLY;UNTIL=20260803T180000Z;INTERVAL=1;BYDAY=MO;WKST=MO\nUID:040000008200E00074C5B7101A82E00800000000BEDC733A7C94DC010000000000000000100000007B019B7477C6D94EB9D36FFEACAD528B\nSUMMARY:Level of Care: Michael\\, Chris\nDTSTART;TZID=Eastern Standard Time:20260209T140000\nDTEND;TZID=Eastern Standard Time:20260209T143000\nCLASS:PUBLIC\nPRIORITY:5\nDTSTAMP:20260314T183308Z\nTRANSP:OPAQUE\nSTATUS:CONFIRMED\nSEQUENCE:1\nLOCATION:Microsoft Teams Meeting\nX-MICROSOFT-CDO-APPT-SEQUENCE:1\nX-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE\nX-MICROSOFT-CDO-INTENDEDSTATUS:BUSY\nX-MICROSOFT-CDO-ALLDAYEVENT:FALSE\nX-MICROSOFT-CDO-IMPORTANCE:1\nX-MICROSOFT-CDO-INSTTYPE:1\nX-MICROSOFT-DONOTFORWARDMEETING:FALSE\nX-MICROSOFT-DISALLOW-COUNTER:FALSE\nX-MICROSOFT-REQUESTEDATTENDANCEMODE:DEFAULT\nX-MICROSOFT-ISRESPONSEREQUESTED:FALSE\nEND:VEVENT\nBEGIN:VEVENT\nDESCRIPTION:Central time zone event\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE;WKST=MO\nUID:040000008200E00074C5B7101A82E00800000000C1D2E3F4A5B6C7D8\nSUMMARY:Central Team Sync\nDTSTART;TZID=Central Standard Time:20260211T100000\nDTEND;TZID=Central Standard Time:20260211T103000\nCLASS:PUBLIC\nPRIORITY:5\nDTSTAMP:20260314T183308Z\nTRANSP:OPAQUE\nSTATUS:CONFIRMED\nSEQUENCE:0\nLOCATION:Microsoft Teams Meeting\nEND:VEVENT\nEND:VCALENDAR\n"
  },
  {
    "path": "packages/fixtures/ics/stanford-featured-events.ics",
    "content": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nX-WR-CALNAME:Stanford University Calendar\r\nCALSCALE:GREGORIAN\r\nPRODID:iCalendar-Ruby\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Stanford Cardiothoracic Transplantation three-day symposium\r\n  will bring together the entire spectrum of the transplant team\\, including\r\n  cardiothoracic surgeons\\, pulmonologists\\, cardiologists\\, nurse specialis\r\n ts\\, transplant coordinators\\, pharmacists\\, and dieticians to showcase the\r\n  latest and upcoming breakthroughs in heart and lung transplantation. Topic\r\n s covered will include: heart and lung donor and recipient management\\, org\r\n an allocation policies\\, organ procurement techniques\\, new risk assessment\r\n  tools and diagnostic assays\\, updates in thoracic transplant recipient man\r\n agement and administrative aspects of successful thoracic transplant progra\r\n ms. Join us in shaping the future of cardiothoracic transplantation as we b\r\n ring together an array of expertise\\, innovation\\, and collaboration at thi\r\n s immersive symposium for all members of the transplant team.\\n\\nRegistrati\r\n on\\nRegistration Fees (Includes course materials\\, a welcome reception\\, da\r\n ily breakfast\\, and a certificate of participation)\\n\\nEarly Bird Rates -  \r\n Register through 12/15/2025 for the discounted rates.\\nPhysicians early - $\r\n 650 \\nNurses/AHPs Early - $475\\nIndustry - $1\\,500 \\n\\nRates after 12/15/20\r\n 25\\nPhysicians early - $800 \\nNurses/AHPs Early - $550\\nIndustry - $1\\,500 \r\n \\n\\nTuition may be paid by Visa or MasterCard. Your email address is used f\r\n or critical information\\, including registration confirmation\\, evaluation\\\r\n , and certificate. Be sure to include an email address that you check frequ\r\n ently.\\nSTAP-eligible employees can use STAP funds towards the registration\r\n  fees for this activity.  Complete the STAP Reimbursement Request Form and \r\n submit to your department administrator. \\n\\nA block of rooms has been rese\r\n rved at a reduced at the Grand Hyatt Vail\\, for conference participants on \r\n a first-come\\, first-serve basis and may sell out before January 16\\, 2026.\r\n  After this date\\, reservations will be accepted on a space available basis\r\n  and the group rate is no longer guaranteed. Reserve your room HERE.\\n\\nCre\r\n dits\\nAMA PRA Category 1 Credits™ (13.75 hours)\\, ANCC Contact Hours (13.75\r\n  hours)\\, Non-Physician Participation Credit (13.75 hours)\\n\\nTarget Audien\r\n ce\\nSpecialties - Cardiology\\, Cardiothoracic Surgery\\, Cardiovascular Heal\r\n th\\, Critical Care & Pulmonology\\nProfessions - Fellow/Resident\\, Non-Physi\r\n cian\\, Nurse\\, Physician\\, Student\\n\\nObjectives\\n\\nAt the conclusion of th\r\n is activity\\, learners should be able to:\\n\\nIdentify strategies for the op\r\n timal selection and management of heart and lung donors.Discuss the advance\r\n s in organ procurement and preservation.Assess the implementation and progr\r\n ess of allocation for thoracic organs.Evaluate new techniques\\, essays\\, an\r\n d studies for post-transplant monitoring.Address current controversies in r\r\n ecipient selection\\, organ allocation and transplant program metrics.Accred\r\n itation\\nIn support of improving patient care\\, Stanford Medicine is jointl\r\n y accredited by the Accreditation Council for Continuing Medical Education \r\n (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\, and the\r\n  American Nurses Credentialing Center (ANCC)\\, to provide continuing educat\r\n ion for the healthcare team. \\n\\nCredit Designation \\nAmerican Medical Asso\r\n ciation (AMA) \\nStanford Medicine designates this Live Activity for a maxim\r\n um of 13.75 AMA PRA Category 1 CreditsTM.  Physicians should claim only the\r\n  credit commensurate with the extent of their participation in the activity\r\n .\\n\\nAmerican Nurses Credentialing Center (ANCC)\\nStanford Medicine designa\r\n tes this live activity for a maximum of 13.75 ANCC contact hours.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260208\r\nGEO:39.636839;-106.40277\r\nLOCATION:Grand Hyatt\\, Vail\\, CO\r\nSEQUENCE:0\r\nSUMMARY:2026 Stanford Cardiothoracic Transplantation Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_50224272109577\r\nURL:https://events.stanford.edu/event/2026-stanford-cardiothoracic-transpla\r\n ntation-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260208\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264959207\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260208\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355483610\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260208\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101465537\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260208T180000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353474408\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260208T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T190000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809519468\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260209T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114914742\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Multifaith Service with Rabbi Ilana Goldhaber-Gordon\r\n \\, Associate Dean for Religious & Spiritual Life and Campus Rabbi\\, preachi\r\n ng.\\n\\nUniversity Public Worship gathers weekly for the religious\\, spiritu\r\n al\\, ethical\\, and moral formation of the Stanford community. Rooted in the\r\n  history and progressive Christian tradition of Stanford’s historic Memoria\r\n l Church\\, we cultivate a community of compassion and belonging through ecu\r\n menical Christian worship and occasional multifaith celebrations.\r\nDTEND:20260208T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Multifaith Service with Rabbi\r\n  Ilana Goldhaber-Gordon Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51889739249281\r\nURL:https://events.stanford.edu/event/upw-with-rabbi-ilana\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260208T213000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691936535\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260208T220000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682816394\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:在博物馆导览员的带领下，探索坎特艺术中心的收藏品。导览员将为您介绍来自不同文化和不同时期的精选作品。\\n\\n欢迎您参与对话，分\r\n 享您对游览过程中所探讨主题的想法，或者按照自己的舒适程度参与互动。\\n\\n导览免费，但需提前登记。请通过以下链接选择并 RSVP 您希望参加的日期。\\\r\n n\\nFebruary 8\\, 2026: https://thethirdplace.is/event/February\\n\\nMarch 8\\, \r\n 2026: https://thethirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thet\r\n hirdplace.is/event/April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/M\r\n ay\\n\\nJune 14\\, 2026: https://thethirdplace.is/event/June\\n\\n______________\r\n _____________________________\\n\\nExplore the Cantor's collections with a mu\r\n seum engagement guide who will lead you through a selection of works from d\r\n ifferent cultures and time periods.\\n\\n Participants are welcomed to partic\r\n ipate in the conversation and provide their thoughts on themes explored thr\r\n oughout the tour but are also free to engage at their own comfort level. \\n\r\n \\n Tours are free of charge but require advance registration. Please select\r\n  and RSVP for your preferred date using the links below.\\n\\nFebruary 8\\, 20\r\n 26: https://thethirdplace.is/event/February\\n\\nMarch 8\\, 2026: https://thet\r\n hirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thethirdplace.is/event\r\n /April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/May\\n\\nJune 14\\, 20\r\n 26: https://thethirdplace.is/event/June\r\nDTEND:20260208T230000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Chinese \r\nUID:tag:localist.com\\,2008:EventInstance_51897285067848\r\nURL:https://events.stanford.edu/event/public-tour-cantor-highlights-chinese\r\n -language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260208T233000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708308746\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260209T000000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668827628\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:Come and see the Seattle Seahawks go up against the New England\r\n  Patriots during the Bad Bunny concert.\\n\\nEnjoy the Super bowl in a sober \r\n setting with Cardinal Nights\\, Cardinal Recovery\\, and The Well House on Su\r\n nday Feb 8 at 3pm at The Well House! We will have free blankets for the fir\r\n st 75 attendees and free tacos. Come for the game\\, good vibes\\, and delici\r\n ous free food (and other free giveaways)!\\n\\nRSVP on Partiful\r\nDTEND:20260209T000000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T230000Z\r\nGEO:37.421896;-122.169177\r\nLOCATION:The Well House\r\nSEQUENCE:0\r\nSUMMARY:Sober Bowl \r\nUID:tag:localist.com\\,2008:EventInstance_52004909620412\r\nURL:https://events.stanford.edu/event/sober-bowl-6104\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:The PEERs and Cardinal Recovery from the Substance Use Programs\r\n \\, Education\\, and Resource (SUPER) office is partnering with Cardinal Nigh\r\n ts and the Well House to present the 5th Annual Sober Bowl watch party!\\n\\n\r\n Come enjoy the Super Bowl in an intentionally substance-free setting! We’ll\r\n  be showing the game on a giant inflatable screen right outside of the Well\r\n  House (yes—right next to Bob!).\\n\\nBring your friends\\, your game-day ener\r\n gy\\, and get ready for a fun\\, welcoming atmosphere! 🏈 🏆  📣  | RSVP HERE\\n\\\r\n nKick-off is at 3:30 PMCatered Made-to-Order Tacos (🔥) Free blankets for th\r\n e first 75 attendees! Please email alcohol@stanford.edu if you have any que\r\n stions.\r\nDTEND:20260209T003000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260208T233000Z\r\nGEO:37.421896;-122.169177\r\nLOCATION:The Well House\\, Right next to Bob (green area!)\r\nSEQUENCE:0\r\nSUMMARY:Sober Bowl Watch Party\r\nUID:tag:localist.com\\,2008:EventInstance_51932562616415\r\nURL:https://events.stanford.edu/event/superbowl-watch-party-join-us-for-a-s\r\n oberbowl-event\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260209T023000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T013000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_51986456234426\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance,Lecture/Presentation/Talk\r\nDESCRIPTION:How RADWIMPS Satoshi Yamaguchi Reclaimed Music Through Neurosci\r\n ence Research and Voice-Controlled Drums.\\n\\nThis lecture-performance focus\r\n es on the life lessons Satoshi Yamaguchi has learned through major turning \r\n points marked by both success and setback as a professional musician. Drawi\r\n ng on his personal journey\\, the talk explores how music\\, research\\, and t\r\n echnology became interconnected\\, leading to the emergence of new forms of \r\n creative expression.\\n\\nSatoshi will also be joined by special guests Roy a\r\n nd PJ Hirabayashi and performers from Stanford Taiko for a special collabor\r\n ation! \\n\\nAdmission Information\\n\\nFree admissionPlease RSVP here!\r\nDTEND:20260209T050000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T030000Z\r\nGEO:37.424086;-122.16997\r\nLOCATION:Dinkelspiel Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Lecture & Concert: Satoshi Yamaguchi – The Past Can Be Changed\r\nUID:tag:localist.com\\,2008:EventInstance_51463528220956\r\nURL:https://events.stanford.edu/event/lecture-satoshi-yamaguchi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for a special evening of music as we bring together tal\r\n ented alumni from Stanford’s community from across the years\\, showcasing a\r\n  diverse selection of solo and chamber music. This event offers an opportun\r\n ity to experience the artistry of Stanford Alumni\\, a chance to reconnect w\r\n ith musicians and friends\\, and celebrate the enduring bond we share throug\r\n h music.\\n\\nStanford Music Alumni who would like to be notified of performa\r\n nce opportunities can sign up for our mailing list here.\\n\\nAdmission Infor\r\n mation\\n\\nFree admission\r\nDTEND:20260209T050000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T033000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Alumni Recital\r\nUID:tag:localist.com\\,2008:EventInstance_51772010755904\r\nURL:https://events.stanford.edu/event/alumni-piano-recital-win2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Stanford Cardiothoracic Transplantation three-day symposium\r\n  will bring together the entire spectrum of the transplant team\\, including\r\n  cardiothoracic surgeons\\, pulmonologists\\, cardiologists\\, nurse specialis\r\n ts\\, transplant coordinators\\, pharmacists\\, and dieticians to showcase the\r\n  latest and upcoming breakthroughs in heart and lung transplantation. Topic\r\n s covered will include: heart and lung donor and recipient management\\, org\r\n an allocation policies\\, organ procurement techniques\\, new risk assessment\r\n  tools and diagnostic assays\\, updates in thoracic transplant recipient man\r\n agement and administrative aspects of successful thoracic transplant progra\r\n ms. Join us in shaping the future of cardiothoracic transplantation as we b\r\n ring together an array of expertise\\, innovation\\, and collaboration at thi\r\n s immersive symposium for all members of the transplant team.\\n\\nRegistrati\r\n on\\nRegistration Fees (Includes course materials\\, a welcome reception\\, da\r\n ily breakfast\\, and a certificate of participation)\\n\\nEarly Bird Rates -  \r\n Register through 12/15/2025 for the discounted rates.\\nPhysicians early - $\r\n 650 \\nNurses/AHPs Early - $475\\nIndustry - $1\\,500 \\n\\nRates after 12/15/20\r\n 25\\nPhysicians early - $800 \\nNurses/AHPs Early - $550\\nIndustry - $1\\,500 \r\n \\n\\nTuition may be paid by Visa or MasterCard. Your email address is used f\r\n or critical information\\, including registration confirmation\\, evaluation\\\r\n , and certificate. Be sure to include an email address that you check frequ\r\n ently.\\nSTAP-eligible employees can use STAP funds towards the registration\r\n  fees for this activity.  Complete the STAP Reimbursement Request Form and \r\n submit to your department administrator. \\n\\nA block of rooms has been rese\r\n rved at a reduced at the Grand Hyatt Vail\\, for conference participants on \r\n a first-come\\, first-serve basis and may sell out before January 16\\, 2026.\r\n  After this date\\, reservations will be accepted on a space available basis\r\n  and the group rate is no longer guaranteed. Reserve your room HERE.\\n\\nCre\r\n dits\\nAMA PRA Category 1 Credits™ (13.75 hours)\\, ANCC Contact Hours (13.75\r\n  hours)\\, Non-Physician Participation Credit (13.75 hours)\\n\\nTarget Audien\r\n ce\\nSpecialties - Cardiology\\, Cardiothoracic Surgery\\, Cardiovascular Heal\r\n th\\, Critical Care & Pulmonology\\nProfessions - Fellow/Resident\\, Non-Physi\r\n cian\\, Nurse\\, Physician\\, Student\\n\\nObjectives\\n\\nAt the conclusion of th\r\n is activity\\, learners should be able to:\\n\\nIdentify strategies for the op\r\n timal selection and management of heart and lung donors.Discuss the advance\r\n s in organ procurement and preservation.Assess the implementation and progr\r\n ess of allocation for thoracic organs.Evaluate new techniques\\, essays\\, an\r\n d studies for post-transplant monitoring.Address current controversies in r\r\n ecipient selection\\, organ allocation and transplant program metrics.Accred\r\n itation\\nIn support of improving patient care\\, Stanford Medicine is jointl\r\n y accredited by the Accreditation Council for Continuing Medical Education \r\n (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\, and the\r\n  American Nurses Credentialing Center (ANCC)\\, to provide continuing educat\r\n ion for the healthcare team. \\n\\nCredit Designation \\nAmerican Medical Asso\r\n ciation (AMA) \\nStanford Medicine designates this Live Activity for a maxim\r\n um of 13.75 AMA PRA Category 1 CreditsTM.  Physicians should claim only the\r\n  credit commensurate with the extent of their participation in the activity\r\n .\\n\\nAmerican Nurses Credentialing Center (ANCC)\\nStanford Medicine designa\r\n tes this live activity for a maximum of 13.75 ANCC contact hours.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260209\r\nGEO:39.636839;-106.40277\r\nLOCATION:Grand Hyatt\\, Vail\\, CO\r\nSEQUENCE:0\r\nSUMMARY:2026 Stanford Cardiothoracic Transplantation Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_50224272111626\r\nURL:https://events.stanford.edu/event/2026-stanford-cardiothoracic-transpla\r\n ntation-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260209\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101466562\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260209\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019648933\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The goals of the conference are to bring together engineers\\, s\r\n cientists and managers involved in geothermal reservoir studies and develop\r\n ments\\; provide a forum for the exchange of ideas on the exploration\\, deve\r\n lopment and use of geothermal resources\\; and to enable prompt and open rep\r\n orting of progress. We strongly encourage all scientists and engineers invo\r\n lved in geothermal reservoir technology to attend the workshop.\\n\\nTopics\\n\r\n \\nPapers will be presented on recent research relating to geothermal reserv\r\n oirs including:\\n\\nCase Studies: reservoir response to production\\, effects\r\n  of injection\\, scaling characteristicsEnhanced Geothermal Systems (EGS): c\r\n urrent and future activitiesEngineering Techniques: reservoir simulation\\, \r\n empirical methods\\, well tests\\, tracersField Management: strategies for ex\r\n ploitation\\, injection\\, scale inhibitionExploration: geophysics\\, geochemi\r\n stry\\, geology\\, heat flow studies\\, outflowsDrilling and Well Bore Flows: \r\n well stimulation\\, bore flow modeling\\, hydro-fracturing\\, scalingLow Entha\r\n lpy Systems: applications of heat pumps\\, hot dry rock technologyGeoscience\r\n s: application of geophysics\\, geochemistry\\, thermodynamics and fluid mech\r\n anics \\n\\nNEW >>> 2026 will allow for in-person and remote attendance\\n\\nIn\r\n  2025\\, we had more people than could be accommodated in the venue\\, so in \r\n 2026 we will modify the format of the Workshop to allow for remote particip\r\n ation as well as in-person. Remote attendees will be able to view all the p\r\n resentations in real time\\, but will not be able to participate in Q&A. How\r\n ever\\, all speakers must be present in person -- we will not have remote pr\r\n esentations.\\n\\nContact Email: \\ngeothermal@se3mail.stanford.edu\r\nDTEND:20260210T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T160000Z\r\nGEO:37.43068;-122.164842\r\nLOCATION:Alumni Center\r\nSEQUENCE:0\r\nSUMMARY:51st Stanford Geothermal Workshop\r\nUID:tag:localist.com\\,2008:EventInstance_50287133679040\r\nURL:https://events.stanford.edu/event/51st-stanford-geothermal-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260210T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51525088790375\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-2222\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260209T180000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353475433\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport\r\nDESCRIPTION:Mid-Quarter Pricing starts Monday\\, February 9th at 9 AM\\n\\nSte\r\n p into winter with new ways to move\\, learn\\, and connect. Enjoy Mid-Quarte\r\n r discounts on Cardinal Pass\\, Cardinal + F45 Membership\\, and Redwood City\r\n  Cardinal Pass.\r\nDTEND:20260209T180000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Mid-Quarter Pricing\r\nUID:tag:localist.com\\,2008:EventInstance_52022595468203\r\nURL:https://events.stanford.edu/event/winter-mid-quarter-pricing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260210T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382727324\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Are you taking advantage of the resources available at Stanford\r\n  Research Computing for your research? Want to know how to prevent importan\r\n t research data from being lost on an HPC system like SRC’s Sherlock cluste\r\n r? Come learn about the important Dos and Don’ts on Stanford HPC systems at\r\n  this Love Data Week workshop and catch up with the team behind Oak and Elm\r\n  storage systems.\\n\\nDate and time: Monday\\, February 9\\, 2026\\, 11:00 AM–1\r\n 2:00 PMLocation:  Velma Denning Room (120F)\\, Green Library and Zoom (link \r\n provided upon registration)Presenters:Xinlei Qiu (Stanford Research Computi\r\n ng Manager)Stéphane Thiell (Research Storage Architect and Technical Lead)K\r\n evin Tully (Research Storage System Administrator)Vanessa Wong (Research St\r\n orage Consultant)Please register to attend. Registration is exclusively ope\r\n n to current Stanford Affiliates.\\n\\nThis workshop is part of Love Data Wee\r\n k\\, an annual festival highlighting topics\\, opportunities and services rel\r\n evant to data in research.\\n\\nFor those attending the in-person event\\, ple\r\n ase bring your Stanford ID card or mobile ID to enter the library.\\n\\nWe wi\r\n ll be taking photos at this event for publicity purposes. Your presence at \r\n this event constitutes consent to be photographed unless you express otherw\r\n ise.\r\nDTEND:20260209T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T190000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Velma Denning Room (120F)\r\nSEQUENCE:0\r\nSUMMARY:Research Data Best Practices on SRC Systems\r\nUID:tag:localist.com\\,2008:EventInstance_51454072976047\r\nURL:https://events.stanford.edu/event/research-data-best-practices-on-src-s\r\n ystems\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260210T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561105749\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Register to attend in-person\\n\\nRegister to attend on Zoom\\n\\nJ\r\n oin us for this informational session to learn more about CISAC's Interscho\r\n ol Honors Program application process\\, overview\\, requirements\\, and ask a\r\n ny questions that you may have. This session will be presented by the curre\r\n nt instructors for the 2025-2026 CISAC Honors Program: Harold Trinkunas\\, S\r\n enior Research Scholar & Deputy Director at CISAC and Sulgiye Park\\, Resear\r\n ch Scholar at CISAC. There will be time to ask questions\\, so come prepared\r\n ! Lunch will be provided for in-person attendees.\\n\\nThe CISAC Interschool \r\n Honors Program in International Security Studies provides an opportunity fo\r\n r seniors from all undergraduate schools and majors to conduct rigorous\\, s\r\n cholarly research on international security issues\\, and to graduate with H\r\n onors in International Security Studies. The conferral of Honors is in addi\r\n tion to the student's major\\, which may be in any department or program. St\r\n udents are admitted to the Honors Program on a competitive basis\\, with app\r\n lications due winter quarter of junior year. The CISAC Honors Program has d\r\n rawn students from 28 different departments and programs since its inceptio\r\n n in 2000 and has an alumni network of over 200 students. Alumni consistent\r\n ly cite multiple strengths of the program\\, including the inclusion of unde\r\n rgraduates in CISAC's vibrant intellectual environment\\, highly personalize\r\n d attention from faculty\\, the program's unique focus within the university\r\n  and beyond\\, and the program's interdisciplinary character. Visit the CISA\r\n C Honors Program website to read more about this incredible opportunity.\r\nDTEND:20260209T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, Reuben Hill (E207)\r\nSEQUENCE:0\r\nSUMMARY:Information Session: CISAC Interschool Honors Program\r\nUID:tag:localist.com\\,2008:EventInstance_51950533796761\r\nURL:https://events.stanford.edu/event/information-session-cisac-interschool\r\n -honors-program\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour,Lecture/Presentation/Talk\r\nDESCRIPTION:Join Jason Linetzky\\, Museum Director at the Anderson Collectio\r\n n\\, on this special tour of Alteronce Gumby. \\n\\nThe Anderson Collection pr\r\n esents the first West Coast museum exhibition of New York–based artist Alte\r\n ronce Gumby. Featuring nine recent works\\, the show celebrates Gumby’s ongo\r\n ing investigation of color\\, the cosmos\\, and abstraction. Drawing inspirat\r\n ion from artists represented in the Anderson Collection\\, such as Mark Roth\r\n ko and Joan Mitchell\\, Gumby’s luminous\\, textured surfaces extend the lega\r\n cies of 20th-century American painting while forging a distinctly contempor\r\n ary path. The exhibition is on view in the Wisch Family Gallery from Septem\r\n ber 24\\, 2025-March 1\\, 2026.\\n\\nAlteronce Gumby is a contemporary abstract\r\n  painter interested in the history of monochromatic painting\\, color theory\r\n \\, cosmology\\, astrophysics\\, and interstellar photography. Gumby’s process\r\n  is the fulcrum of his work. It begins with the examination of light and it\r\n s properties\\, and media including resin\\, glass and gemstones. This unorth\r\n odox blend of materials results in works Gumby calls “tonal paintings”\\, ea\r\n ch producing unique hues\\, values and energies. Dynamic and vibrant\\, Gumby\r\n ’s paintings propose an expanded understanding of abstraction\\, color\\, lif\r\n e and the origins of the universe. Gumby graduated from the Yale School of \r\n Art with an MFA in Painting and Printmaking in 2016. He has won notable awa\r\n rds such as the Austrian American Foundation/ Seebacher Prize for Fine Arts\r\n  and the Robert Reed Memorial Scholarship. Gumby has also participated in n\r\n umerous international artist residencies such as the Rauschenberg Residency\r\n  (2019)\\, London Summer Intensive (2016)\\, Summer Academy in Salzburg\\, Aus\r\n tria (2015)\\, 6Base (2016)\\, Harriet Hale Woolley Scholarship at the Fondat\r\n ion des Étas-Unis in Paris (2016) and is the 2024-2025 recipient of the pre\r\n stigious Pollock-Krasner Foundation grant for artists.\\n\\nRSVP here.\r\nDTEND:20260209T220000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T210000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, Wisch Gallery\r\nSEQUENCE:0\r\nSUMMARY:Curator Talk | Alteronce Gumby with Jason Linetzky\r\nUID:tag:localist.com\\,2008:EventInstance_51305093605843\r\nURL:https://events.stanford.edu/event/February-curator-talk-alteronce-gumby\r\n -with-jason-linetzky\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Redistricting 101: California’s Prop 50 and beyond!\\n\\nJoin the\r\n  Stanford University Libraries for an interactive redistricting mapping wor\r\n kshop during Love Data Week! On Tuesday Nov. 4th\\, California’s voters weig\r\n hed in on Proposition 50\\, a state constitutional amendment to modify Congr\r\n essional district maps. Come on by our hands-on workshop on how to make you\r\n r own mathematically-sound redistricting map. What does democratic represen\r\n tation look like? The choice is yours.\\n\\nWe will be using online cartograp\r\n hic tools like DRA (Dave’s Redistricting) and PlanScore to draw and evaluat\r\n e voting district maps.\\n\\nGuest speaker Mike Migurski will share how PlanS\r\n core participates in the redistricting process!\\n\\nPlease register here! Th\r\n is workshop will take place in-person in the Green Library IC Classroom.\\n\\\r\n nLearn about: \\n\\nProposition 50: The Election Rigging Response Act Measure\r\n s of fairnessCensus DataPartisan versus independent redistricting commissio\r\n nsFor those attending the in-person event\\, please bring your Stanford ID c\r\n ard or mobile ID to enter the library.\\n\\nWe will be taking photos at this \r\n event for publicity purposes. Your presence at this event constitutes conse\r\n nt to be photographed unless you express otherwise.\r\nDTEND:20260209T230000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260209T210000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:IC Classroom\\, Green Library\\, Room TBD\r\nSEQUENCE:0\r\nSUMMARY:Gerrymandering 101\r\nUID:tag:localist.com\\,2008:EventInstance_51446842588028\r\nURL:https://events.stanford.edu/event/ldw2026-gerrymandering-101\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260210T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T000000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, Clark Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Biology Seminar Series: Jessica Feldman \"Building patterns in cells\r\n  during development”\r\nUID:tag:localist.com\\,2008:EventInstance_51473816989337\r\nURL:https://events.stanford.edu/event/biology-seminar-series-jessica-feldma\r\n n-building-patterns-in-cells-during-development\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Film/Screening\r\nDESCRIPTION:Join us for a film screening and discussion with Stanford alumn\r\n us and Fulbright Student researcher Parker Watt:\\n\\nResilient Expression: U\r\n krainian Artists in Estonia\\n\\nIn this event\\, Stanford alumnus and Fulbrig\r\n ht Student researcher Parker Watt will present his documentary series\\, “Re\r\n silient Expression: Ukrainian Artists in Estonia.”\\n\\nSince Russia’s full-s\r\n cale invasion of Ukraine\\, Estonia has been a leader in providing refuge to\r\n  the Ukrainian people. At the start of the war\\, Estonia accepted the most \r\n Ukrainians per capita of any country in the world\\, and it remains among th\r\n e top three\\, behind Czechia and Poland. There are now approximately 60\\,00\r\n 0 Ukrainians in Estonia\\, representing about 4.4% of the population. Three-\r\n quarters of these Ukrainians have arrived since 2022. These individuals mus\r\n t negotiate how to maintain their cultural identity while integrating and b\r\n uilding new lives abroad.\\n\\nUkrainian artists play a critical role in cult\r\n ural preservation for the Ukrainian community in Estonia. Their work draws \r\n on traditions from the past\\, reflects their experience in the present\\, an\r\n d defines what Ukrainian culture is for the future as their homeland is und\r\n er attack. As they establish themselves\\, their work creates spaces for hea\r\n ling and helps them to connect with Estonian people and culture. \\n\\nParker\r\n  Watt created this series of short films over the past year to highlight pe\r\n rsonal stories that can be abstracted when discussing the events of war and\r\n  their effects in the media. Each video tells the story of a single Ukraini\r\n an artist or artistic group living and working in Estonia and focuses on ho\r\n w their work serves as a mode of healing\\, cultural continuation\\, and inte\r\n gration in Estonia.\\n\\nThis project was made possible by the Fulbright Stud\r\n ent Research Grant as well as the Association for the Advancement of Baltic\r\n  Studies’ Baumanis Grant for Creative Projects in Baltic Studies.\\n\\nA disc\r\n ussion with the author will follow the screening. Opening remarks will be d\r\n elivered by Ivo Lille\\, Director of the Vabamu Museum of Occupation and Fre\r\n edom (Tallinn\\, Estonia).\\n\\nParker Watt is passionate about finding the hu\r\n man stories in international events and introducing them through film. Whil\r\n e in Estonia\\, he was affiliated with the Johan Skytte Institute of Politic\r\n al Studies at the University of Tartu\\, where he continued to write and spe\r\n ak on developments in the Baltic region and the United States. His previous\r\n  film experience includes serving as an Assistant to the Director on two in\r\n dependent professional film sets and as a Production Assistant on the Netfl\r\n ix series Pieces of Her. Before his Fulbright project\\, Parker received his\r\n  Bachelor of Arts in International Relations and a minor in Slavic Language\r\n s and Literature from Stanford. He was first introduced to Estonia through \r\n the Stanford Global Studies internship in Estonia. \\n\\nThis in-person event\r\n  is free and open to the public. Registration is required.\\n\\nThis event is\r\n  part of Global Conversations\\, a series of talks\\, lectures\\, and seminars\r\n  hosted by Stanford University Libraries and Vabamu with the goal of educat\r\n ing scholars\\, students\\, leaders\\, and the public on the benefits of but a\r\n lso challenges related to sustaining freedom.\r\nDTEND:20260210T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T000000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Room 122\r\nSEQUENCE:0\r\nSUMMARY:Resilient Expression: Ukrainian Artists in Estonia\r\nUID:tag:localist.com\\,2008:EventInstance_51526487198512\r\nURL:https://events.stanford.edu/event/resilient-expression\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Extracting task-relevant preserved dynamics from contrastive al\r\n igned neural recordings\\n\\nAbstract: Recent work indicates that low-dimensi\r\n onal dynamics of neural and behavioral data are often preserved across days\r\n  and subjects. However\\, extracting these preserved dynamics remains challe\r\n nging: high-dimensional neural population activity and the recorded neuron \r\n populations vary across recording sessions. While existing modeling tools c\r\n an improve alignment between neural and behavioral data\\, they often operat\r\n e on a per-subject basis or discretize behavior into categories\\, disruptin\r\n g its natural continuity and failing to capture the underlying dynamics. We\r\n  introduce Contrastive Aligned Neural DYnamics (CANDY)\\, an end‑to‑end fram\r\n ework that aligns neural and behavioral data using rank-based contrastive l\r\n earning\\, adapted for continuous behavioral variables\\, to project neural a\r\n ctivity from different sessions onto a shared low-dimensional embedding spa\r\n ce. Our results show that CANDY is able to learn aligned latent embeddings \r\n and preserved dynamics across neural recording sessions and subjects\\, and \r\n it achieves improved cross-session behavior decoding performance. These adv\r\n ances enable robust cross‑session behavioral decoding and offer a path towa\r\n rds identifying shared neural dynamics that underlie behavior across indivi\r\n duals and recording conditions.\\n\\nBio: Yiqi is broadly interested in motor\r\n  control and learning\\, and how to leverage machine learning and AI to mode\r\n l the brain using large scale datasets. She completed her undergraduate at \r\n Cornell University. She is currently a 4th year PhD student at the Electric\r\n al Engineering Department advised by Dr. Mark Schnitzer and Dr. Scott Linde\r\n rman. She is a member of the MBCT program and the recipient of the Stanford\r\n  Shenoy-Simons Foundation Grant in 2025.\r\nDTEND:20260210T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T000000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\\, James Lin and Nisa Leung Seminar\r\n  Room\\, E153\r\nSEQUENCE:0\r\nSUMMARY:Yiqi Jiang: Extracting task-relevant preserved dynamics from contra\r\n stive aligned neural recordings\r\nUID:tag:localist.com\\,2008:EventInstance_51889918914705\r\nURL:https://events.stanford.edu/event/yiqi-jiangextracting-task-relevant-pr\r\n eserved-dynamics-from-contrastive-aligned-neural-recordings\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Bay Area poets and Stanford students share poems inspired by th\r\n e Anderson Collection. Travel through the museum to hear poets read alongsi\r\n de the works that inspired them. Come learn about their process and write a\r\n  little something of your own in response to prompts the poets will offer. \r\n We hope you'll go home with inspiration and the seeds of ekphrastic poems o\r\n f your own!\\n \\n\\nReadings by Peter Kline\\, Mia Ayumi Malhotra\\, Sarah Mang\r\n old\\, and Brittany Perham\\, along with student poets Ameera Ramadan Eshtewi\r\n  and Jono Wang Chu.\\n\\nMonday\\, February 9\\, 2026\\n\\n4:30 PM - Doors open\\n\r\n 5 PM - Readings\\n6 PM - Art viewing\\, Q&A & book signing\\n\\nWe invite you t\r\n o arrive early to view the artworks up close ahead of the readings.\\n\\nThis\r\n  event is hosted by the Stanford Arts Institute (SAI) in collaboration with\r\n  the Anderson Collection\\, and with support from the Office of the Vice Pre\r\n sident for the Arts.\\n\\nIf you need a disability-related accommodation for \r\n this event\\, please contact us at artsinstitute@stanford.edu   at least two\r\n  weeks prior to the event.\r\nDTEND:20260210T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T003000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Museum as Muse: Poetry at the Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_51561786335381\r\nURL:https://events.stanford.edu/event/museum-as-muse-poetry-at-the-anderson\r\n -collection-8627\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Title: \"An die ferne Geliebte\" between Death and Resurrection: \r\n Beethoven\\, Lobkowitz\\, and mourning in Vienna around 1800\\n\\nAbstract: The\r\n  scholarly and popular reception of Beethoven’s song cycle An die ferne Gel\r\n iebte op. 98 seems inescapably intertwined with the composer’s love for his\r\n  so-called “Unsterbliche Geliebte” (Immortal Beloved). Typically\\, the song\r\n s are interpreted autobiographically as expressing Beethoven's personal fee\r\n lings towards his \"distant beloved\". I suggest a rather different context f\r\n or the composition: that Beethoven and the poet Alois Jeitteles conceived t\r\n he cycle as a gift for Prince Franz Maximilian Lobkowitz\\, whose wife had d\r\n ied unexpectedly in January 1816.\\n\\nThis paper pursues the implications of\r\n  this alternative contextualization\\, shedding new light on both the poetic\r\n  and musical dimensions of An die ferne Geliebte. It highlights the cycle’s\r\n  textual affinities with contemporary poetry on death and mourning\\, and ex\r\n amines how Beethoven crafted specific musical devices to convey consolation\r\n  and transcendence\\, resulting in a work that resonates deeply with other c\r\n ontemporary artifacts of cultural memory.\\n\\nBirgit Lodes studied in Munich\r\n \\, at UCLA\\, and at Harvard University. Since 2004\\, she has been Professor\r\n  of Historical Musicology at the University of Vienna and currently serves \r\n as Distinguished Visiting Austrian Chair at Stanford University. She is a c\r\n orresponding member of the Austrian Academy of Sciences and editor-in-chief\r\n  of the series Denkmäler der Tonkunst in Österreich. Her research focuses o\r\n n musical life in Central Europe around 1500 (https://musical-life.net/en)\\\r\n , as well as on Beethoven\\, Schubert\\, and their circles.\\n\\nAdmission Info\r\n rmation\\n\\nFree admission\r\nDTEND:20260210T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T003000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Room 103\r\nSEQUENCE:0\r\nSUMMARY:Ron Alexander Memorial Lectures in Musicology – Birgit Lodes\\, Univ\r\n ersity of Vienna\r\nUID:tag:localist.com\\,2008:EventInstance_51772118209877\r\nURL:https://events.stanford.edu/event/copy-of-ron-alexander-memorial-lectur\r\n es-in-musicology-birgit-lodes-university-of-vienna\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Stanford Energy Seminar has been a mainstay of energy engag\r\n ement at Stanford for nearly 20 years and is one of the flagship programs o\r\n f the Precourt Institute for Energy. We aim to bring a wide variety of pers\r\n pectives to the Stanford community – academics\\, entrepreneurs\\, utilities\\\r\n , non-profits\\, and more. \\n\\n \\n\\nAbout the talk\\n\\nThis session will disc\r\n uss recent trends in atmospheric methane concentrations\\, including the cau\r\n ses of record increases over the past five years. We will examine changes i\r\n n natural systems\\, such as the Arctic and Amazon\\, and anthropogenic syste\r\n ms\\, including oil and gas. Prof. Jackson will also examine interactions an\r\n d research priorities of the global hydrogen budget through his group's wor\r\n k in the Global Carbon Project\\, and how hydrogen and methane interact in t\r\n he atmosphere.\\n\\n \\n\\nRob Jackson and his lab examine the many ways people\r\n  affect the Earth. They produce basic scientific knowledge and use it to he\r\n lp shape policies and reduce the environmental footprint of global warming\\\r\n , energy extraction\\, and other environmental issues. They're currently exa\r\n mining the effects of climate change and drought on old-growth forests. The\r\n y are also working to measure and reduce greenhouse gas emissions through t\r\n he Global Carbon Project (globalcarbonproject.org)\\, which Jackson chairs. \r\n Examples of new research Rob leads include establishing a global network of\r\n  methane tower measurements across the Amazon and more than 100 sites world\r\n wide and measuring and reducing methane emissions and air pollution from oi\r\n l and gas wells\\, city streets\\, and homes and buildings.\\n\\nRob's new book\r\n  on climate solutions\\, Into the Clear Blue Sky (Scribner and Penguin Rando\r\n m House)\\, was named a \"Top Science Book of 2024\" by The Times. As an autho\r\n r and photographer\\, Rob has published a previous trade book about the envi\r\n ronment (The Earth Remains Forever\\, University of Texas Press)\\, two books\r\n  of children’s poems\\, Animal Mischief and Weekend Mischief (Highlights Mag\r\n azine and Boyds Mills Press)\\, and recent or forthcoming poems in the journ\r\n als Southwest Review\\, Cortland Review\\, Cold Mountain Review\\, Atlanta Rev\r\n iew\\, LitHub\\, and more. His photographs have appeared in many media outlet\r\n s\\, including the NY Times\\, Washington Post\\, USA Today\\, US News and Worl\r\n d Report\\, Science\\, Nature\\, and National Geographic News.\\n\\nRob won this\r\n  year's Blue Planet Prize and is a recent Djerassi artist in residence\\, Gu\r\n ggenheim Fellow\\, and sabbatical visitor in the Center for Advanced Study i\r\n n the Behavioral Sciences. He is also a Fellow in the American Academy of A\r\n rts and Sciences\\, American Association for the Advancement of Science\\, Am\r\n erican Geophysical Union\\, and Ecological Society of America. He received a\r\n  Presidential Early Career Award in Science and Engineering from the Nation\r\n al Science Foundation\\, awarded at the White House.\\n\\n \\n\\nAnyone with an \r\n interest in energy is welcome to join! You can enjoy seminars in the follow\r\n ing ways:\\n\\nAttend live. The auditorium may change quarter by quarter\\, so\r\n  check each seminar event to confirm the location. Explore the current quar\r\n ter's schedule.Watch live in a browser livestream if available. Check each \r\n seminar event for its unique livestream URL.Watch recordings of past semina\r\n rs Available on the Past Energy Seminars page and the Energy Seminars playl\r\n ist of the Stanford Energy YouTube channel(For students) Take the seminar a\r\n s a 1-unit class (CEE 301/ENERGY 301/MS&E 494) \\n\\nIf you'd like to join th\r\n e Stanford Energy Seminar mailing list to hear about upcoming talks\\, sign \r\n up here.\r\nDTEND:20260210T012000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 370\\, 370\r\nSEQUENCE:0\r\nSUMMARY:Stanford Energy Seminar | Methane and Hydrogen in a Warming World: \r\n Recent Trends and Their Causes | Rob Jackson\\, Earth System Science\\, Stanf\r\n ord University\r\nUID:tag:localist.com\\,2008:EventInstance_51562173494463\r\nURL:https://events.stanford.edu/event/stanford-energy-seminar-rob-jackson-e\r\n arth-system-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260210T021500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T010500Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52004912956827\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260210T023000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T013000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430652269\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This event is part of Love Data Week at Stanford\\, an annual fe\r\n stival highlighting topics\\, opportunities and services relevant to data in\r\n  research. \\n\\nJoin us in mapping a high-priority global health project\\, h\r\n elping organizations like Doctors without Borders and the Red Cross deliver\r\n  vital aid to at-risk communities around the world. In just 20 minutes\\, yo\r\n u'll join a movement of over 100K volunteers across the world using Humanit\r\n arian OpenStreetMap (HOTOSM). \\n\\nIn our Winter Mapathon\\, we’ll be using s\r\n atellite imagery and simple online GIS tools to trace building outlines\\, c\r\n reating detailed digital maps of unmapped areas. Last spring\\, we mapped 20\r\n 84 buildings in Malawi and hope to break that record! This Winter\\, we’ll b\r\n e mapping a high-priority global health project that helps organizations li\r\n ke Doctors Without Borders and the Red Cross deliver vital\\, life-saving ai\r\n d. Through Missing Maps\\, these efforts are sustained in collaboration with\r\n  local communities\\, ensuring long-term resilience in the regions we map.\\n\r\n \\nREGISTER HERE: https://luma.com/iekdb0rh\\n\\nOpen to all Stanford affiliat\r\n es in person or over Zoom & dinner will be provided!Non-Stanford affiliates\r\n  may join us over Zoom! \\nZoom: https://stanford.zoom.us/j/91622371366?pwd=\r\n ytaMaENiIgaR6rnR7HScVgPwA2NpRr.1&from=addon\\n\\nWhat is a Mapathon? Accurate\r\n  maps are essential for humanitarian responses and global health—yet many c\r\n ommunities remain unmapped. Missing Maps is a humanitarian initiative start\r\n ed in 2014 to address this critical gap by mapping crucial infrastructure i\r\n n underrepresented areas\\, often through collaborative “Mapathon” events. T\r\n he maps created help emergency responders reach communities during natural \r\n disasters\\, enable healthcare workers to organize vaccination campaigns\\, a\r\n nd support NGOs in developing resilient infrastructure. \\n\\nSo\\, join us fo\r\n r an evening of impact on Monday February 9th from 6-8 pm in Branner Earth \r\n Sciences Library. No prior experience is necessary—mapping is easy to learn\r\n  in just 20 minutes—so come ready to have fun while contributing to a globa\r\n l humanitarian effort. We can’t wait to see you there!\\n\\nWe will be taking\r\n  photos at this event for publicity purposes. Your presence at this event c\r\n onstitutes consent to be photographed unless you express otherwise.\r\nDTEND:20260210T040000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T020000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Winter Global Health Club Mapathon\r\nUID:tag:localist.com\\,2008:EventInstance_51447161002186\r\nURL:https://events.stanford.edu/event/global-health-club-mapathon-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop,Other\r\nDESCRIPTION:Sign-Up for our FREE Alcohol 101 Training facilitated by PEERs \r\n and in collaboration with the Well House! \\n\\nWhat is Bring Your Own PEER? \r\n (Alcohol 101)?\\n\\nWant to learn more about alcohol\\, understand its effects\r\n  on the body\\, learn how to help a friend in an emergency\\, or simply under\r\n stand how to have fun while staying safe? This workshop is designed to open\r\n  up honest\\, thoughtful conversations about alcohol\\, and creates an opport\r\n unity to talk about personal experiences\\, ask questions\\, and understand h\r\n ow alcohol affects us individually and as a community. Everyone belongs in \r\n the conversation\\, and the workshop emphasizes mutual respect and community\r\n  care. By attending this event\\, you will enter a lego set raffle!\\n\\nBring\r\n  Your Own PEER this quarter will take place in the Well House\\, from 7-8pm \r\n on Monday\\, February 9th\\, 2026!\\n\\nRSVP Here! Drop-ins are also welcome bu\r\n t RSVP helps us know how much boba tea to bring!\\n\\nDrop ins welcome!Open t\r\n o all Stanford UndergraduatesIf you have any questions about this event ple\r\n ase email peerprogram@stanford.edu\r\nDTEND:20260210T040000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T030000Z\r\nGEO:37.421896;-122.169177\r\nLOCATION:The Well House\\, 562 Mayfield Ave\\, Stanford\\, CA\\, 94305\\, The Lo\r\n bby\r\nSEQUENCE:0\r\nSUMMARY:Bring Your Own PEER (Alcohol 101 training!): FREE LEGO SET\r\nUID:tag:localist.com\\,2008:EventInstance_51500011286295\r\nURL:https://events.stanford.edu/event/bring-your-own-peer-alcohol-101-train\r\n ing-free-lego-set\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Stanford Cardiothoracic Transplantation three-day symposium\r\n  will bring together the entire spectrum of the transplant team\\, including\r\n  cardiothoracic surgeons\\, pulmonologists\\, cardiologists\\, nurse specialis\r\n ts\\, transplant coordinators\\, pharmacists\\, and dieticians to showcase the\r\n  latest and upcoming breakthroughs in heart and lung transplantation. Topic\r\n s covered will include: heart and lung donor and recipient management\\, org\r\n an allocation policies\\, organ procurement techniques\\, new risk assessment\r\n  tools and diagnostic assays\\, updates in thoracic transplant recipient man\r\n agement and administrative aspects of successful thoracic transplant progra\r\n ms. Join us in shaping the future of cardiothoracic transplantation as we b\r\n ring together an array of expertise\\, innovation\\, and collaboration at thi\r\n s immersive symposium for all members of the transplant team.\\n\\nRegistrati\r\n on\\nRegistration Fees (Includes course materials\\, a welcome reception\\, da\r\n ily breakfast\\, and a certificate of participation)\\n\\nEarly Bird Rates -  \r\n Register through 12/15/2025 for the discounted rates.\\nPhysicians early - $\r\n 650 \\nNurses/AHPs Early - $475\\nIndustry - $1\\,500 \\n\\nRates after 12/15/20\r\n 25\\nPhysicians early - $800 \\nNurses/AHPs Early - $550\\nIndustry - $1\\,500 \r\n \\n\\nTuition may be paid by Visa or MasterCard. Your email address is used f\r\n or critical information\\, including registration confirmation\\, evaluation\\\r\n , and certificate. Be sure to include an email address that you check frequ\r\n ently.\\nSTAP-eligible employees can use STAP funds towards the registration\r\n  fees for this activity.  Complete the STAP Reimbursement Request Form and \r\n submit to your department administrator. \\n\\nA block of rooms has been rese\r\n rved at a reduced at the Grand Hyatt Vail\\, for conference participants on \r\n a first-come\\, first-serve basis and may sell out before January 16\\, 2026.\r\n  After this date\\, reservations will be accepted on a space available basis\r\n  and the group rate is no longer guaranteed. Reserve your room HERE.\\n\\nCre\r\n dits\\nAMA PRA Category 1 Credits™ (13.75 hours)\\, ANCC Contact Hours (13.75\r\n  hours)\\, Non-Physician Participation Credit (13.75 hours)\\n\\nTarget Audien\r\n ce\\nSpecialties - Cardiology\\, Cardiothoracic Surgery\\, Cardiovascular Heal\r\n th\\, Critical Care & Pulmonology\\nProfessions - Fellow/Resident\\, Non-Physi\r\n cian\\, Nurse\\, Physician\\, Student\\n\\nObjectives\\n\\nAt the conclusion of th\r\n is activity\\, learners should be able to:\\n\\nIdentify strategies for the op\r\n timal selection and management of heart and lung donors.Discuss the advance\r\n s in organ procurement and preservation.Assess the implementation and progr\r\n ess of allocation for thoracic organs.Evaluate new techniques\\, essays\\, an\r\n d studies for post-transplant monitoring.Address current controversies in r\r\n ecipient selection\\, organ allocation and transplant program metrics.Accred\r\n itation\\nIn support of improving patient care\\, Stanford Medicine is jointl\r\n y accredited by the Accreditation Council for Continuing Medical Education \r\n (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\, and the\r\n  American Nurses Credentialing Center (ANCC)\\, to provide continuing educat\r\n ion for the healthcare team. \\n\\nCredit Designation \\nAmerican Medical Asso\r\n ciation (AMA) \\nStanford Medicine designates this Live Activity for a maxim\r\n um of 13.75 AMA PRA Category 1 CreditsTM.  Physicians should claim only the\r\n  credit commensurate with the extent of their participation in the activity\r\n .\\n\\nAmerican Nurses Credentialing Center (ANCC)\\nStanford Medicine designa\r\n tes this live activity for a maximum of 13.75 ANCC contact hours.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260210\r\nGEO:39.636839;-106.40277\r\nLOCATION:Grand Hyatt\\, Vail\\, CO\r\nSEQUENCE:0\r\nSUMMARY:2026 Stanford Cardiothoracic Transplantation Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_50224272113675\r\nURL:https://events.stanford.edu/event/2026-stanford-cardiothoracic-transpla\r\n ntation-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260210\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101467587\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:RSVP Required\\n\\nJoin students and recent alumni at the forefro\r\n nt of energy innovation at Stanford as they share how they found their way \r\n into the space\\, from early curiosity to real-world impact. With diverse ba\r\n ckgrounds and starting points\\, panelists will reflect on what drew them to\r\n  energy\\, what they’ve learned along the way\\, and how they’ve explored sta\r\n rtups\\, technology commercialization\\, and other pathways to scale solution\r\n s. \\n\\nThis session is designed for anyone exploring energy innovation and \r\n will highlight why the field matters\\, how it connects to pressing global c\r\n hallenges\\, and the Stanford Ecopreneurship resources available to you.\\n\\n\r\n Join this session to hear from and join breakout sessions with Stanford all\r\n -star students paving their own path via these programs. Confirmed students\r\n  include:\\n\\nFern Morrison Yashee Mathur Mustafa Sultan The session will be\r\n  moderated by Mandy Chang\\, Associate Director of the Center for Entreprene\r\n urial Studies and lead for the Stanford Venture Studio. \\n\\nWhether you’re \r\n an undergraduate\\, co-term\\, master’s\\, or PhD student\\, if you’re interest\r\n ed in either program\\, this session is for you!\\n\\nRSVP Required\\n\\nLocatio\r\n n: Elliott Program Center in Sterling Quad (2nd floor)\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260210\r\nGEO:37.424189;-122.177964\r\nLOCATION:Elliot Program Center\r\nSEQUENCE:0\r\nSUMMARY:Energy Innovation with Ecopreneurship\r\nUID:tag:localist.com\\,2008:EventInstance_51906169286446\r\nURL:https://events.stanford.edu/event/joining-cleantech-with-ecopreneurship\r\n -sdss-sustainability-summer-internship-program\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The goals of the conference are to bring together engineers\\, s\r\n cientists and managers involved in geothermal reservoir studies and develop\r\n ments\\; provide a forum for the exchange of ideas on the exploration\\, deve\r\n lopment and use of geothermal resources\\; and to enable prompt and open rep\r\n orting of progress. We strongly encourage all scientists and engineers invo\r\n lved in geothermal reservoir technology to attend the workshop.\\n\\nTopics\\n\r\n \\nPapers will be presented on recent research relating to geothermal reserv\r\n oirs including:\\n\\nCase Studies: reservoir response to production\\, effects\r\n  of injection\\, scaling characteristicsEnhanced Geothermal Systems (EGS): c\r\n urrent and future activitiesEngineering Techniques: reservoir simulation\\, \r\n empirical methods\\, well tests\\, tracersField Management: strategies for ex\r\n ploitation\\, injection\\, scale inhibitionExploration: geophysics\\, geochemi\r\n stry\\, geology\\, heat flow studies\\, outflowsDrilling and Well Bore Flows: \r\n well stimulation\\, bore flow modeling\\, hydro-fracturing\\, scalingLow Entha\r\n lpy Systems: applications of heat pumps\\, hot dry rock technologyGeoscience\r\n s: application of geophysics\\, geochemistry\\, thermodynamics and fluid mech\r\n anics \\n\\nNEW >>> 2026 will allow for in-person and remote attendance\\n\\nIn\r\n  2025\\, we had more people than could be accommodated in the venue\\, so in \r\n 2026 we will modify the format of the Workshop to allow for remote particip\r\n ation as well as in-person. Remote attendees will be able to view all the p\r\n resentations in real time\\, but will not be able to participate in Q&A. How\r\n ever\\, all speakers must be present in person -- we will not have remote pr\r\n esentations.\\n\\nContact Email: \\ngeothermal@se3mail.stanford.edu\r\nDTEND:20260211T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T160000Z\r\nGEO:37.43068;-122.164842\r\nLOCATION:Alumni Center\r\nSEQUENCE:0\r\nSUMMARY:51st Stanford Geothermal Workshop\r\nUID:tag:localist.com\\,2008:EventInstance_50287133682113\r\nURL:https://events.stanford.edu/event/51st-stanford-geothermal-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260211T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51525094913766\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-7269\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260210T180000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353476458\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260211T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382729373\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:It's Love Data Week ! Join us for a 30-minute session designed \r\n for researchers to explore the Dryad data platform. In this session\\, you’l\r\n l learn:\\n\\nWhen—and why—Dryad is the choice for your research dataWhat to \r\n expect when submitting to Dryad\\, from start to finishHow submission automa\r\n tion and curation save time and improve data qualityHow Dryad links dataset\r\n s with publications and other research outputsThe tools\\, guidance\\, and su\r\n pport resources available to youWhether you support researchers or manage y\r\n our own data\\, this session will highlight practical ways Dryad can strengt\r\n hen your research workflow and data stewardship.\\n\\nPlease note: This class\r\n  will be held via Zoom. The instructor will send the Zoom link 1 hour befor\r\n e the session.\\n\\nRelated Guide: Responding to the NIH Data Management and \r\n Sharing Policy by Daniel Eller\\n\\nInstructor(s): Jess Herzog\\, Dryad\r\nDTEND:20260210T183000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Love Data Week: Dryad + Your Research Data\r\nUID:tag:localist.com\\,2008:EventInstance_51943231339413\r\nURL:https://events.stanford.edu/event/love-data-week-dryad-your-research-da\r\n ta\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The Stanford Digital Repository (SDR) is the perfect place for \r\n sharing and preserving your scholarly works. We'll provide a brief overview\r\n  and then dive into a demo of new and improved features of the SDR self-dep\r\n osit application. This session is perfect for both new and returning users\\\r\n , as well as both depositors and collection managers. \\n\\nDate and Time: 10\r\n AM–10:45AM\\, Tuesday\\, February 10\\, 2026Location: Zoom (link provided upon\r\n  registration)Lead Instructor: Dr. Amy E. Hodge (Science Data Librarian)Ple\r\n ase register to attend. Registration is exclusively open to current Stanfor\r\n d Affiliates.\\n\\nThis workshop is part of Love Data Week\\, an annual festiv\r\n al highlighting topics\\, opportunities and services relevant to data in res\r\n earch.\r\nDTEND:20260210T184500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:What's New in SDR!\r\nUID:tag:localist.com\\,2008:EventInstance_51454241927850\r\nURL:https://events.stanford.edu/event/whats-new-in-sdr\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:R is a popular statistical computing programming language used \r\n to explore data and make plots. In this class\\, participants without any ba\r\n ckground in programming will learn the basics of the R programming language\r\n  and use it to explore simple data sets.\\n\\nAt the end of this class\\, part\r\n icipants will be able to:\\n\\n Articulate and identify the basic syntax of R\r\n .  Understand the key principles of vectorization.  Identify and use the ba\r\n sic data structures provided in R.\\n\\nThis class is in person\\, please brin\r\n g your own laptop. If you are planning to attend Part 2 (next week)\\, make \r\n sure you register for each class separately.\\n\\nAccreditation Statement\\nIn\r\n  support of improving patient care\\, Stanford Medicine is jointly accredite\r\n d by the Accreditation Council for Continuing Medical Education (ACCME)\\, t\r\n he Accreditation Council for Pharmacy Education (ACPE)\\, and the American N\r\n urses Credentialing Center (ANCC)\\, to provide continuing education for the\r\n  healthcare team.\\n\\n\\nCredit Designation\\nAmerican Medical Association (AM\r\n A)\\nStanford Medicine designates this live activity for a maximum of 1.5 AM\r\n A PRA Category 1 Credits™. Physicians should claim only the credit commensu\r\n rate with the extent of their participation in the activity.\\n\\nRelated Gui\r\n de: Bioinformatics Office Hours by Nikhil Milind\\n\\nInstructor: Nikhil Mili\r\n nd\r\nDTEND:20260210T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T183000Z\r\nLOCATION: LKSC 306\r\nSEQUENCE:0\r\nSUMMARY:Data Analysis with R for Beginners\\, Part 1\r\nUID:tag:localist.com\\,2008:EventInstance_51943310854061\r\nURL:https://events.stanford.edu/event/data-analysis-with-r-for-beginners-pa\r\n rt-1\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford’s Wilcox Solar Observatory\\, located just south of the\r\n  main campus\\, began collecting daily observations of the Sun's magnetic fi\r\n eld in May 1975 with the goal of understanding changes in the Sun and how t\r\n hose changes affect the Earth. Twenty years later\\, in December 1995\\, the \r\n Solar and Heliospheric Observatory (SOHO) launched\\, carrying the Michelson\r\n  Doppler Imager\\, an instrument that measures magnetic fields in the photos\r\n phere\\, that was designed and operated by Stanford’s solar group. Continuin\r\n g Stanford’s long history of studying our nearest star\\, the Solar Dynamics\r\n  Observatory (SDO) was launched on February 11\\, 2010\\, bringing with it th\r\n e ability to photograph the sun almost constantly without interference from\r\n  Earth’s atmosphere. Every day\\, data from SDO are processed\\, analyzed\\, a\r\n nd made available to the public from the Joint Science Operations Center\\, \r\n which is housed here on Stanford’s campus.\\n\\nInstructors: Alex Koufos\\, Ph\r\n ilip Mansfield\\, Charles Baldner\\, Cristina Rabello Soares\\, Arthur Amezcua\r\n Organizer: Katie FreyLocation: Online (link provided upon registration) / K\r\n IPAC TeaDate/Time: 10:40am-11:40am\\, Tuesday\\, February 10\\, 2026This event\r\n  is being hosted online by KIPAC and may include some announcements and inf\r\n ormation of interest to that community at the start of the scheduled time.\\\r\n n\\nInterested in the sun? ☀️On February 11th you can see a timelapse video \r\n of the sun\\, and\\, if it’s sunny\\, we will have a solar telescope outside t\r\n he East Entrance to Green Library. Also on February 11th\\, learn how to fin\r\n d and use solar data by joining our SunPy workshop.\r\nDTEND:20260210T194000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T184000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:50 Years of Solar Data at Stanford\r\nUID:tag:localist.com\\,2008:EventInstance_51535633828640\r\nURL:https://events.stanford.edu/event/50-years-of-solar-data-at-stanford\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Gear Up for Social Science Data:\\n\\nCome meet Michael Levesque \r\n from the Stanford IRB office to learn more about research proposals that in\r\n clude human subjects (non-medical) and the process for when you might need \r\n the IRB to review your research plan. An Institutional Review Board (IRB) i\r\n s a committee that reviews and approves research involving human subjects t\r\n o ensure it is ethical and protects participants' rights and welfare. \\n\\nD\r\n ate and Time: 11:00AM–12:00PM\\, Tuesday\\, February 10\\, 2026Location: Tiern\r\n ey Room (120A)\\, Bing Wing\\, Green Library.Please register to attend. Regis\r\n tration is exclusively open to current Stanford Affiliates and will be offe\r\n red on a first-come\\, first-served basis. Given the limited space\\, a waitl\r\n ist will be available once all spots are filled.\\n\\nThis workshop is part o\r\n f Love Data Week\\, an annual festival highlighting topics\\, opportunities a\r\n nd services relevant to data in research.\\n\\nThis is an in-person event\\, p\r\n lease bring your Stanford ID card or mobile ID to enter Green Library. \\n\\n\r\n We will be taking photos at this event for publicity purposes. Your presenc\r\n e at this event constitutes consent to be photographed unless you express o\r\n therwise.\r\nDTEND:20260210T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T190000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Tierney Room (120A)\r\nSEQUENCE:0\r\nSUMMARY:Writing a Research Proposal? Learn about the Stanford IRB process w\r\n ith Michael Levesque\r\nUID:tag:localist.com\\,2008:EventInstance_51524978759100\r\nURL:https://events.stanford.edu/event/gear-up-for-social-science-data-what-\r\n is-the-irb-process-at-stanford\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In a new report for the Council on Foreign Relations\\, America \r\n Revived\\, Ambassador Blackwill argues that the United States faces the most\r\n  dangerous international environment since World War II. He defines U.S. vi\r\n tal national interests\\, summarizes the history of American grand strategy\\\r\n , outlines and critiques five grand strategy schools (primacy\\, liberal int\r\n ernationalism\\, restraint\\, American nationalism\\, and Trumpism)\\, and adva\r\n nces a new grand strategy—resolute global leadership. This approach merges \r\n the military power and global presence of primacy with the alliance network\r\n s\\, institutional engagement\\, and focus on legitimacy emphasized by libera\r\n l internationalism.\r\nDTEND:20260210T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Alternative U.S. Grand Strategies: Past\\, Present\\, Future\r\nUID:tag:localist.com\\,2008:EventInstance_51951464027952\r\nURL:https://events.stanford.edu/event/alternative-us-grand-strategies-past-\r\n present-future\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260210T212000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nLOCATION:Turing Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Atmosphere & Energy Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_52011065145679\r\nURL:https://events.stanford.edu/event/atmosphere-energy-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260211T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561106774\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Dr. Lydia Jennings (she/her) is an environmental soil scientist\r\n  and Assistant Professor at Dartmouth College. Lydia\\, citizen of the Pascu\r\n a Yaqui Tribe (Yoeme) and Huichol (Wixáritari)\\, earned her Bachelors of Sc\r\n ience from California State University\\, Monterey Bay in Environmental Scie\r\n nce\\, Technology and Policy. She completed her Ph.D. at the University of A\r\n rizona in the Department of Environmental Sciences\\, with a minor in Americ\r\n an Indian Policy.\\n\\nHer research interests are in soil health\\, environmen\r\n tal data stewardship and science communication. Lydia is a 2014 University \r\n of Arizona NIEHS Superfund Program trainee\\,  a 2015 recipient of National \r\n Science Foundation’s Graduate Research Fellowship Program\\, a 2019 American\r\n  Geophysical Union  “Voices for Science” Fellow\\, a 2020 Native Nations Ins\r\n titute Indigenous Data Sovereignty Fellow\\, and a 2021 Data Science Fellow.\r\n  Lydia was a Presidential Postdoctoral Fellow at Arizona State University (\r\n School of Sustainability) and Research Fellow at Duke University (Nicholas \r\n School of the Environment) prior to her current role as an Assistant Profes\r\n sor in Environmental Studies at Dartmouth College. \\n\\nOutside of her schol\r\n arship\\, Lydia is passionate about connecting her scholarship to outdoor sp\r\n aces\\, through running and increasing representation in outdoor recreation.\r\n  Lydia has been recognized as a “trail runner changing the world” by REI Co\r\n -op and as an “Environmental Sports Champion” by the Lewis Pugh Foundation.\r\nDTEND:20260210T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nLOCATION:McCullough 115\r\nSEQUENCE:0\r\nSUMMARY:Earth Planetary Science Seminar  - Dr. Lydia Jennings \"The Missing \r\n Layer in Soil Science: Indigenous Knowledge and Data Sovereignty Rethinking\r\n  Sustainability\\, Evidence\\, and Stewardship\".\r\nUID:tag:localist.com\\,2008:EventInstance_52028957333985\r\nURL:https://events.stanford.edu/event/earth-planetary-science-seminar-dr-ly\r\n dia-jennings-the-missing-layer-in-soil-science-indigenous-knowledge-and-dat\r\n a-sovereignty-rethinking-sustainability-evidence-and-stewardship\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: Why do democratic leaders politicize foreign p\r\n olicy bureaucracies? While existing scholarship recognizes that leaders and\r\n  bureaucrats often clash\\, it usually attributes these conflicts to organiz\r\n ational pathologies\\, principal-agent problems\\, or policy disagreements. T\r\n his project develops a theory that explains when leaders attack their forei\r\n gn policy bureaucracies by installing loyalists\\, marginalizing or purging \r\n careerists\\, and creating parallel agencies\\, a strategy I call politicizat\r\n ion. It argues that leaders tend to politicize instead of bypassing or coor\r\n dinating with the bureaucracy when two forces come together: when leaders s\r\n trongly distrust the bureaucracy\\, fueled by intense partisan\\, ideological\r\n \\, and social conflicts\\, and have enough domestic political power to resha\r\n pe institutions in their own image.\\n\\nAbout the speaker: Emily Tallo is th\r\n e India-U.S. security studies postdoctoral fellow at CISAC. She received he\r\n r Ph.D. in political science from the University of Chicago in August 2025.\r\n  Emily’s research centers on the domestic politics of foreign policy\\, focu\r\n sing on how leaders\\, bureaucracies\\, and political parties shape internati\r\n onal politics with a regional emphasis on South Asia. Before academia\\, Emi\r\n ly was a researcher at the Henry L. Stimson Center’s South Asia program in \r\n Washington\\, DC\\, and an editor of the online magazine South Asian Voices. \r\n Her commentary has been featured in Foreign Policy\\, The Washington Post’s \r\n Monkey Cage blog\\, and War on the Rocks.\r\nDTEND:20260210T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Fighting Servants: Why Democratic Leaders Politicize Foreign Policy\r\n  Bureaucracies\r\nUID:tag:localist.com\\,2008:EventInstance_51969021233928\r\nURL:https://events.stanford.edu/event/fighting-servants-why-democratic-lead\r\n ers-politicize-foreign-policy-bureaucracies\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This talk examines how age and generational differences shape s\r\n martphone adoption patterns in South Korea\\, one of the world's most rapidl\r\n y aging societies. Using discrete-time hazard models\\, the analysis investi\r\n gates whether digital divides reflect temporary life stage effects or persi\r\n stent generational differences that accompany cohorts throughout their live\r\n s. Preliminary results reveal striking heterogeneity both across and within\r\n  age cohorts\\, suggesting that neither age nor cohort membership alone full\r\n y explains adoption patterns. Motivated by these findings\\, the talk conclu\r\n des by introducing an age-period-cohort framework designed to separate the \r\n distinct effects of aging\\, different formative experiences (cohort effect)\r\n \\, and changing environment (period effect) on technology adoption.\\n\\nAbou\r\n t the speaker:\\n\\nJinseok Kim is a Visiting Postdoctoral Fellow at Stanford\r\n ’s Shorenstein Asia-Pacific Research Center (APARC) and the Stanford Next A\r\n sia Policy Lab (SNAPL). His research examines economic decision-making and \r\n technology adoption through the lens of behavioral and applied microeconomi\r\n cs. Using econometric modeling and experimental approaches\\, he studies con\r\n sumer behavior\\, innovation diffusion\\, and the interaction between policy\\\r\n , markets\\, and demographic change. His work contributes to understanding h\r\n ow psychological factors and institutional contexts shape economic choices \r\n and the adoption of new technologies.\r\nDTEND:20260210T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, 3RD Floor\\, Philippines Conference Room (C330)\r\nSEQUENCE:0\r\nSUMMARY:Innovation Diffusion in an Aging Society: Evidence from 15 Years of\r\n  Smartphone Adoption in Korea\r\nUID:tag:localist.com\\,2008:EventInstance_51951249328618\r\nURL:https://events.stanford.edu/event/innovation-diffusion-in-an-aging-soci\r\n ety-evidence-from-15-years-of-smartphone-adoption-in-korea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Professors Anat Admati and Amit Seru discuss the current state \r\n of institutions\\, dynamics\\, and evolving boundaries of authority in econom\r\n ic decision making and banking.\r\nDTEND:20260210T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nGEO:37.428109;-122.161027\r\nLOCATION:Graduate School of Business\\, Room G101\\,  Gunn Building\r\nSEQUENCE:0\r\nSUMMARY:Power and Politics in Banking Today\r\nUID:tag:localist.com\\,2008:EventInstance_52015598958281\r\nURL:https://events.stanford.edu/event/power-and-politics-in-banking-today\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Why do we sometimes procrastinate even on the things we care de\r\n eply about? And how can we create motivation that actually lasts—beyond dea\r\n dlines\\, or external pressure? In this interactive workshop\\, we’ll explore\r\n  the psychological science behind motivation and procrastination\\, with a s\r\n pecial focus on avoidance loops due to fear of failure\\, perfectionism\\, an\r\n d stress. Through a liberatory and compassionate lens\\, we’ll uncover what \r\n really drives our behavior—and how to rewire our routines in ways that feel\r\n  sustainable and self-honoring. Participants will leave with a personalized\r\n  motivation profile and tools to transform avoidance into aligned action.\\n\r\n \\nLearning Objectives:\\n\\nDefine key psychological terms including: intrins\r\n ic motivation\\, procrastination\\, and activation energy.Identify internal a\r\n nd external factors that influence motivation and avoidance.Understand the \r\n connection between perfectionism\\, fear of failure\\, and procrastination.Ap\r\n ply research-backed techniques to build habits rooted in values\\, not press\r\n ure.Create a sustainable motivation plan based on personal rhythms and goal\r\n s.Experience Level: Intermediate \\n\\nRegister Here\\n\\nFacilitated by:  Dr. \r\n Meag-gan O'Reilly\\, CEO & CO-Founder of Inherent Value Psychology INC\\n\\nAb\r\n out Quick Bytes:\\n\\nGet valuable professional development wisdom that you c\r\n an apply right away! Quick Bytes sessions cover a variety of topics and inc\r\n lude lunch. Relevant to graduate students at any stage in any degree progra\r\n m.\\n\\nSee the full Quick Bytes schedule\r\nDTEND:20260210T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nLOCATION:Tresidder Oak West\\, Oak West Lounge\r\nSEQUENCE:0\r\nSUMMARY:Quick Bytes: The Science of Motivation & Procrastination: How to Ha\r\n ck Your Habits for Sustainable Success\r\nUID:tag:localist.com\\,2008:EventInstance_51438040756024\r\nURL:https://events.stanford.edu/event/quick-bytes-the-science-of-motivation\r\n -procrastination-how-to-hack-your-habits-for-sustainable-success\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Tech Impact and Policy Center on February 10th from 12\r\n PM–1PM Pacific for a seminar with Guilherme Lichand.\\n\\nStanford affiliates\r\n  are invited to join us at 11:40 AM for lunch\\, prior to the seminar.  The \r\n Winter Seminar Series continues through March\\; see our Winter Seminar Seri\r\n es page for speakers and topics. Sign up for our newsletter for announcemen\r\n ts. \\n\\nAbout the Seminar:\\n\\nA rapidly expanding literature documents the \r\n detrimental effects of excessive cell phone use\\, particularly on mental he\r\n alth outcomes and attention. While nearly all studies focus on adult popula\r\n tions\\, many experts have used them to support phone bans in schools – part\r\n ially in the hope that these might help reverse declining trends in standar\r\n dized test scores dating from even before the Covid-19 pandemic. This paper\r\n  provides first-hand evidence that phone restrictions in schools indeed cau\r\n sally boost K–12 learning outcomes. Leveraging the introduction of a policy\r\n  that banned non-pedagogical uses of cell phones within schools in Rio de J\r\n aneiro\\, Brazil\\, we contrast schools that already had strict rules on phon\r\n e use even before the policy (the control group) to all other schools (the \r\n treatment group)\\, before and after the ban. We find that\\, 1.5 year after \r\n roll-out\\, (1) the prevalence of high-usage schools converged across groups\r\n \\; and (2) standardized test scores significantly increased in treatment sc\r\n hools\\, relative to control: in the former\\, students learned 0.06 s.d. mor\r\n e – enough to fully eliminate the baseline gap in test scores across groups\r\n .\\n\\nAbout the Speaker:\\n\\nGuilherme is an Assistant Professor of Education\r\n  at Stanford\\, co-Director at the Stanford Lemann Center for Entrepreneursh\r\n ip and Educational Innovation in Brazil\\, and a faculty affiliate at the St\r\n anford King Center for Global Development\\, the Stanford Center on Early Ch\r\n ildhood\\, the Stanford Institute for Advancing Just Societies\\, and the UC \r\n Berkeley Center for Effective Global Action. He holds a PhD in Political Ec\r\n onomy and Government from Harvard University. Previously\\, he was the UNICE\r\n F professor of Economics and Child Wellbeing and Development at the Univers\r\n ity of Zurich. Guilherme was recognized by the Schwab Foundation and Folha \r\n de São Paulo as Brazil's top-10 social entrepreneur (post-pandemic legacy)\\\r\n , in 2020\\, and by MIT Technology Review as Brazil's top social innovator a\r\n mong under-35 entrepreneurs\\, in 2014. He is also an expert in social innov\r\n ation at the World Economic Forum Expert Network.\r\nDTEND:20260210T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T200000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, Studio S40 - bring you\r\n r Stanford ID card/mobile ID to enter the building\r\nSEQUENCE:0\r\nSUMMARY:The Educational Impacts of School Phone Bans\r\nUID:tag:localist.com\\,2008:EventInstance_51933547539452\r\nURL:https://events.stanford.edu/event/the-educational-impacts-of-school-pho\r\n ne-bans\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260210T230000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491602317\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Get ready for a K-Pop data extravaganza! Join us during Love Da\r\n ta Week 2026 for an immersive\\, interactive event that combines your love o\r\n f K-Pop with the power of data. Whether you're a die-hard K-Pop fan or just\r\n  curious about the global phenomenon\\, this fun\\, hands-on experience will \r\n reveal how data is shaping the music industry's hottest trends.\\n\\n As a K-\r\n Pop Data Hunter\\, you'll embark on a journey to uncover the stories behind \r\n the music. Explore curated resources from Stanford's K-Pop collection\\, fea\r\n turing over 150 Korean titles\\, CDs\\, and posters. You'll learn how data is\r\n  collected\\, analyzed\\, and shared to understand the K-Pop universe from so\r\n ng metrics to fan engagement. Plus\\, participate in exciting activities\\, i\r\n ncluding an OX quiz\\, Guess the Song challenge\\, and Bingo\\, with prizes to\r\n  be won! \\n\\nThis event will take place in the courtyard outside the East A\r\n sia Library.\\n\\nWe will be taking photos at this event for publicity purpos\r\n es. Your presence at this event constitutes consent to be photographed unle\r\n ss you express otherwise.\r\nDTEND:20260210T233000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T213000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\r\nSEQUENCE:0\r\nSUMMARY:K-Pop Data Hunters\r\nUID:tag:localist.com\\,2008:EventInstance_51498720685520\r\nURL:https://events.stanford.edu/event/kpop-data-hunters\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Join a community of fellow instructors sharing and discussing t\r\n heir experiences navigating AI in their teaching practices. These events wi\r\n ll be hosted in-person only at the Center for Teaching and Learning in wint\r\n er quarter. Each event includes lightning talks and open discussions featur\r\n ing Stanford educators.\\n\\nThis series is part of AI meets Education at Sta\r\n nford (AImES)\\, a VPUE effort to catalyze and support critical engagement w\r\n ith generative AI in Stanford teaching and learning contexts\\, coordinated \r\n by the Center for Teaching and Learning.\\n\\nRegister separately for each se\r\n ssion by clicking the date below:\\n\\nTuesday\\, February 10\\, 1:30–3 pm\\, fe\r\n aturing:\\n\\nRamesh Johari\\, Professor\\, Management Science and EngineeringT\r\n amar Brand-Perez\\, Lecturer\\, Human BiologyRobby Ratan\\, Visiting Scholar\\,\r\n  Communication DepartmentTuesday\\, February 17\\, 2:30–4 pm\\, featuring: ***\r\n This session has been cancelled due to power cuts on campus\\; check for res\r\n cheduling later ***\\n\\nAriel Stilerman\\, Assistant Professor\\, East Asian L\r\n anguages and CulturesSho Takatori\\, Associate Professor\\, Chemical Engineer\r\n ingNarayanan Shivakumar\\, Lecturer\\, Computer ScienceAll sessions will be a\r\n t 408 Panama Mall\\, CTL Meeting Space (Room 116)\\n\\nIf you need accommodati\r\n on or have questions\\, please contact Kenji Ikemoto at AcademicTechnology@s\r\n tanford.edu.\r\nDTEND:20260210T230000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T213000Z\r\nLOCATION:408 Panama Mall\\, CTL Meeting Space (Room 116)\r\nSEQUENCE:0\r\nSUMMARY:Teaching with AI Community Share-outs Winter 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51577833071915\r\nURL:https://events.stanford.edu/event/teaching-with-ai-community-share-out-\r\n w26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Romance is one of the richest – and one of the very oldest – ve\r\n ins of storytelling. It’s multifarious\\, intercultural\\, transhistorical…an\r\n d at the same time reliant on characters\\, tropes\\, plot structures\\, and s\r\n torytelling strategies that have persisted in their appeal to audiences thr\r\n ough the centuries. This month’s Special\\, Unique\\, and Rare pop-up exhibit\r\n  offers some fascinating examples from Stanford Libraries’ collections of R\r\n OMANCE – courtly\\, divine\\, doomed\\, epistolary\\, unrequited\\, and so much \r\n more – to dally with for a moment or two. \\n\\nDrop in any time between 2-4 \r\n PM on Tuesday\\, February  10th\\, Hohbach 123 (Silicon Valley Archive classr\r\n oom\\, Green Library).\\n\\nFor once-a-monthly notifications about upcoming Sp\r\n ecial\\, Unique & Rare pop-up exhibits\\, join our mailing list.\r\nDTEND:20260211T000000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T220000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Hohbach Hall 123 (1st floor\\, East Win\r\n g)\r\nSEQUENCE:0\r\nSUMMARY:Special\\, Unique\\, and Rare: ROMANCE\r\nUID:tag:localist.com\\,2008:EventInstance_51994840478543\r\nURL:https://events.stanford.edu/event/special-unique-and-rare-romance\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Eric Goldman\\, a professor of law at Santa Clara University Sch\r\n ool of Law\\, and Jim Steyer\\, founder and CEO of Common Sense Media\\, discu\r\n ss the pros and cons of the TAKE IT DOWN Act. \\n\\nDeep disagreement pervade\r\n s our democracy\\, from arguments over immigration\\, gun control\\, abortion\\\r\n , and the Middle East crisis\\, to the function of elite higher education an\r\n d the value of free speech itself. Loud voices drown out discussion. Open-m\r\n indedness and humility seem in short supply among politicians and citizens \r\n alike. Yet constructive disagreement is an essential feature of a democrati\r\n c society. This class explores and models respectful civic disagreement. Ea\r\n ch week features scholars who disagree — sometimes quite strongly — about m\r\n ajor policy issues. Each class will be focused on a different topic and hav\r\n e guest speakers. Students will have the opportunity to probe those disagre\r\n ements\\, to understand why they persist even in the light of shared evidenc\r\n e\\, and to improve their own understanding of the facts and values that und\r\n erlie them.\\n\\nThis course is offered in the spirit of the observation by H\r\n anna Holborn Gray\\, former president of the University of Chicago\\, that “e\r\n ducation should not be intended to make people comfortable\\, it is meant to\r\n  make them think. Universities should be expected to provide the conditions\r\n  within which hard thought\\, and therefore strong disagreement\\, independen\r\n t judgment\\, and the questioning of stubborn assumptions\\, can flourish in \r\n an environment of the greatest freedom.”\\n\\nThe speakers in this course are\r\n  the guests of the faculty and students alike and should be treated as such\r\n . They are aware that their views will be subject to criticism in a manner \r\n consistent with our commitment to respectful critical discourse. We will pr\r\n ovide as much room for students’ questions and comments as is possible for \r\n a class of several hundred. For anyone who feels motivated to engage in a p\r\n rotest against particular speakers\\, there are spaces outside the classroom\r\n  for doing so.\\n\\nWhen/Where?: Tuesdays 3:00-4:50PM in Cemex Auditorium\\n\\n\r\n Who?: This class will be open to students\\, faculty and staff to attend and\r\n  will also be recorded.\\n\\n1/6 Administrative State: https://events.stanfor\r\n d.edu/event/the-administrative-state-with-brian-fletcher-and-saikrishna-pra\r\n kash\\n\\n1/13 Israel-Palestine: https://events.stanford.edu/event/democracy-\r\n and-disagreement-israel-palestine-the-future-of-palestine\\n\\n1/20 COVID Pol\r\n icies in Retrospect: https://events.stanford.edu/event/democracy-and-disagr\r\n eement-covid-policies-in-retrospect-with-sara-cody-and-stephen-macedo\\n\\n1/\r\n 27 Gender-Affirming Care: https://events.stanford.edu/event/democracy-and-d\r\n isagreement-gender-affirming-care-with-alex-byrne-and-amy-tishelman\\n\\n2/3 \r\n Fetal Personhood: https://events.stanford.edu/event/democracy-and-disagreem\r\n ent-fetal-personhood-with-rachel-rebouche-and-chris-tollefsen\\n\\n2/17 Restr\r\n ictions on College Protests: https://events.stanford.edu/event/democracy-an\r\n d-disagreement-restrictions-on-college-protests-with-richard-shweder-and-sh\r\n irin-sinnar\\n\\n2/24 Proportional Representation: https://events.stanford.ed\r\n u/event/democracy-and-disagreement-proportional-representation-with-bruce-c\r\n ain-and-lee-drutman \\n\\n3/3 AI and Jobs: https://events.stanford.edu/event/\r\n democracy-and-disagreement-ai-and-jobs-with-bharat-chander-and-rob-reich\\n\\\r\n n3/10 Ending the Russia-Ukraine War: https://events.stanford.edu/event/demo\r\n cracy-and-disagreement-ending-the-russiaukraine-war-with-samuel-charap-and-\r\n gabrielius-landsbergis\r\nDTEND:20260211T005000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T230000Z\r\nGEO:37.428584;-122.162763\r\nLOCATION:GSB Knight - Arbuckle / Cemex\r\nSEQUENCE:0\r\nSUMMARY:Democracy and Disagreement: Internet Regulation (The TAKE IT DOWN A\r\n ct) with Eric Goldman and Jim Steyer\r\nUID:tag:localist.com\\,2008:EventInstance_51569265781998\r\nURL:https://events.stanford.edu/event/democracy-and-disagreement-internet-r\r\n egulation-the-take-it-down-act-with-eric-goldman-and-jim-steyer\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This group is designed to support students who wish to have a s\r\n afe healing space through utilization of art. Sessions will include hand bu\r\n ilding clay\\, doodling\\, watercolor painting\\, Turkish lump making\\, Chines\r\n e calligraphy\\, rock painting\\, washi tape art\\, terrarium making\\, origami\r\n  and matcha tea. \\n\\nPre-screening is required. Mari or Marisa will reach o\r\n ut to schedule a confidential pre-screening phone or zoom call. \\n\\nWHEN: E\r\n very Tuesday from 3:00 PM - 4:30 PM in Fall Quarter for 7-8 sessions (start\r\n ing on Tuesday in the beginning of Feb\\, 2026) \\n\\nWHERE: In person @ Room \r\n 306 in Kingscote Gardens (419 Lagunita Drive\\, 3rd floor)\\n\\nWHO: Stanford \r\n undergrad and grad students Facilitators: Mari Evers\\, LCSW & Marisa Pereir\r\n a\\, LCSW from Stanford Confidential Support Team\r\nDTEND:20260211T003000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden \r\nSEQUENCE:0\r\nSUMMARY:Healing with Art group \r\nUID:tag:localist.com\\,2008:EventInstance_51827321265512\r\nURL:https://events.stanford.edu/event/healing-with-art-group-6772\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Abstract: Three remarkable abilities of brains and machines are\r\n  to: (1) learn new behaviors from a single example\\, (2) creatively imagine\r\n  new possibilities\\, (3) learn language\\, and (4) perform mathematical reas\r\n oning.  I will discuss simple analytic yet quantitatively predictive theori\r\n es of how (1) mice learn to accurately navigate on the first encounter in a\r\n  new environment\\; (2) how diffusion models creatively imagine exponentiall\r\n y many new images\\; (3) how the structure of natural language governs how m\r\n uch data is required to learn it\\, and (4) how language models can better d\r\n o mathematically reasoning.  Theoretical physics approaches are essential i\r\n n deriving all of these theories\\, spanning techniques like statistical mec\r\n hanics\\, pattern formation\\, nonlinear dynamics\\, high dimensional geometry\r\n \\, scaling analysis\\, and control of entropy.  More generally\\, just as bio\r\n logy once provided a new frontier of complexity for physics to study\\, I su\r\n ggest that AI now provides a new frontier in which physics can expand to yi\r\n eld a new\\, fundamental scientific understanding of intelligence.\\n\\nSurya \r\n Ganguli is a professor of Applied Physics at Stanford\\, an Associate Direct\r\n or of Stanford’s Human Centered AI Institute\\, and a Venture Partner at Gen\r\n eral Catalyst. Dr. Ganguli triple majored in physics\\, mathematics\\, and EE\r\n CS at MIT\\, completed a PhD in string theory at Berkeley\\, and a postdoc in\r\n  theoretical neuroscience at UCSF. He has also been a visiting researcher a\r\n t both Google and Meta AI\\, and a venture partner at a16z. His research spa\r\n ns the fields of AI\\, physics\\, and neuroscience\\, focusing on understandin\r\n g and improving how both biological and artificial neural networks learn st\r\n riking emergent computations.\r\nDTEND:20260211T003000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T233000Z\r\nGEO:37.428953;-122.172839\r\nLOCATION:Hewlett Teaching Center\\, 201\r\nSEQUENCE:0\r\nSUMMARY:Applied Physics/Physics Colloquium: Surya Ganguli- \"Theories of Neu\r\n ral Computation Underlying Learning\\, Imagination\\, Reasoning and Scaling: \r\n of Mice and Machines\"\r\nUID:tag:localist.com\\,2008:EventInstance_51995010918248\r\nURL:https://events.stanford.edu/event/applied-physicsphysics-colloquium-sur\r\n ya-ganguli-theories-of-neural-computation-underlying-learning-imagination-r\r\n easoning-and-scaling-of-mice-and-machines\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Interested in pursuing global health after graduating from the \r\n HumBio program? Join HumBio and the Undergrad Global Health Club for a talk\r\n  with Nicole Skehan\\, an alum of the UCSF Global Health Masters of Science \r\n program\\, on how a foundation in human biology can translate into academic \r\n and professional global health pathways.\\n\\n \\n\\n🗓 Date: Tuesday\\, February\r\n  10th\\n\\n🕦 Time: 3:30 pm - 4:20 pm\\n\\n📍 Location: Sapp Center for Science T\r\n eaching and Learning (STLC) 119\\n\\n \\n\\nRSVP now at: https://tinyurl.com/GH\r\n xHumBio\r\nDTEND:20260211T002000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T233000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 119\r\nSEQUENCE:0\r\nSUMMARY:Exploring Global Health After HumBio\r\nUID:tag:localist.com\\,2008:EventInstance_51960893156857\r\nURL:https://events.stanford.edu/event/exploring-global-health-after-humbio\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium,Social Event/Reception\r\nDESCRIPTION:Join us on February 10\\, 2026 from 3:30 p.m. - 5:30 p.m. in the\r\n  Hartley Conference Room\\, Mitchell Earth Sciences Building to celebrate th\r\n e work of the SDSS Dean's Graduate Scholars and the SDSS Dean's Sustainabil\r\n ity Leaders Postdocs. As part of Love Data Week with the Stanford Universit\r\n y Libraries\\, we are highlighting the work of the Doerr School of Sustainab\r\n ility Dean's Scholars in this special research symposium.\\n\\nThe symposium \r\n will consist of lightning talks given by students and postdocs (see below)\\\r\n , followed by a reception with light refreshments.\\n\\nRegistration required\r\n  through Luma.\\n\\nProgram Itinerary\\n\\n3:30-3:40pm | Opening Remarks and In\r\n troductions3:50-5:00pm | Speaker PresentationsCatherine Lee Hing | Ph.D. ca\r\n ndidate | E-IPEREvolution of Traditional Fishing in the CaribbeanJordan Tuc\r\n ker | Master's candidate | GeophysicsDifferentiating sea ice properties usi\r\n ng coincident observationsStephanie Caddell | Ph.D. student | OceansProtect\r\n ing juvenile Loggerheads: Evaluating bycatch risk in North Pacific foraging\r\n  areasElsie Carillo | Postdoctoral Scholar | OceansA bubble for trouble: Na\r\n rial bubble \"rebreathing\" as an alternate mechanism for extending time unde\r\n rwater in Garter snakesAarabhi Achanta | Ph.D. student | Earth System Scien\r\n ceAgent-based modeling of food market dynamics under climate variability in\r\n  KarnatakaKatie Huy | Ph.D. candidate | Earth System ScienceImpact of presc\r\n ribed fire on soil C and N cyclingMario Ruiz Moreno | Ph.D. candidate | Geo\r\n physicsInside an explosion: Linking volcano physics to what geophyscists me\r\n asure on the groundAlexis Hensley | Ph.D. student | GeophysicsProspecting f\r\n or 3HE on the moon using regolith magnetic susceptibility measurements​​​​​\r\n ​​5:00-5:30pm | Reception - Everyone is invited!SDSS Dean’s Grad Scholars A\r\n ward Program\\n\\nThe SDSS Dean’s Grad Scholars Program award and professiona\r\n l development to support the first year of graduate school at the Doerr Sch\r\n ool for incoming MS and PhD student who excel academically and also display\r\n  leadership in creating inclusive academic spaces in the sciences. \\n\\nSDSS\r\n  Dean’s Sustainability Leaders Postdoctoral Fellowship\\n\\nThe SDSS Dean’s S\r\n ustainability Leaders Postdoctoral Fellowship is a two year fellowship for \r\n Postdoctoral Fellows who demonstrate research excellence in advancing field\r\n s reflected across the Doerr and have a track record of creating inclusive \r\n science through teaching\\, research and/or leadership.\\n\\nThis event is co-\r\n hosted by Stanford University Libraries and the Stanford Doerr School of Su\r\n stainability Office of Access\\, Belonging\\, and Community\\, as part of Stan\r\n ford Love Data Week\\, an annual festival highlighting topics\\, opportunitie\r\n s and services relevant to data in research.\\n\\nWe will be taking photos at\r\n  this event for publicity purposes. Your presence at this event constitutes\r\n  consent to be photographed unless you express otherwise.\r\nDTEND:20260211T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260210T233000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Center\\, 1st Floor\r\nSEQUENCE:0\r\nSUMMARY:SDSS Dean's Scholars Data Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_51774469669128\r\nURL:https://events.stanford.edu/event/love-data-week-scholars-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Explore Professor Garcia’s work in this interview with KQED pod\r\n casts\\, “Inside Mexico’s Clandestine Drug Treatment Centers.”\\n\\nBased on o\r\n ver a decade of research\\, a powerful\\, moving work of narrative nonfiction\r\n  that illuminates the little-known world of the anexos of Mexico City\\, the\r\n  informal addiction treatment centers where mothers send their children to \r\n escape the violence of the drug war.\\n\\nThe Way That Leads Among the Lost r\r\n eveals a hidden place where care and violence are impossible to separate: t\r\n he anexos of Mexico City. The prizewinning anthropologist Angela Garcia tak\r\n es us deep into the world of these small rooms\\, informal treatment centers\r\n  for alcoholism\\, addiction\\, and mental illness\\, spread across Mexico Cit\r\n y’s tenements and reaching into the United States. Run and inhabited by Mex\r\n ico’s most marginalized populations\\, they are controversial for their ille\r\n gality and their use of coercion. Yet for many Mexican families desperate t\r\n o keep their loved ones safe\\, these rooms offer something of a refuge from\r\n  what lies beyond them—the intensifying violence surrounding the drug war.\\\r\n n\\nThis is the first book ever written on the anexos. Garcia\\, who spent a \r\n decade conducting anthropological fieldwork in Mexico City\\, draws readers \r\n into their many dimensions\\, casting light on the mothers and their childre\r\n n who are entangled in this hidden world. Following the stories of its deni\r\n zens\\, she asks what these places are\\, why they exist\\, and what they refl\r\n ect about Mexico and the wider world. With extraordinary empathy and a shar\r\n p eye for detail\\, Garcia attends to the lives that the anexos both sustain\r\n  and erode\\, wrestling with the question of why mothers turn to them as a s\r\n ite of refuge even as they reproduce violence. Woven into these portraits i\r\n s Garcia’s own powerful story of family\\, childhood\\, homelessness\\, and dr\r\n ugs—a blend of ethnography and memoir converging on a set of fundamental qu\r\n estions about the many forms and meanings that violence\\, love\\, care\\, fam\r\n ily\\, and hope may take.\\n\\nInfused with profound ethnographic richness and\r\n  moral urgency\\, The Way That Leads Among the Lost is a stunning work of na\r\n rrative nonfiction\\, a book that will leave a deep mark on readers.\\n\\n \\n\\\r\n nSponsored by the Research Institute of CCSRE.\r\nDTEND:20260211T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T000000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, CCSRE Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Angela Garcia\\, “The Way That Leads Among the Lost: Life\\, Death\\, \r\n and Hope in Mexico City's Anexos\\,” in conversation with Paula Moya\r\nUID:tag:localist.com\\,2008:EventInstance_51436980941354\r\nURL:https://events.stanford.edu/event/angela-garcia-the-way-that-leads-amon\r\n g-the-lost-life-death-and-hope-in-mexico-citys-anexos-in-conversation-with-\r\n paula-moya\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join Stanford University Libraries and CCRMA faculty for an int\r\n eractive performance of a data sonification work by Professor Chris Chafe. \r\n We'll be featuring guest carillonneur Professor Tiffany Ng from the Univers\r\n ity of Michigan.\\n\\nAttendees will be able to participate in the performanc\r\n e using a browser-based smartphone interface! To join in on the performance\r\n \\, go here: https://www.suncarillon.org/index.html.\\n\\nPlease arrive at Hoo\r\n ver Tower by 4 PM. The performance will begin at 4:15 PM.\r\nDTEND:20260211T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T000000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:CCRMA Data Sonification Performance at Hoover Tower\r\nUID:tag:localist.com\\,2008:EventInstance_51507767927273\r\nURL:https://events.stanford.edu/event/ccrma-data-sonification-ensemble-perf\r\n ormance-at-hoover-tower\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Counseling & Psychological Services is happy to offer Rooted! T\r\n his is a support group for Black-identified Stanford graduate students that\r\n  is designed to be a confidential space for students to speak their minds\\,\r\n  build community\\, rest\\, connect with themselves\\, and learn coping skills\r\n  for managing graduate life at Stanford.\\n\\nFacilitated by Cierra Whatley\\,\r\n  PhD & Katie Ohene-Gambill\\, PsyDThis group meets in-person on Tuesdays fro\r\n m 4-5pm on 1/27\\; 2/3\\; 2/10\\; 2/17\\; 2/24\\; 3/3\\; 3/10All enrolled student\r\n s are eligible to participate in CAPS groups and workshops. A pre-group mee\r\n ting is required prior to participation in this group. Please contact CAPS \r\n at (650) 723-3785 to schedule a pre-group meeting with the facilitators.\r\nDTEND:20260211T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T000000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Rooted! Black Graduate Student Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51579799613469\r\nURL:https://events.stanford.edu/event/copy-of-rooted-black-graduate-student\r\n -support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, February 10\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\\r\n , or Zoom for a presentation by John Heymach\\, MD\\, PhD\\, chair of the thor\r\n acic/head and neck medical oncology at MD Anderson Cancer Center. \\n\\nAs a \r\n physician-scientist\\, Dr. Heymach’s research focuses on investigating mecha\r\n nisms of therapeutic resistance to targeted agents\\, understanding the regu\r\n lation of angiogenesis in lung cancer\\, and the development of biomarkers f\r\n or targeted agents and immunotherapy. His research has led to new therapeut\r\n ic approaches for KRAS mutant lung cancer\\, small cell lung cancer (SCLC)\\,\r\n  EGFR mutant non-small cell lung cancer (NSCLC)\\, adenoid cystic carcinoma\\\r\n , and oligometastatic NSCLC\\, many of which are now considered standard-of-\r\n care regimens or undergoing clinical testing.\\n\\nThe event is open to Stanf\r\n ord Cancer Institute members\\, postdocs\\, fellows\\, and students\\, as well \r\n as Stanford University and Stanford Medicine faculty\\, trainees\\, and staff\r\n  interested in basic\\, translational\\, clinical\\, and population-based canc\r\n er research.\\n\\nRegistration is encouraged.\r\nDTEND:20260211T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T000000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: Beyond Driver On\r\n cogenes: New Paradigms for Personalizing Lung Cancer Therapies\r\nUID:tag:localist.com\\,2008:EventInstance_51288366711720\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-beyond-driver-oncogenes-new-paradigms-for-personalizing-lung-c\r\n ancer-therapies\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260211T004500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T001500Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52065491906125\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:About the event\\n\\nSouth Asia Working Group (SAWG) together wit\r\n h Stanford Sri Lankan Association (SSLA) present Ayu\\, a Sri Lankan film di\r\n rected by Chathra Weeraman starring Sandra Mack\\, Jagath Manuwarna\\, Ashan \r\n Dias\\, Malini Fonseka and Kenara Weeratunga. Ayu\\, tells the story of Nishm\r\n i (Sandra Mack)\\, a paediatrician who survives a life-altering accident but\r\n  is left emotionally adrift in its aftermath. \\n\\nMusic by Milinda Tennakoo\r\n ne.\\n\\nProduction Design by Bimal Dushmantha.\\n\\nUS Distribution courtesy o\r\n f Gayesha Perera Films.\\n\\nRuntime: 1 hour and 56 minutes\\n\\nAbout the Dire\r\n ctor\\n\\nBorn in Colombo\\, Sri Lanka\\, Chathra Weeraman is a graduate of Cin\r\n ematic Arts. Chathra began his career initially as a CG artist and later we\r\n nt on to offer on-set VFX supervision for films. His career took a sharp tu\r\n rn when his directorial debut saw the light of day. The Biopic ‘Aloko Udapa\r\n di’ (Light Arose) gained much hype from the mass audience of Sri Lanka and \r\n was critically acclaimed. The film premiered at the 47th International Film\r\n  Festival of India\\, 9th Bengaluru International Film Festival and 20th Sha\r\n nghai International Film Festival.\\n\\nCheck out Ayu (2025) trailer here.\\n\\\r\n nRegistration is required.\r\nDTEND:20260211T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T003000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:AYU: Film Screening and Discussion\r\nUID:tag:localist.com\\,2008:EventInstance_51782070576088\r\nURL:https://events.stanford.edu/event/ayu-film-screening-and-discussion\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:What: R. Marie Griffith\\, \"Bankrupt: Power\\, Abuse\\, and Trauma\r\n  in American Christianity” \\n\\nWhen: 4:30pm\\, February 10\\, 2026\\n\\nWhere: \r\n Levinthal Hall\\, Stanford Humanities Center\\n\\nFree and open to the public\\\r\n n\\nPresented by American Religions in a Global Context at Stanford\\n\\nCo-sp\r\n onsored by the Martin Luther King\\, Jr. Research and Education Institute\\, \r\n the Blokker Research Workshop on Religion\\, Politics\\, and Culture\\, and th\r\n e Stanford Humanities Center\r\nDTEND:20260211T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T003000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:Bankrupt: Power\\, Abuse\\, and Trauma in American Christianity with \r\n Marie Griffith\r\nUID:tag:localist.com\\,2008:EventInstance_51932164044000\r\nURL:https://events.stanford.edu/event/bankrupt-power-abuse-and-trauma-in-am\r\n erican-christianity-with-marie-griffith\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Join us for Game Nights every Tuesday in Green Library from 5pm\r\n -8pm in the IC Classroom (near the Reference Desk) of Green Library! These \r\n Game Nights will be open to all\\, from those who can only stop by briefly t\r\n o those who can be there for the entire time.\\n\\nIf you would like to be ad\r\n ded to the Game Nights @ Green mailing list\\, suggest a game\\, or if you ha\r\n ve other feedback\\, please fill out this contact form.\r\nDTEND:20260211T040000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T010000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Ic Classroom\r\nSEQUENCE:0\r\nSUMMARY:Game Nights @ Green\r\nUID:tag:localist.com\\,2008:EventInstance_51808866962028\r\nURL:https://events.stanford.edu/event/game-nights-green-2102\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260211T023000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T013000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663074733\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260211T023000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622309769\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260211\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264960232\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260211\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355485659\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260211\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101468612\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260211\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019650982\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The goals of the conference are to bring together engineers\\, s\r\n cientists and managers involved in geothermal reservoir studies and develop\r\n ments\\; provide a forum for the exchange of ideas on the exploration\\, deve\r\n lopment and use of geothermal resources\\; and to enable prompt and open rep\r\n orting of progress. We strongly encourage all scientists and engineers invo\r\n lved in geothermal reservoir technology to attend the workshop.\\n\\nTopics\\n\r\n \\nPapers will be presented on recent research relating to geothermal reserv\r\n oirs including:\\n\\nCase Studies: reservoir response to production\\, effects\r\n  of injection\\, scaling characteristicsEnhanced Geothermal Systems (EGS): c\r\n urrent and future activitiesEngineering Techniques: reservoir simulation\\, \r\n empirical methods\\, well tests\\, tracersField Management: strategies for ex\r\n ploitation\\, injection\\, scale inhibitionExploration: geophysics\\, geochemi\r\n stry\\, geology\\, heat flow studies\\, outflowsDrilling and Well Bore Flows: \r\n well stimulation\\, bore flow modeling\\, hydro-fracturing\\, scalingLow Entha\r\n lpy Systems: applications of heat pumps\\, hot dry rock technologyGeoscience\r\n s: application of geophysics\\, geochemistry\\, thermodynamics and fluid mech\r\n anics \\n\\nNEW >>> 2026 will allow for in-person and remote attendance\\n\\nIn\r\n  2025\\, we had more people than could be accommodated in the venue\\, so in \r\n 2026 we will modify the format of the Workshop to allow for remote particip\r\n ation as well as in-person. Remote attendees will be able to view all the p\r\n resentations in real time\\, but will not be able to participate in Q&A. How\r\n ever\\, all speakers must be present in person -- we will not have remote pr\r\n esentations.\\n\\nContact Email: \\ngeothermal@se3mail.stanford.edu\r\nDTEND:20260212T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T160000Z\r\nGEO:37.43068;-122.164842\r\nLOCATION:Alumni Center\r\nSEQUENCE:0\r\nSUMMARY:51st Stanford Geothermal Workshop\r\nUID:tag:localist.com\\,2008:EventInstance_50287133685186\r\nURL:https://events.stanford.edu/event/51st-stanford-geothermal-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260211T180000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353477483\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260211T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105015928\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:WiDS Stanford @ Lane Medical Library is independently organized\r\n  by Lane Medical Library to be part of the mission to increase the particip\r\n ation of women in data science and to feature outstanding women doing outst\r\n anding work.\\n\\nWiDS @ Lane aims to inspire\\, engage\\, and support data sci\r\n entists and women in the field. Join us for this half-day virtual conferenc\r\n e on Wednesday\\, February 11\\, 2026\\, our eight annual event. This year's t\r\n heme: \\nReady\\, FAIR\\, Go! Making Clinical and Biomedical Data Findable\\, A\r\n ccessible\\, Interoperable\\, Reusable. Speakers will share insights on chall\r\n enges\\, successes\\, and emerging trends\\, and offer inspiration and practic\r\n al strategies for advancing the field of data science. \\n\\nThe event will b\r\n e recorded via Zoom. Registration is free and open to the public. All gende\r\n rs are welcome and encouraged to attend.\\n\\nConference Agenda:\\n\\n9:00 - 9:\r\n 10 Welcome & Opening Remarks\\n\\n9:10 - 10:00 Opening Keynote by Marina Siro\r\n ta\\, PhD\\, Professor at UCSF\\, Acting Director\\, Bakar Computational Health\r\n  Sciences Institute\\n\\n10:00 - 11:05 Panel Discussion and Q & A with:\\n\\nTe\r\n resa Zayas Cabán\\, PhD\\, Assistant Director for Policy Development\\, Nation\r\n al Library of MedicineAshley Griffin\\, PhD\\, MSPH\\, Instructor\\, Stanford U\r\n niversity Division of Computational Medicine\\,  Investigator\\, VA Palo Alto\r\n  Health Care System\\, Center for Innovation to ImplementationDaniella Meeke\r\n r\\, PhD\\, Associate Professor of Biomedical Informatics & Data Science\\, Ya\r\n le School of Medicine11:05 - 11:10 Break\\n\\n11:10 - 12:05 Closing Keynote b\r\n y Ericka Johnson\\, PhD\\, MPhil\\, Professor\\, Linköping University\\, WASP-HS\r\n  graduate school director\\, Wallenberg AI\\, Autonomous Systems and Software\r\n  Program – Humanity and Society\\n\\n12:05 - 12:10 Wrap-up\\n\\nKeynotes by Mar\r\n ina Sirota & Ericka Johnson\r\nDTEND:20260211T203000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Women in Data Science @ Lane Medical Library Virtual Conference\r\nUID:tag:localist.com\\,2008:EventInstance_51943355699181\r\nURL:https://events.stanford.edu/event/women-in-data-science-lane-medical-li\r\n brary-virtual-conference-5786\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join us for Lane Medical Library’s eighth annual Women in Data \r\n Science (WiDS) regional conference. “Ready\\, FAIR\\, Go! Making Clinical and\r\n  Biomedical Data Findable\\, Accessible\\, Interoperable\\, Reusable”  is this\r\n  year’s theme for the half-day virtual conference. The event will explore h\r\n ow women are incorporating FAIR data principles into their work. This year\\\r\n , our conference coincides with Love Data Week\\, a week-long celebration of\r\n  all things data-related. There will be other data science events and works\r\n hops on campus throughout the week!\\n\\nWiDS Stanford @ Lane Medical Library\r\n  is independently organized by Lane Medical Library to be part of the missi\r\n on to increase the participation of women in data science and to feature ou\r\n tstanding women doing outstanding work.  You can explore all of the Women i\r\n n Data Science events worldwide on the WiDS website.\\n\\nRegister today to s\r\n ave the date! Registration is free and open to the Stanford Medicine commun\r\n ity and beyond.\r\nDTEND:20260211T203000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Women in Data Science Virtual Conference\r\nUID:tag:localist.com\\,2008:EventInstance_51834758383028\r\nURL:https://events.stanford.edu/event/women-in-data-science-virtual-confere\r\n nce\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260212T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382732446\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for a collaborative event co-sponsored by the IT Commun\r\n ities at Harvard and Stanford on Wednesday\\, February 11\\, 2026\\, from 10:0\r\n 0 AM to 11:30 AM PT (1:00 PM to 2:30 PM ET). Delve into the topic of AI ima\r\n ge generation and online platforms\\, where we will explore how algorithms i\r\n nfluence visual representation in the digital age. This event will not be r\r\n ecorded.\\n\\nThis session is part 2 of our ongoing conversation - no prior a\r\n ttendance is required. We'll begin with a brief overview\\, then move into a\r\n n audience-driven format: rather than a formal presentation\\, our speakers \r\n will respond to your questions and interests. We'll revisit popular AI imag\r\n ing tools\\, surface emerging patterns and limitations\\, and invite reflecti\r\n ons on how these technologies shape digital content and cultural narratives\r\n . Our goal is to create a shared space where attendees can steer the conver\r\n sation and deepen their understanding of how to develop balanced and inclus\r\n ive AI-generated images.\\n\\nDon't miss this opportunity to learn from exper\r\n ts\\, engage in critical conversations\\, and connect with colleagues across \r\n institutions. We look forward to an inspiring and thought-provoking session\r\n !\r\nDTEND:20260211T193000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:AI Image Generation: Shaping Perception and Visual Influence Part 2\r\nUID:tag:localist.com\\,2008:EventInstance_51879168503069\r\nURL:https://events.stanford.edu/event/ai-image-generation-spaing-perception\r\n -and-visual-influence-part-2\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Complex systems\\, competing priorities\\, and limited resources \r\n can easily lead to overwhelm and poor execution.\\n\\nToo often\\, teams jump \r\n into implementing a solution to a challenge without first aligning on what \r\n they’re really trying to achieve and what they most need to learn. The resu\r\n lt? Well-intentioned projects that frequently fail to deliver the impact th\r\n ey aimed for.\\n\\nFind the “sweet spot” between strategy and design—where a \r\n clear vision of where you want to go meets a curious\\, iterative approach t\r\n o finding the best path forward—for any project or goals.\\n\\nJoin this inte\r\n ractive two-part certificate program and learn how to advance your mission \r\n by combining innovative strategic logic\\, systems thinking\\, and active hum\r\n an-centered design work.\\n\\nThis program series is produced in partnership \r\n with the Stanford d.school and will include interactive exercises\\, illustr\r\n ative examples\\, and case studies. You will have an opportunity to apply th\r\n ese lessons and frameworks to your own project throughout the workshop. Reg\r\n ister now!\\n\\nBy the end of this program\\, you will leave with:\\n\\nAn under\r\n standing of key concepts in design thinkingA clear\\, actionable scope for y\r\n our projectPractical tools for aligning teams and sharpening focusA repeata\r\n ble process for confidently moving from vision to tested solutionsAttendees\r\n  will receive a digital participation certificate\\, issued by SSIR and Stan\r\n ford d.school\\, to demonstrate your commitment to advancing skills.\\n\\nThis\r\n  program is developed\\, facilitated\\, and presented by Thomas Both and Nadi\r\n a Roumani who teach Design for Social Impact at Stanford d.school (Hasso Pl\r\n attner Institute of Design). They have been training and working with socia\r\n l sector leaders to address complex systems-level challenges for seven year\r\n s\\, steering change in government\\, nonprofit organizations\\, foundations\\,\r\n  and social enterprises.\\n \\n\\nProgram Details\\n\\nSession 1: Strategy and S\r\n coping: Setting the Stage for Impact\\n\\nDate: Wednesday\\, February 4\\, 2026\r\n Time: 10-11:30 a.m. PT / 1-2:30 p.m. ET (90-minute session)Description: In \r\n the first session\\, presenters will guide you through methods for clarifyin\r\n g your intended impact\\, aligning your team\\, surfacing assumptions\\, and i\r\n dentifying critical questions. You will explore different scoping tools\\, i\r\n ncluding Scopey\\, the Stanford d.school’s AI-powered assistant.\\n Session 2\r\n : Design for Impact: Exploring and Iterating Your Way Forward\\n\\nDate: Wedn\r\n esday\\, February 11\\, 2026Time: 10-11:30 a.m. PT / 1-2:30 p.m. ET (90-minut\r\n e session)Description: The second session will be a workshop to plan out yo\r\n ur design work. Learn to apply human-centered design mindsets and methods t\r\n o explore\\, test\\, and refine solutions\\, enabling your work to stay ground\r\n ed in real needs and move toward meaningful change.\\n Register Now!\\n\\nThis\r\n  program is produced in partnership between Stanford d.school and Stanford \r\n Social Innovation Review.\\n\\n\\n\\nWho should attend?\\n\\nAny nonprofit innova\r\n tor\\, philanthropic leader\\, or public sector changemaker will get the oppo\r\n rtunity to turn complexity into clarity—and clarity into impact.\\n \\n\\nProg\r\n ram Features\\n\\n Experienced Speakers\\n\\n​Nadia Roumani is a social entrepr\r\n eneur\\, educator\\, coach\\, and consultant. She is passionate about developi\r\n ng a more equitable\\, creative\\, strategic\\, collaborative\\, and impactful \r\n social sector. She is the co-founder and senior designer with Stanford’s Ha\r\n sso Plattner Institute of Design’s (the d.school) Designing for Social Syst\r\n ems Program. Nadia focuses on helping philanthropists\\, government employee\r\n s\\, and nonprofit leaders become more strategic\\, creative and effective. S\r\n he has co-designed a curriculum that integrates design thinking\\, systems t\r\n hinking\\, and strategic planning to help organizations better scope the cha\r\n llenges they want to address by engaging end-users\\, increasing intra-organ\r\n izational creativity\\, and incorporating radical collaboration.\\n ​Thomas B\r\n oth is a designer and design educator whose passion is helping people under\r\n stand the practice of human-centered design—and their ability as designers—\r\n to innovate how they learn\\, think\\, and solve problems. He is the associat\r\n e creative director at the Hasso Plattner Institute of Design (the d.school\r\n ) at Stanford University and director of the Designing for Social Systems p\r\n rogram. In this program\\, he teaches and coaches social sector professional\r\n s how to apply design thinking to complex social challenges and develop a m\r\n ore human and strategic practice. Certificate Program: Attendees will recei\r\n ve a digital participation certificate from Stanford Social Innovation Revi\r\n ew and Stanford d.school\\, the Hasso Plattner Institute for Design at Stanf\r\n ord University\\, with successful participation in both sessions of this pro\r\n gram.\\n\\n  Interactive Sessions: Participants will be able to ask questions\r\n  and engage with the presenters and other participants.\\n\\n Who Should Join\r\n ? Any nonprofit innovator\\, philanthropic leader\\, or public sector changem\r\n aker.\\n\\n The price for this program is $249. This price includes:\\n— acces\r\n s to join the two live webinar sessions\\n— on-demand access to the webinar \r\n recording for 12 months\\n— downloadable slides\\n— recommended resources\\n— \r\n downloadable certificate (must participate in both sessions to be eligible \r\n to receive)\r\nDTEND:20260211T193000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Connecting the Dots Between Strategy and Design\r\nUID:tag:localist.com\\,2008:EventInstance_51585418576439\r\nURL:https://events.stanford.edu/event/strategy-and-design\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Professor Karnit Flug served the the Governor of the Bank of Is\r\n rael from 2013 to 2018\\, overseeing the stability of the country's financia\r\n l system and advising the Israeli government on economic policy\\, taxation\\\r\n , and growth strategies. In a career spanning four decades\\, Professor Flug\r\n  has gained an unparalled insider's view into the stucture\\, strengths\\, vu\r\n lnerabilities\\, and possible trajectories of the Israeli economy. After two\r\n  years of war and growing international challenges\\, where is the Israeli e\r\n conomy now and where might it be going? Join Amichai Magen in conversation \r\n with Karnit Flug. \\n\\nABOUT THE SPEAKER\\n\\nKarnit Flug is the William David\r\n son Senior Fellow for Economic Policy at the Center for Governance and the \r\n Economy at the Israel Democracy Institute. After she completed her five-yea\r\n r term as Governor of the Bank of Israel in 2018\\, she joined the Departmen\r\n t of Economics at Hebrew University. Prior to her appointment as Governor\\,\r\n  Flug was the Bank of Israel’s Deputy Governor. Previously\\, Flug was Direc\r\n tor of the Research Department and Chief Economist of the Bank of Israel. S\r\n he published numerous papers on macroeconomic policies\\, the labor market\\,\r\n  balance of payments and social policies. She was an economist at the Inter\r\n national Monetary Fund\\, before returning to Israel to join the Research De\r\n partment of the Bank of Israel. She also worked at the Inter-American Devel\r\n opment Bank in Washington D.C. as a Senior Research Economist. She served o\r\n n a number of public and government committees\\, including the Committee on\r\n  Increasing Competitiveness in the Economy\\, the Committee for Social and E\r\n conomic Change (\"the Trajtenberg Committee\")\\, the Defense Budget. Flug rec\r\n eived her M.A. (cum laude) in Economics from The Hebrew University of Jerus\r\n alem\\, and her Ph.D. in Economics from Columbia University.\\n\\nVirtual Even\r\n t Only.\r\nDTEND:20260211T191500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Israel Insights Webinar with Karnit Flug — The Israeli Economy: Quo\r\n  Vadis?\r\nUID:tag:localist.com\\,2008:EventInstance_51208934553916\r\nURL:https://events.stanford.edu/event/israel-insights-webinar-with-karnit-f\r\n lug-the-israeli-economy-quo-vadis\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Assuming favorable weather\\, we will station a solar telescope \r\n with an appropriate and safe filter outside of Green Library that can be us\r\n ed to view the Sun. A solar physicist from Stanford’s JSOC will be on hand \r\n to answer questions about the sun and ensure telescope safety.\\n\\nIn case o\r\n f poor weather\\, we will also display a timelapse video of the Sun on a scr\r\n een within Green Library\\, so you can see the dynamic surface of the sun an\r\n d its rotation.\\n\\nInterested in the sun? ☀️ On February 10th\\, join us for\r\n  a discussion of Stanford’s 50 Years of history collecting and studying sol\r\n ar data. Then\\, on February 11th\\, learn how to access and use solar data b\r\n y joining our SunPy workshop.\\n\\nDate and Time: 10:00–2:00PM\\, Wednesday\\, \r\n February 11\\, 2026Location: Entrance\\, Hohbach Hall\\, Green LibrarySolar Ph\r\n ysicists: Charles Baldner\\, Cristina Rabello Soares\\, Alex KoufosOrganizes:\r\n  Katie FreyThis event is part of Love Data Week\\, an annual festival highli\r\n ghting topics\\, opportunities and services relevant to data in research.\r\nDTEND:20260211T220000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T180000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Solar Viewing\r\nUID:tag:localist.com\\,2008:EventInstance_51464133129312\r\nURL:https://events.stanford.edu/event/solar-viewing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a one-hour workshop to explore how artificial intel\r\n ligence can enhance your workflows. This session will focus on practical ap\r\n plications of the Stanford AI Playground\\, offering concrete ideas and sugg\r\n estions for tasks such as refining research questions\\, creating training m\r\n aterials\\, summarizing literature\\, and drafting code. We will emphasize a \r\n use-case driven approach\\, discussing and demonstrating how you can leverag\r\n e AI tools to boost efficiency and creativity while  remaining in full cont\r\n rol of your intellectual work. Please bring your ideas and challenges\\, as \r\n this will be a working session where we can explore and tinker together.\\n\\\r\n nDate and time: Wednesday\\, February 11\\, 2026\\, 10:00–11:00 AMLocation:  H\r\n ybrid (Velma Denning Room 120F\\, Green Library) and ZoomPresenters: Peter M\r\n angiafico\\, Daniel Kook\\, Mario Pamplona\\, and Jeremy NelsonThis workshop i\r\n s part of Love Data Week\\, an annual festival highlighting topics\\, opportu\r\n nities and services relevant to data in research.\\n\\nFor those attending th\r\n e in-person event\\, please bring your Stanford ID card or mobile ID to ente\r\n r the library.\\n\\nWe will be taking photos at this event for publicity purp\r\n oses. Your presence at this event constitutes consent to be photographed un\r\n less you express otherwise.\r\nDTEND:20260211T190000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T180000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Velma Denning Room (120F)\r\nSEQUENCE:0\r\nSUMMARY:Using AI To Be More Effective\r\nUID:tag:localist.com\\,2008:EventInstance_51453914999079\r\nURL:https://events.stanford.edu/event/using-ai-to-be-more-effective\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop,Lecture/Presentation/Talk\r\nDESCRIPTION:Wikidata is an open\\, multilingual structured knowledge base th\r\n at can be read and edited by both humans and machines and is made by people\r\n  like you. Digital assistants like Siri and Alexa use Wikidata\\, as do sear\r\n ch engines like Google. You can think of Wikidata as a database of database\r\n s\\, linking items through identifiers. This creates a centralized location \r\n of information about anything and everything: from the universe to the pika\r\n \\, love and the Chicago-style hot dog. With over 114\\,683\\,910 data items\\,\r\n  there’s likely to be an item for your favorite band\\, and your birthplace.\r\n \\n\\n Join us online and in person for an introduction to Wikidata followed \r\n by a Wikidata Edit-a-thon! Learn more about Wikidata’s impact\\, how to make\r\n  edits\\, create references\\, and query Wikidata in this 2-hour hands-on ses\r\n sion.\\n\\nWednesday\\, February 11\\, 11am – 1pm \\n\\nJoin us in-person in the \r\n IC Classroom\\, Green Library or join over Zoom\\n\\nRegister to attend the ev\r\n ent in person: spots are open to current Stanford Affiliates only.\\n\\nPleas\r\n e create an account in advance.\\n\\nThis is part of  a series of workshops f\r\n or Love Data Week\\, an annual festival highlighting topics\\, opportunities \r\n and services relevant to data in research. \\n\\nFor those attending the in-p\r\n erson workshop\\, please bring your Stanford ID card/mobile ID to enter the \r\n library. \\n\\nWe will be taking photos at this event for publicity purposes.\r\n  Your presence at this event constitutes consent to be photographed unless \r\n you express otherwise.\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T190000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Hobach Hall\\, Classroom 118 (IC Classr\r\n oom)\r\nSEQUENCE:0\r\nSUMMARY:2026 Wikidata Edit-a-thon\r\nUID:tag:localist.com\\,2008:EventInstance_51446793338093\r\nURL:https://events.stanford.edu/event/wikidata-edit-a-thon\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260212T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114920889\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Valentine's Cookie Decorating Event \\n\\nRegistration Required t\r\n o Secure a Cookie\\n\\nDecorate\\, drizzle\\, and sprinkle the love! Join us fo\r\n r a fun Valentine’s cookie decorating experience filled with hearts\\, icing\r\n \\, and sweet memories. \\n\\n🗓 Date & Time: Wednesday\\, Feb 11th\\, 2026 | 11:\r\n 30am-1pm\\n📍 Location: Stanford Redwood City Recreation and Wellness Center-\r\n  Outdoor Garden\\; 900 Warrington Ave. Redwood City\\, CA\\n\\nWhat’s included:\r\n \\n\\nFREE Cookie (for those who register in advance)\\n\\nDecorating supplies \r\n provided.\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T193000Z\r\nGEO:37.483753;-122.204314\r\nLOCATION:Stanford Redwood City Recreation & Wellness Center\r\nSEQUENCE:0\r\nSUMMARY:Valentine's Cookie Decorating at Redwood City\r\nUID:tag:localist.com\\,2008:EventInstance_51888306504154\r\nURL:https://events.stanford.edu/event/valentines-cookie-decorating-at-redwo\r\n od-city\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Organized and hosted by the Center for Medieval and Early Moder\r\n n Studies (CMEMS).\\n\\nLuca Piccoli and Carla Mazzarelli (Università della S\r\n vizzera italiana) present\\, \"'Visibility Reclaimed': Shaping Publics within\r\n  the Laboratory of the First Public Museums in Eighteenth-Century Rome\"\\n\\n\r\n  \\n\\nThe CMEMS Workshop series meets most Wednesdays during the academic ye\r\n ar. Lunch is provided. See the CMEMS website for the list of upcoming speak\r\n ers.\r\nDTEND:20260211T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 252\r\nSEQUENCE:0\r\nSUMMARY:CMEMS: Luca Piccoli and Carla Mazzarelli (Università della Svizzera\r\n  italiana) present\\, \"'Visibility Reclaimed': Shaping Publics within the La\r\n boratory of the First Public Museums in Eighteenth-Century Rome\"\r\nUID:tag:localist.com\\,2008:EventInstance_51766578949448\r\nURL:https://events.stanford.edu/event/cmems-luca-piccoli-and-carla-mazzarel\r\n li-universita-della-svizzera-italiana-present-visibility-reclaimed-shaping-\r\n publics-within-the-laboratory-of-the-first-public-museums-in-eighteenth-cen\r\n tury-rome\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the Comics: More Than Words Research Group to meet \r\n artist\\, Howard Taylor. \\n\\nRSVP for zoom link with Howard Tayler\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Comics: More Than Words - Meet the Artist: Howard Taylor \r\nUID:tag:localist.com\\,2008:EventInstance_51907394839102\r\nURL:https://events.stanford.edu/event/comics-more-than-words-meet-the-artis\r\n t-howard-taylor\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260212T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561107799\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford Department of Medicine would like to invite all Stanfo\r\n rd community members to attend this instance of the Medicine Grand Rounds (\r\n MGR) series\\, which will feature Robert Wachter\\, MD\\, a leading authority \r\n in hospital medicine and health IT whose research and thought leadership ar\r\n e reshaping the future of patient care\\, physician training\\, and the integ\r\n ration of technology in healthcare settings..\\n\\nView accreditation info he\r\n re.\\n\\nCME Activity ID: 56174\\n\\nText to 844-560-1904 for CME credit.\\n\\nIf\r\n  you prefer to claim credit online\\, click here.\\n\\nComplete this FORM afte\r\n r each session for MOC credit.\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nLOCATION:Li Ka Shing Center\\, Berg Hall\r\nSEQUENCE:0\r\nSUMMARY:Generative AI Meets the Healthcare System: Key Lessons from the Ear\r\n ly Years\r\nUID:tag:localist.com\\,2008:EventInstance_51933450329473\r\nURL:https://events.stanford.edu/event/generative-ai-meets-the-healthcare-sy\r\n stem-key-lessons-from-the-early-years\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Lunch Club provides affiliates of the Stanford Archaeology Cent\r\n er with a community-oriented forum for engagement with current issues in ar\r\n chaeology. On February 11\\, 2026\\,  we will host Dr.Olanrewaju Lasisi from \r\n the  The Ohio State University.\\n\\nAbstract:\\n\\nThis talk explores the deep\r\n  entanglement of ritual\\, landscape\\, celestial alignment\\, and spatial mem\r\n ory within Yoruba and broader West African cultural worlds. Drawing from hi\r\n storical archaeology\\, indigenous hermeneutics\\, archaeoastronomy\\, and eth\r\n nographic fieldwork\\, the lecture examines how ritual movement functions as\r\n  a form of architectural logic—shaping urban layouts\\, sacred networks\\, an\r\n d political authority across time. Focusing on the Ijebu region of southwes\r\n tern Nigeria\\, it traces how priestly choreography\\, calendrical festivals\\\r\n , and cosmological orientations produce enduring spatial knowledge systems \r\n that challenge Western assumptions about what counts as “architecture” or “\r\n urban design.” The talk reframes architecture as a living\\, kinetic\\, and r\r\n elational practice\\, animated by embodied knowledge\\, ancestral presence\\, \r\n and celestial order.\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\\, 106\r\nSEQUENCE:0\r\nSUMMARY:Lunch Club Series | Architecture of Ritual Movement: Indigenous Epi\r\n stemologies\\, Archaeoastronomy\\, and the Making of Yoruba Sacred Landscapes\r\nUID:tag:localist.com\\,2008:EventInstance_51995930267105\r\nURL:https://events.stanford.edu/event/lunch-club-series-architecture-of-rit\r\n ual-movement-indigenous-epistemologies-archaeoastronomy-and-the-making-of-y\r\n oruba-sacred-landscapes\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Are you\\n\\nA 1st or 2nd year PhD student?Interested in conducti\r\n ng community based research?Looking for a community of like-minded graduate\r\n  students?Come to this RAISE (Research\\, Action\\, and Impact through Strate\r\n gic Engagement) Doctoral Fellowship in person Info Session to learn more ab\r\n out the program! RAISE supports doctoral students who are motivated to make\r\n  positive contributions to their communities and the world. \\n\\nThe RAISE D\r\n octoral Fellowship includes: Stipend and graduate tuition for 1 quarter per\r\n  year over three years\\, for a total of 3 quarters of fellowship support\\; \r\n $9\\,000 in project funding to help cover travel and expenses related to the\r\n  experiential learning component of RAISE\\; Structured workshops to support\r\n  community-engaged and impact-focused projects and research\\; Professional \r\n development to prepare doctoral students for community and public impact in\r\n  their career choices\\;  Cohort-based community building and support\\;  Cho\r\n ice to earn course credits through RAISE project work\\; Additional mentorsh\r\n ip from the RAISE Doctoral Fellowship staff\\, Stanford faculty mentors\\, ad\r\n vanced graduate student mentors\\, and alumni.\\n\\nInfo Sessions:\\n\\nJan 29\\,\r\n  4-5pm (Zoom)\\nFeb 11\\, 12-1:30pm (In person)\\nMarch 3\\, 12 -1:30pm (In per\r\n son)\\n\\nRSVP Here: https://stanforduniversity.qualtrics.com/jfe/form/SV_b2c\r\n dxkCOCoOQTjw\\n\\n\\nQuestions? Email raisefellows@stanford.edu\r\nDTEND:20260211T213000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nGEO:37.422506;-122.167404\r\nLOCATION:Haas Center for Public Service\\, DK Room\r\nSEQUENCE:0\r\nSUMMARY:RAISE Doctoral Fellowship Info Session\r\nUID:tag:localist.com\\,2008:EventInstance_51819136644404\r\nURL:https://events.stanford.edu/event/raise-doctoral-fellowship-info-sessio\r\n n-6230\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:ReproducibiliTea is an international community of journal clubs\r\n  dedicated to advancing Open Science and improving academic research cultur\r\n e. \\n\\nReproducibiliTea at Stanford was launched at 26 October 2022 and wel\r\n comes new members. Information on upcoming meetings is presented below\\, an\r\n d you can find us on our slack channel\\, and join our mailing list reproduc\r\n ibilitea@lists.stanford.edu. The meetings are held every second Wednsday of\r\n  the month\\, at 12:00.\\n\\nTo help us prepare for the meetings\\, and order l\r\n unch for everyone (free lunches provided) please register for the next meet\r\n ing using the registration form. \\n\\nThe next meeting is March 11th\\, 12:00\r\n  in LK308 Seminar Classroom (see map plan of the building).\\n\\nWe will be d\r\n iscussing Use as directed? A comparison of software tools intended to check\r\n  rigor and transparency of published work.\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, LK308\r\nSEQUENCE:0\r\nSUMMARY:ReproducibiliTea - Stanford \r\nUID:tag:localist.com\\,2008:EventInstance_50658127989680\r\nURL:https://events.stanford.edu/event/copy-of-reproducibilitea-stanford-210\r\n 8\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Book Launch of \"Death\\, Diversion\\, and Departure: Voter Exit a\r\n nd the Persistence of Authoritarianism in Zimbabwe\".\\n\\nDr. Chipo Dendere\\,\r\n  Wellesley College\\, will share insights and findings from her new book\\, D\r\n eath\\, Diversion\\, and Departure: Voter Exit and the Persistence of Authori\r\n tarianism in Zimbabwe\\, Cambridge University Press (2026). This groundbreak\r\n ing work explores the complex interplay between voter demographics\\, politi\r\n cal power\\, and authoritarian resilience in the context of Zimbabwe. Throug\r\n h gripping prose and meticulous research\\, Dr. Chipo Dendere shows how the \r\n emigration and/or death of young\\, progressive voters creates opportunities\r\n  for authoritarian regimes to survive. Using Zimbabwe as a case study\\, Dr.\r\n  Dendere shows how the lack of young\\, urban\\, and working professional vot\r\n ers because of mass death due to AIDS and mass migration in the wake of eco\r\n nomic decline has increased the resilience of a regime that may have otherw\r\n ise lost power. With authoritarianism on the rise globally and many citizen\r\n s considering leaving home\\, Death\\, Diversion\\, and Departure provides tim\r\n ely insights into the impact of voter exit.\\n\\nRSVP here.\\n\\nDr. Chipo Dend\r\n ere is a Zimbabwean-born American academic and an Assistant Professor of Po\r\n litical Science in the Africana Studies Department at Wellesley College. He\r\n r research focuses on democratization\\, elections\\, and voting behavior in \r\n Africa\\, as well as the influence of social media on politics. Dr. Dendere'\r\n s forthcoming book\\, Death\\, Diversion\\, and Departure: Voter Exit and the \r\n Persistence of Authoritarianism in Zimbabwe (Cambridge University Press\\, 2\r\n 026)\\, is about how the emigration and/or death of young\\, progressive vote\r\n rs creates opportunities for authoritarian regimes to survive\\, providing t\r\n imely insights with authoritarianism on the rise globally and many citizens\r\n  considering leaving home. Additionally\\, Dr. Dendere is working on signifi\r\n cant projects related to chocolate politics and African First Ladies' polit\r\n ical lives. At Wellesley\\, she teaches comparative politics\\, elections\\, r\r\n esources\\, and African politics courses. Dendere frequently provides commen\r\n tary on African politics for CNN\\, BBC\\, and Al Jazeera\\, and she writes fo\r\n r a public audience across various platforms. She is active on X (formerly \r\n Twitter) under the username @drDendere. For more information about or to co\r\n ntact Dr. Dendere\\, visit drdendere.com.\r\nDTEND:20260211T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 123\r\nSEQUENCE:0\r\nSUMMARY:When Voters Exit Authoritarianism Survives - Dr. Chipo Dendere\r\nUID:tag:localist.com\\,2008:EventInstance_50968490852336\r\nURL:https://events.stanford.edu/event/when-voters-exit-authoritarianism-sur\r\n vives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260211T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T201500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51586828255720\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Carette and Sonnen\r\n burg Labs\\, Pingping Cao\\, \"Dissection of the Function of Gαq-coupled GPCR \r\n Signaling and Soluble Inositol Phosphates in Rhinovirus Infection\"/Tadashi \r\n Takeuchi\\, \"Investigating Metabolic Machinery of the Hadza Gut Microbiome f\r\n or Host Health\"\r\nDTEND:20260211T213000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T203000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Carette and Sonnenburg\r\n  Labs\\, Pingping Cao\\, \"Dissection of the Function of Gαq-coupled GPCR Sign\r\n aling and Soluble Inositol Phosphates in Rhinovirus Infection\"/Tadashi Take\r\n uchi\\, \"Investigating Metabolic Machinery\r\nUID:tag:localist.com\\,2008:EventInstance_51143291611666\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-carette-and-sonnenburg-labs-tbd-tbatadashi-takeuchi-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260211T220000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T203000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Cello Students of Stephen Harrison\r\nUID:tag:localist.com\\,2008:EventInstance_51463177780918\r\nURL:https://events.stanford.edu/event/noon-harrison-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Saturn’s moon Titan has long been considered one of the archety\r\n pal ocean worlds of the outer Solar System\\, with multiple geophysical obse\r\n rvations from NASA’s Cassini mission historically interpreted as evidence f\r\n or a global subsurface ocean. Establishing the presence of such oceans\\, ho\r\n wever\\, relies on indirect measurements that probe the interiors of icy moo\r\n ns\\, for example through observations of their gravity and magnetic fields\\\r\n , as well as their orientation and rotational state. In this seminar\\, I wi\r\n ll first review the techniques used to detect subsurface oceans using space\r\n craft data\\, with a focus on how planetary gravity fields are measured thro\r\n ugh precision orbit determination and Doppler tracking. I will discuss how \r\n these geophysical measurements are used to infer the interior structure pro\r\n perties and the presence of liquid layers inside icy moons. I will then pre\r\n sent a reassessment of Titan’s interior based on improved gravity field mea\r\n surements derived from Cassini Doppler data. These new results reveal unexp\r\n ectedly strong tidal energy dissipation within Titan’s interior and motivat\r\n e a reinterpretation of other geophysical constraints\\, challenging the lon\r\n g-standing interpretation that Titan hosts a subsurface ocean. While reconc\r\n iling all the geophysical measurements at Titan has historically been chall\r\n enging\\, I will show that the available observations can be simultaneously \r\n explained with an interior model in which Titan’s hydrosphere is largely fr\r\n ozen\\, without a present-day global ocean. Finally\\, I will discuss the bro\r\n ader implications of this revised interior configuration for Titan’s therma\r\n l and orbital evolution\\, and for interpreting ocean signatures across othe\r\n r icy satellites in the outer Solar System.\\n\\n \\n\\nFlavio Petricca is an e\r\n arly-career planetary scientist specializing in geophysics and interior mod\r\n eling of planets and moons. After obtaining a PhD in Space Engineering from\r\n  Sapienza University of Rome in 2023\\, he joined JPL as a JPL Postdoctoral \r\n Fellow.\\n\\nHis research integrates spacecraft data analysis with advanced m\r\n ulti-physical modeling to investigate planetary interiors using complementa\r\n ry measurements from gravity\\, radio science\\, magnetometry\\, altimetry\\, a\r\n nd imaging. A central goal of his work is to combine multiple datasets to l\r\n everage synergies between different science investigations and shed light o\r\n n the origins\\, evolution and interior structure of icy moons. He is also a\r\n ctively involved in the search for extraterrestrial oceans in the outer Sol\r\n ar System\\, from reanalyzing legacy mission data to formulating observation\r\n al strategies for upcoming missions.\r\nDTEND:20260211T212000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T203000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Planetary Science and Exploration Seminar\\, Flavio Petricca: \"Does \r\n Titan Host a Subsurface Ocean? New Insights from Cassini Geophysical Measur\r\n ements\"\r\nUID:tag:localist.com\\,2008:EventInstance_52019762992217\r\nURL:https://events.stanford.edu/event/planetary-science-and-exploration-sem\r\n inar-flavio-petricca-does-titan-host-a-subsurface-ocean-new-insights-from-c\r\n assini-geophysical-measurements\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:In this workshop participants will create simple\\, no-code digi\r\n tal collections of images of maps and other cultural heritage objects for u\r\n se in research and teaching. Drawing from disparate sources including Stanf\r\n ord's Searchworks catalog\\, DavidRumsey.com\\, the Library of Congress websi\r\n te\\, and the Internet Archive\\, participants will use the IIIF Gallery Buil\r\n der webapp to curate custom sets of images via IIIF manifests. Students wil\r\n l be familiarized with basic concepts related to IIIF (the International Im\r\n age Interoperability Framework)\\, learn to locate IIIF manifests for cultur\r\n al heritage images in online archives\\, create a first collection using the\r\n  webapp\\, and view examples of ways curated image sets can be shared\\, remi\r\n xed\\, and integrated into other resources\\, including Canvas.\\n\\n\\n\\nDate a\r\n nd Time:  1:00–2:00PM\\, Wednesday\\, February 11\\, 2026\\n\\nLocation: David R\r\n umsey Map Center\\, Green Library\\n\\nInstructors: Kristina Larsen (Assistant\r\n  Curator\\, David Rumsey Map Center)\\n\\nPlease register to attend. Registrat\r\n ion is exclusively open to current Stanford Affiliates and will be offered \r\n on a first-come\\, first-served basis. Given the limited space\\, a waitlist \r\n will be available once all spots are filled.\\n\\nThis workshop is part of Lo\r\n ve Data Week\\, an annual festival highlighting topics\\, opportunities and s\r\n ervices relevant to data in research.\\n\\nFor those attending the in-person \r\n event\\, please bring your Stanford ID card or mobile ID to enter the librar\r\n y. David Rumsey Map Center is located on the fourth floor\\, with a stairwel\r\n l entry just off the Munger Rotunda of the Bing Wing\\, which is located on \r\n the second floor. Ask at the library entry desk about special elevator acce\r\n ss if you need step-free entry.\r\nDTEND:20260211T220000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T210000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, The David Rumsey Map Center at Stanfor\r\n d University's Green Library\r\nSEQUENCE:0\r\nSUMMARY:Build a No-Code Personal Image Reference Collection with IIIF\r\nUID:tag:localist.com\\,2008:EventInstance_51455279783704\r\nURL:https://events.stanford.edu/event/build-a-no-code-personal-image-refere\r\n nce-collection-with-iiif\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Be swept away by our Romance pop-up on Wednesday\\, February 11.\r\n  Drop in anytime 1-3pm to discover art books about passion\\, love\\, and oth\r\n er big feelings in a curated selection from Art Locked Stacks.\r\nDTEND:20260211T230000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T210000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Bowes Art & Architecture Library\\, 2nd fl. For\r\n  non-Stanford ID holders\\, please call 650-723-3408 for building entry\\, el\r\n evator use and library entry.\r\nSEQUENCE:0\r\nSUMMARY:Romance pop-up\\, Bowes Art & Architecture Library\r\nUID:tag:localist.com\\,2008:EventInstance_51950860815592\r\nURL:https://events.stanford.edu/event/romance-pop-up-exhibit-bowes-art-arch\r\n itecture-library\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Do you have questions about requirements and logistics surround\r\n ing your degree? Drop-In and get answers!\\n\\nThis is for current Earth Syst\r\n ems undergrad and coterm students.\r\nDTEND:20260211T223000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T213000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Drop-In Advising (Undergrad & Coterm majors)\r\nUID:tag:localist.com\\,2008:EventInstance_51932797180965\r\nURL:https://events.stanford.edu/event/earth-systems-drop-in-advising-underg\r\n rad-coterm-majors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Date and Time: 2:00–3:00PM\\, Wednesday\\, February 11\\, 2026Loca\r\n tion: Velma Denning Room (120F)\\, Green Library and Zoom (link provided upo\r\n n registration)Instructor: Ron Nakao (Librarian for Social Science Data\\, E\r\n conomics and Political Science)\\, Kate Barron (Research Data Curator)\\, and\r\n  Danielle Gensch (State\\, Local\\, International Government Information Libr\r\n arian)Stanford University Libraries license election and voter data for tea\r\n ching and research. Our holdings include the L2 Voter and Demographic Datas\r\n et\\, Dave Leip's Atlas of the U.S. Presidential Elections\\, and more. Join \r\n Stanford Librarians Ron Nakao\\, Kate Barron\\, and Danielle Gensch to learn \r\n more about these unique resources\\, and how to access and analyze them thro\r\n ugh Data Farm (Redivis).\\n\\nThis workshop is part of Love Data Week\\, an an\r\n nual festival highlighting topics\\, opportunities and services relevant to \r\n data in research.\\n\\nJoin us in person or via Zoom!\\n\\nRegistration is requ\r\n ired and limited to current Stanford affiliates on a first-come\\, first-ser\r\n ved basis. Once capacity is reached\\, a waitlist will open. In-person atten\r\n dees must present a Stanford ID or a valid government-issued ID for library\r\n  access.\\n\\nWe will be taking photos at this event for publicity purposes. \r\n Your presence at this event constitutes consent to be photographed unless y\r\n ou express otherwise.\r\nDTEND:20260211T230000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T220000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Velma Denning Room (120F)\r\nSEQUENCE:0\r\nSUMMARY:Gear Up for Social Science Data: Elections and Voting\r\nUID:tag:localist.com\\,2008:EventInstance_51526166394370\r\nURL:https://events.stanford.edu/event/gear-up-for-social-science-data-elect\r\n ions-and-voting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:A workshop on SunPy\\, a Python library for finding and using so\r\n lar data.\\n\\nThis workshop will focus on using SunPy\\, a community-develope\r\n d\\, free\\, and open-source software package for solar physics\\, to find and\r\n  use data from Stanford’s Joint Science Operations Center\\, the hub for dat\r\n a from NASA’s Solar Dynamics Observatory satellite. This workshop will incl\r\n ude an introduction to concepts in solar physics along with the SunPy Pytho\r\n n package and is open to everyone regardless of scientific background.\\n\\nD\r\n uring this workshop\\, we will learn how to use SunPy to find and download s\r\n olar data. We will look at sunspots and solar flares\\, see the connection b\r\n etween these phenomena and solar magnetic fields\\, and see how events in th\r\n e solar atmosphere give rise to geomagnetic storms that affect us here on E\r\n arth. Participants are expected to be comfortable with Python fundamentals\\\r\n , such as variable assignment\\, functions\\, loops\\, and lists. Learning Sun\r\n Py will give you the ability to see for yourself how our own star changes o\r\n ver time.\\n\\nDate and Time: 2:30–4:00PM\\, Wednesday\\, February 11\\, 2026Loc\r\n ation: Presentation Room\\, Hohbach Hall\\, Green LibraryInstructors: Charles\r\n  Baldner\\, Cristina Rabello Soares\\, Alex Koufos\\, Arthur Amezcua\\, Oana Ve\r\n saOrganizer: Katie FreyInterested in the sun? ☀️On February 10th\\, join us \r\n for a discussion on Stanford’s 50 years of history collecting and studying \r\n solar data. Then\\, on February 11th you can see a timelapse video of the su\r\n n\\, and\\, if it’s sunny\\, we will have a solar telescope outside the East E\r\n ntrance to Green Library.\\n\\nThis workshop is part of Love Data Week\\, an a\r\n nnual festival highlighting topics\\, opportunities and services relevant to\r\n  data in research.\\n\\nFor those attending the in-person event\\, please brin\r\n g your Stanford ID card or mobile ID to enter the library. \\n\\nWe will be t\r\n aking photos at this event for publicity purposes. Your presence at this ev\r\n ent constitutes consent to be photographed unless you express otherwise.\r\nDTEND:20260212T000000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T223000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Presentation Room\r\nSEQUENCE:0\r\nSUMMARY:Exploring Solar Data with SunPy and NASA’s Solar Dynamics Observato\r\n ry\r\nUID:tag:localist.com\\,2008:EventInstance_51463603675275\r\nURL:https://events.stanford.edu/event/exploring-solar-data-with-sunpy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Hosted by the King Center on Global Development\\, this Research\r\n  Roadmap will provide graduate students with practical guidance and creativ\r\n e methods on “doing more with less” in research. Graduate students in globa\r\n l development research often face uncertainty around funding and the challe\r\n nge of advancing their work with limited resources. This panel will bring t\r\n ogether Stanford faculty and researchers to share strategies for designing \r\n rigorous yet cost-effective research projects.\\n\\nSharing examples from the\r\n ir own research: Marshall Burke will discuss how satellite imagery can be c\r\n ombined with existing survey data to generate new insights\\; Arun Chandrase\r\n khar will discuss approaches to efficient fieldwork design\\; and Duncan Law\r\n rence will discuss an IPL-developed WhatsApp survey tool.\\n\\nAfter the talk\r\n \\, join us for a 4:00 PM reception to network with peers and chat about you\r\n r research at our Global Development Graduate Student Mixer—light refreshme\r\n nts will be served.\\n\\nAbout the speakers:\\n\\nMarshall Burke is a professor\r\n  in the Global Environmental Policy unit in the Doerr School of Sustainabil\r\n ity\\, deputy director at the Center on Food Security and the Environment\\, \r\n and Senior Fellow at the Freeman Spogli Institute for International Studies\r\n  (FSI)\\, Woods Institute\\, and SIEPR at Stanford University. His research f\r\n ocuses on social and economic impacts of environmental change and on measur\r\n ing and understanding economic development in emerging markets. His work ha\r\n s appeared in both economic and scientific journals\\, including recent publ\r\n ications in Nature\\, Science\\, The Quarterly Journal of Economics\\, and The\r\n  Lancet.\\n\\nArun Chandrasekhar is a professor in the economics department a\r\n t Stanford. He works on development economics and studies the role that soc\r\n ial networks play in developing countries. He is particularly interested in\r\n  how the economics of networks can help us understand information aggregati\r\n on failures and the breakdown of cooperation in the developing world. His r\r\n esearch approach is methodologically diverse\\, and includes novel data coll\r\n ection\\, field experiments\\, and observational data analysis.\\n\\nDuncan Law\r\n rence is the executive director of the Immigration Policy Lab (IPL) and a S\r\n enior Research Scholar at Stanford University. He also served as the foundi\r\n ng executive director of IPL at Stanford from 2014-2022. He brings to IPL a\r\n  wealth of diverse experience having worked directly with immigrants\\, nonp\r\n rofits\\, and foundations in various roles from medical interpreter to resea\r\n rcher. Prior to joining IPL\\, he served as Senior Director of Innovation fo\r\n r the Resettlement\\, Asylum\\, and Integration department at the Internation\r\n al Rescue Committee (IRC).\r\nDTEND:20260212T000000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260211T230000Z\r\nGEO:37.429251;-122.165344\r\nLOCATION:Gunn Building (SIEPR)\\, Doll 320\r\nSEQUENCE:0\r\nSUMMARY:Research Roadmap: Doing More with Less\r\nUID:tag:localist.com\\,2008:EventInstance_51597269967509\r\nURL:https://events.stanford.edu/event/research-roadmap-doing-more-with-less\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Calling graduate students from all Stanford schools! Are you a \r\n Master's or PhD student interested in meeting fellow students working on gl\r\n obal development topics? \\n\\nWhether your research dives into environmental\r\n  engineering\\, public health\\, political economics\\, or another facet of gl\r\n obal development\\, we invite you to join us at the King Center on Global De\r\n velopment’s Graduate Student Mixer. Network with peers\\, chat about your re\r\n search\\, and make new connections!\\n\\nDrop by anytime between 4:00 PM and 6\r\n :00 PM—light refreshments will be served.\\n\\nBefore the mixer\\, join us fro\r\n m 3:00 PM to 4:00 PM for Research Roadmap: Doing More with Less\\, where our\r\n  panelists will share strategies for designing rigorous yet cost-effective \r\n research projects.\r\nDTEND:20260212T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T000000Z\r\nGEO:37.429251;-122.165344\r\nLOCATION:Gunn Building (SIEPR)\\, Lucas Lounge\r\nSEQUENCE:0\r\nSUMMARY:Global Development Graduate Student Mixer\r\nUID:tag:localist.com\\,2008:EventInstance_51597275880671\r\nURL:https://events.stanford.edu/event/2026-global-development-graduate-mixe\r\n r\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant person in your life\\, or are experiencing feelings of grief in a \r\n time of uncertainty\\, this is an opportunity to share your experiences\\, su\r\n ggestions\\, and concerns with others in a safe and supportive environment.\\\r\n n\\nStudent Grief Gatherings are held 3x/quarter and are facilitated by staf\r\n f from ORSL\\, Well-Being\\, CAPS and GLO. This event is free and open only t\r\n o Stanford students.\r\nDTEND:20260212T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T000000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden\r\nSEQUENCE:0\r\nSUMMARY:Student Grief & Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_51586846652022\r\nURL:https://events.stanford.edu/event/student-grief-gathering\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant being in your life\\, or are experiencing feelings of grief in a t\r\n ime of uncertainty\\, this is an opportunity to share your experiences\\, sug\r\n gestions\\, and concerns with others in a safe and supportive environment.\\n\r\n \\nStudent Grief Gatherings are held 3x every quarter and facilitated by sta\r\n ff from ORSL\\, Well-Being\\, CAPS and GLO. This event is free\\, and all regi\r\n stered Stanford students are eligible to participate.\\n\\nDate & Location Sc\r\n hedule\\n\\nJan 14: Grief Gathering (Rm 317 in Old Union)\\n\\nFeb. 11: Healing\r\n  Through Heartbreak (Rm 317 in Old Union)\\n\\nFeb. 25: Estrangement (Rm 317 \r\n in Old Union)\\n\\nJan. 21 @ 4-5:30pm: Grief Cafe brings you How to Help a Fr\r\n iend in Grief\\, offering snacks and cozy drinks (Kingscote)\\n\\nVisit this w\r\n ebsite for more information\r\nDTEND:20260212T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T000000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, 3rd Floor\r\nSEQUENCE:0\r\nSUMMARY:Student Grief and Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_51828068916679\r\nURL:https://events.stanford.edu/event/copy-of-student-grief-and-loss-gather\r\n ing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Structural engineering has long recognized its obligation to le\r\n arn from failure in the service of public safety. That obligation has becom\r\n e increasingly consequential as society demands structures that are more re\r\n silient\\, materially efficient\\, and adaptable to an uncertain future.\\n\\nT\r\n his lecture examines the recurring technical and procedural causes of struc\r\n tural failures\\, drawing on the lecturer’s 45-year investigative career\\, w\r\n hich has spanned from the 1981 walkways collapse at the Hyatt Regency in Ka\r\n nsas City\\, Missouri\\, to the 2021 partial collapse of Champlain Towers Sou\r\n th in Surfside\\, Florida. The focus is on failures of single structures\\, m\r\n ostly buildings\\, occurring under conditions not involving natural hazards.\r\n \\n\\nOver the last twenty-five years\\, the introduction of the National Cons\r\n truction Safety Team Act (NCST Act) and the formation of Collaborative Repo\r\n rting for Safer Structures (CROSS) have served to address some of the chall\r\n enges of translating lessons learned into safer structures.\\n\\nUltimately\\,\r\n  assuring structural safety extends well beyond the technical domain of eng\r\n ineers and builders. It is inherently multidisciplinary\\, encompassing soci\r\n etal expectations\\, economic pressures\\, government\\, and regulation.\\n\\nBI\r\n O\\n\\nGlenn Bell\\, PE\\, SE\\, NAE\\, NAC\\, Dist.M.ASCE\\, F.SEI\\, FICE\\, FIStru\r\n ctE\\, is a Research Civil Engineer at NIST\\, where he serves as Associate L\r\n ead of the 2021 partial collapse of Champlain Towers South in Surfside\\, Fl\r\n orida.\\n\\nFrom 1975 to 2020\\, Glenn was employed at Simpson Gumpertz & Hege\r\n r (SGH)\\, where he worked in structural design\\, structural rehabilitation\\\r\n , and failure investigation. He investigated the 1981 walkways collapse at \r\n the Hyatt Regency Hotel\\, Kansas City\\, the 2002 scaffold collapse at the J\r\n ohn Hancock Center\\, Chicago\\, and served on SGH’s team that conducted anal\r\n yses for NIST of the collapses of WTC Towers 1 and 2 during 9/11. His struc\r\n tural design projects include SpaceShip Earth at Walt Disney World Epcot Ce\r\n nter and the Aga Khan Medical Complex in Karachi\\, Pakistan. Glenn was SGH’\r\n s CEO from 1995 through 2016.\\n\\nGlenn’s professional passion is structural\r\n  safety\\, especially in investigating failures and applying lessons learned\r\n  to improve practice and avert future disasters. He co-founded the ASCE Tec\r\n hnical Council on Forensic Engineering. He was the principal driver in esta\r\n blishing Collaborative Reporting for Safer Structures – US\\, where he curre\r\n ntly serves as Director.\\n\\nGlenn is a Distinguished Member of ASCE and a m\r\n ember of the National Academy of Engineering. He was awarded the 2025 Insti\r\n tution of Structural Engineers Gold Medal for outstanding contributions to \r\n structural engineering.\r\nDTEND:20260212T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T003000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, Room 300 Mackenz\r\n ie\r\nSEQUENCE:0\r\nSUMMARY:Blume Distinguished Lecture - Structures\\, Safety and Society: Lear\r\n ning When Things Go Wrong\r\nUID:tag:localist.com\\,2008:EventInstance_51756682564896\r\nURL:https://events.stanford.edu/event/blume-distinguished-lecture-structure\r\n s-safety-and-society-learning-when-things-go-wrong\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the upcoming Slavic Colloquium talk entitled “The M\r\n emory of Place and the 'Non-Place' of Memory in Post-Soviet Ukrainian and R\r\n ussian Literature” by Anastasia Forquenot De La Fortelle (Professor\\, Lausa\r\n nne University).\\n\\nMore details to follow.\r\nDTEND:20260212T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 216\r\nSEQUENCE:0\r\nSUMMARY:Slavic Colloquium: Anastasia Forquenot De La Fortelle - The Memory \r\n of Place and the 'Non-Place' of Memory in Post-Soviet Ukrainian and Russian\r\n  Literature\r\nUID:tag:localist.com\\,2008:EventInstance_51773697311851\r\nURL:https://events.stanford.edu/event/slavic-colloquium-anastassia-forqueno\r\n t-de-la-fortelle-the-memory-of-place-and-the-non-place-of-memory-in-post-so\r\n viet-ukrainian-and-russian-literature\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the Department of English for our next Methods Café\r\n  with Shane Denson (Professor of Film & Media Studies) and Austin Anderson \r\n (Provostial Fellow and Lecturer in English)! Methods Café is a dialogue ser\r\n ies that pairs faculty members in a conversation about literary theory. Not\r\n e that this event takes place in Margaret Jacks Hall (Bldg 460).\r\nDTEND:20260212T030000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T010000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 460\\, Margaret Jacks Hall\\, Terrace Room (426)\r\nSEQUENCE:0\r\nSUMMARY:Methods Café with Shane Denson and Austin Anderson\r\nUID:tag:localist.com\\,2008:EventInstance_51907230093291\r\nURL:https://events.stanford.edu/event/methods-cafe-with-shane-denson-and-au\r\n stin-anderson\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please note that this event is in-person only\\, and RSVPs are r\r\n equested to attend. Walk-ins are welcome.\\n\\nRegister now!\\n\\nWhat are the \r\n social and psychological forces that shape what we dare— or hesitate— to sa\r\n y in public? When “senders” deliver public messages\\, “receivers” must ofte\r\n n discern hidden meanings and motivations. But what happens when “senders” \r\n write between the lines and self-censor their truest commitments? Drawing f\r\n rom his book\\, Self-Censorship (2025) and using theoretical insights from i\r\n nformation economics\\, economist Glenn C. Loury discusses how social pressu\r\n res and cultural norms can lead individuals to silence themselves on politi\r\n cally sensitive topics\\, limiting public debate and shaping contemporary di\r\n scourse.\\n\\n\\nLoury explains that when the risks of upsetting a portion of \r\n the audience are too great\\, genuine moral discourse on difficult social is\r\n sues can become impossible\\, leading to a reliance on euphemism and platitu\r\n de. In such conditions\\, self-censorship proliferates and public discourse \r\n and policy not only suffer but also grow impossible to criticize. The solut\r\n ion\\, Loury argues\\, is for as many of us as possible to take a risk and un\r\n apologetically “live within the truth.”\\n\\nSpeaker:\\n\\nGlenn C. Loury is th\r\n e Merton P. Stoltz Professor of the Social Sciences\\, Emeritus\\, at Brown U\r\n niversity\\, and Distinguished Visiting Fellow at the Hoover Institution. As\r\n  an academic economist\\, he has published widely in the general area of app\r\n lied microeconomic theory. He is a Distinguished Fellow of the American Eco\r\n nomics Association\\, a Fellow of the Econometric Society\\, and a Member of \r\n the American Philosophical Society. As a public intellectual\\, he has publi\r\n shed hundreds of essays and reviews\\, mainly on the themes of race\\, inequa\r\n lity and social policy. He is host of The Glenn Show\\, a popular podcast\\, \r\n and author of the widely-reviewed memoir\\, Late Admissions: Confessions of \r\n a Black Conservative. His most recent book is the essay\\, Self-Censorship.\\\r\n n\\nThis event will have a videographer and photographer present to document\r\n  the event. No personal recordings (audio or visual) are allowed. By attend\r\n ing\\, you consent for your image to be used for Stanford-related promotions\r\n  and materials. If you have any questions\\, please contact ethics-center@st\r\n anford.edu.\\n\\nIf you require disability-related accommodation\\, please con\r\n tact disability.access@stanford.edu as soon as possible or at least 7 busin\r\n ess days in advance of the event.\\n\\nSee this link for information about Vi\r\n sitor parking. \\nLearn more about the McCoy Family Center for Ethics in Soc\r\n iety.\r\nDTEND:20260212T023000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T010000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:To Tell the Truth? Self-Censorship and Public Discourse\r\nUID:tag:localist.com\\,2008:EventInstance_51782689034591\r\nURL:https://events.stanford.edu/event/to-tell-the-truth-self-censorship-and\r\n -public-discourse\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260212T023000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51818797432926\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:With Guest Speaker:  Jeffrey J. Kripal (J. Newton Rayzor Chair \r\n in Philosophy and Religious Thought\\, Rice University\\; Associate Director \r\n of the Center for Theory and Research at the Esalen Institute in Big Sur\\, \r\n California)\\n\\nThis talk will discuss my work with Elizabeth Krohn\\, who wa\r\n s stuck by lightning in the parking lot of her synagogue on September of 19\r\n 88 on the Jahrzeit or first-year anniversary of her grandfather's death and\r\n  came back from death to dream the future (of major plane crashes in partic\r\n ular)\\, receive a phone call from the dead\\, and other marvels. I first met\r\n  Elizabeth in the Texas Medical Center at an event on the near-death experi\r\n ence and modern medicine in about 2015. We co-wrote a book together on the \r\n topic called Changed in a Flash: One Woman's Near-Death Experience and How \r\n a Scholar Thinks It Empowers Us All (North Atlantic Books\\, 2018). It does.\r\n \\n\\nRSVP FOR THE MEDICAL HUMANITIES EVENT HERE\\n\\nThe Medical Humanities Re\r\n search Workshop Series is made possible through the support of:\\n\\nStanford\r\n  School of Medicine\\, Stanford Humanities Center\\, Stanford’s Division of L\r\n iteratures\\, Cultures & Languages\\, Stanford’s Department of Anthropology\r\nDTEND:20260212T030000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\r\nSEQUENCE:0\r\nSUMMARY:Medical Humanities: A Garden Next Door: How One Woman Was Struck by\r\n  Lightning\\, Talked to God\\, and Came Back to Dream the Future\r\nUID:tag:localist.com\\,2008:EventInstance_51578421428795\r\nURL:https://events.stanford.edu/event/medical-humanities-a-garden-next-door\r\n -how-one-woman-was-struck-by-lightning-talked-to-god-and-came-back-to-dream\r\n -the-future\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Jeffrey J. Kripal\\, J. Newton Rayzor Professor of Philosophy an\r\n d Religious Thought at Rice University and author of The Superhumanities an\r\n d How to Think Impossibly\\, visits Stanford for two public events exploring\r\n  the intersections of the human\\, the superhuman\\, and the study of mind an\r\n d culture.\\n \\nA Garden Next Door: How One Woman Was Struck by Lightning\\, \r\n Talked to God\\, and Came Back to Dream the Future \\nWednesday\\, February 11\r\n \\, 2026 | 5:30–7:00 PM | Stanford Humanities Center\\, Watt Room and online\\\r\n nRSVP >>\\n\\nProf. Kripal will discuss his work with Elizabeth Krohn\\, who w\r\n as struck by lightning in the parking lot of her synagogue on September of \r\n 1988. They have co-authored Changed in a Flash: One Woman’s Near-Death Expe\r\n rience and How a Scholar Thinks It Empowers Us All (North Atlantic Books\\, \r\n 2018).\\n\\nThe Humanities Today \\nThursday\\, February 12\\, 2026 | 5:30–7:30 \r\n PM | Stanford Humanities Center\\, Levinthal Hall\\n\\nA roundtable on why the\r\n  humanities matter\\, and how they should change. Lecture followed by respon\r\n ses from Gabriella Safran (Slavic Languages and Literatures)\\, Elaine Fishe\r\n r (Religious Studies)\\, and Matthew Wilson Smith (German Studies)\\, moderat\r\n ed by Amir Eshel (Comparative Literature).\\n\\nCo-sponsored by the Division \r\n of Literatures\\, Cultures\\, and Languages\\; The Contemporary\\; Stanford's M\r\n edical Humanities\\; and the Stanford Humanities Center\r\nDTEND:20260212T030000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\r\nSEQUENCE:0\r\nSUMMARY:Two Public Events with Jeffrey J. Kripal\r\nUID:tag:localist.com\\,2008:EventInstance_51757231049380\r\nURL:https://events.stanford.edu/event/two-public-events-with-jeffrey-j-krip\r\n al\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:As the United States approaches its 250th anniversary\\, this sp\r\n ecial panel\\, presented in collaboration with Stanford’s College 102 progra\r\n m\\, the Hoover Institution\\, and the Department of History\\, examines the t\r\n raditions that have shaped the American experiment and the debates that con\r\n tinue to define it.\\n\\nThe discussion will explore classical and Enlightenm\r\n ent influences on American political thought\\, the legacy of slavery\\, and \r\n how competing interpretations of the past shape contemporary civic life. Fo\r\n llowing introductory remarks by Stephen Kotkin\\, the program will feature p\r\n resentations by Barry Strauss\\, Caroline Winterer\\, Dan Edelstein\\, and Ann\r\n e Twitty\\, with Jonathan Gienapp moderating a rigorous and civic exchange g\r\n rounded in open inquiry and respectful disagreement.\r\nDTEND:20260212T040000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T020000Z\r\nGEO:37.427563;-122.167691\r\nLOCATION:Traitel Building\\, Hauck Auditorium\r\nSEQUENCE:0\r\nSUMMARY:America at 250 Classical Heritage\\, Western Civilization\\, and the \r\n Future\r\nUID:tag:localist.com\\,2008:EventInstance_52001122472740\r\nURL:https://events.stanford.edu/event/america-at-250-classical-heritage-wes\r\n tern-civilization-and-the-future\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:How did the Universe begin\\, and how do we know? Join us to lea\r\n rn how galaxies and cosmic structures reveal clues about the origin of the \r\n cosmos! This lecture is open to all and recommended for adults and students\r\n  above 9th grade.\\n\\nTitle: Echoes from the Beginning: How Galaxies Encode \r\n the Early Universe\\n\\nSpeaker: Prof. Oliver Philcox (Stanford/KIPAC)\\n\\nAbs\r\n tract: The first trillionths of a second after the Big Bang are amongst the\r\n  most mysterious periods in the Universe’s history\\, yet the physics govern\r\n ing this era remains largely unknown. Our current best model for describing\r\n  the cosmic expansion during this tiny fraction of a second is “inflation” \r\n — a brief\\, violent period that caused the fabric of space itself to stretc\r\n h faster than the speed of light. In this talk\\, Prof. Philcox will discuss\r\n  the evidence for inflation and show how it can turn tiny quantum fluctuati\r\n ons in the early Universe into the large-scale structure we see around us t\r\n oday. Currently\\, most of our knowledge about inflation comes from observat\r\n ions of light from the early Universe (the Cosmic Microwave Background). Wi\r\n th the advent of modern telescope collaborations that produce three-dimensi\r\n onal maps of millions of galaxies across the Universe\\, this situation is s\r\n tarting to change. Prof. Philcox will demonstrate how we can synthesize the\r\n ory\\, data\\, and computation to analyze these maps\\, allowing us to place u\r\n nprecedented constraints on the early Universe and potentially uncover the \r\n physics of inflation.\\n\\nThe livestream URL can be found at the bottom of t\r\n he EventBrite registration confirmation email.\r\nDTEND:20260212T040000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T030000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 111\r\nSEQUENCE:0\r\nSUMMARY:Public Lecture: Galaxies & The Early Universe\r\nUID:tag:localist.com\\,2008:EventInstance_51897623135606\r\nURL:https://events.stanford.edu/event/public-lecture-galaxies-the-early-uni\r\n verse\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Performance\r\nDESCRIPTION:Stories have always been medicinal. Some are potions\\, some poi\r\n sons. The best of them become guiding narratives that we somehow sense are \r\n good for our health. Poetry too\\, a guiding star in tough times. Ancient my\r\n ths often tell us that wholeness begins to be realised not by perfect healt\r\n h but by deeper understandings of the soul. In our incompleteness begins ou\r\n r authenticity. \\n\\nJoin us for an evening with the author and mythographer\r\n  Martin Shaw and poet Jane Hirshfield to explore stories\\, poetry and conve\r\n rsation that circle the relationship between language and wholeness.\\n\\nTic\r\n kets are free and space is limited. The link for ticket registration will b\r\n e live on Wednesday\\, January 28th\\, at 12pm PST. \\n\\nMartin Shaw is a writ\r\n er and mythographer. Author of many books\\, he is currently in residence at\r\n  the Faculty of Divinity\\, Cambridge University\\, and is a fellow of the Te\r\n menos Academy. He is also the director of the Westcountry School of Myth. H\r\n is latest book\\, Liturgies of the Wild: Myths That Make Us is just out. His\r\n  previous works include Scatterlings\\, Stag Cult\\, Courting the Wild Twin a\r\n nd Smoke Hole. His first book\\, A Branch From The Lightning Tree\\, won the \r\n Nautilus Book Award.\\n\\nAward-winning poet\\, essayist\\, and translator Jane\r\n  Hirshfield is the author of ten collections of poetry\\, including The Aski\r\n ng: New and Selected Poems (2023)\\; Ledger (2020)\\; The Beauty (2015)\\, lon\r\n glisted for the National Book Award\\; Come\\, Thief (2011)\\, a finalist for \r\n the PEN USA Poetry Award\\; and Given Sugar\\, Given Salt (2001)\\, a finalist\r\n  for the National Book Critics Award. Hirshfield is also the author of two \r\n collections of essays\\, and has edited and co-translated four books collect\r\n ing the work of world poets from the past.\\n\\nCo-sponsored by the Stanford \r\n Storytelling Project and the Medicine and the Muse.\r\nDTEND:20260212T050000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T033000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:Healing Spells: An Evening Exploring Language’s Power to Create Who\r\n leness with Martin Shaw and Jane Hirshfield\r\nUID:tag:localist.com\\,2008:EventInstance_51845948924522\r\nURL:https://events.stanford.edu/event/healing-spells-an-evening-exploring-l\r\n anguages-power-to-create-wholeness-with-martin-shaw\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260212\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264962281\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260212\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355486684\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260212\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101469637\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:The Office of Academic Affairs (OAA) invites you to attend a Me\r\n dLeave Overview meeting on Thursday\\, February 12\\, from 9:15–10:15 a.m.\\n\\\r\n nThis session will include:\\n\\nRecent updates to Attachment A\\n\\nA brief Me\r\n dLeave policy overview\\n\\nBest practices for MedLeave submissions and revie\r\n ws\\n\\nTime for questions and discussion with the OAA team\\n\\nTo help us pre\r\n pare\\, we would appreciate any questions being sent in advance to som-leave\r\n s@stanford.edu. Please know there are no “dumb” or silly questions\\, if you\r\n ’re asking it\\, someone else likely is too\\, and we’re happy to help clarif\r\n y.\\n\\nPresented Material\r\nDTSTAMP:20260308T083906Z\r\nDTSTART;VALUE=DATE:20260212\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Leave Policy and MedLeave Overview\r\nUID:tag:localist.com\\,2008:EventInstance_52128901579323\r\nURL:https://events.stanford.edu/event/leave-policy-and-medleave-overview\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:This 6-session support group\\, co-facilitated by two MHT clinic\r\n ians\\, offers a student-centered space to show up as you are\\, connect with\r\n  peers\\, and build community.\\n\\nTogether we’ll explore ways to navigate ac\r\n ademic and professional stress\\, manage anxiety\\, reflect on identity-relat\r\n ed experiences\\, and address impostor feelings- along with other student-le\r\n d topics. The group also fosters moments of joy and connection as part of t\r\n he healing process.\\n\\nThis group is held on Thursdays 8:30-9:30 AM\\, start\r\n ing January 22\\, 2026. Meeting dates for winter quarter are 1/22\\; 1/29\\; 2\r\n /5\\; 2/12\\; 2/26\\; 3/5. Sessions are both virtual and in-person.  In-person\r\n  dates are 1/29\\; 2/12\\; 3/5.\\n\\nA meeting with a facilitator is required t\r\n o join this group. You can sign up on the on \"*INTEREST_LIST_SOM_Students_o\r\n f_Color_GROUP_WINTER_Q\" on the Vaden Portal rosters\\, in the \"Groups and Wo\r\n rkshops\" section. A facilitator will reach out to you to schedule a pre-gro\r\n up meeting.\\n\\nOpen to all registered BioSci PhD/MS\\, MSPA\\, and MD student\r\n s in the School of Medicine.Facilitated by Isela Garcia White\\, LCSW and Ma\r\n riko Sweetnam\\, LCSW\r\nDTEND:20260212T173000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T163000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:(School of Medicine) Students of Color Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51508879958501\r\nURL:https://events.stanford.edu/event/copy-of-school-of-medicine-students-o\r\n f-color-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Annual affiliates meeting for Suetri-a members.\r\nDTEND:20260213T013000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T163000Z\r\nGEO:37.425273;-122.172422\r\nLOCATION:Press Bldg.\r\nSEQUENCE:0\r\nSUMMARY:2026 4th Annual SUETRI-A Affiliates Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_51993437633622\r\nURL:https://events.stanford.edu/event/2026-4th-annual-suetri-a-affiliates-m\r\n eeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Please note: SLAC onsite appointments are for SLAC Active Staff\r\n  only due to security access reasons.\\n\\nDid you know that advisors from Fi\r\n delity Investments and TIAA provide free individual financial counseling on\r\n  campus at your convenience? They can offer guidance on the best strategy t\r\n o meet your retirement goals through Stanford's retirement savings plans.\\n\r\n \\nContact Fidelity directly to schedule an appointment with a representativ\r\n e to review your current and future retirement savings options:\\n\\nFidelity\r\n  appointment scheduler(800) 642-7131\r\nDTEND:20260213T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T163000Z\r\nGEO:37.419892;-122.205244\r\nLOCATION:SLAC National Accelerator Laboratory\\, Bldg 53\\, Conference Room 4\r\n 050 (Room 053-4050\\, Yosemite Conf Room)\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (SLAC Campus\\, Bldg 53\\, Room 40\r\n 50) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51887154291385\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-slac-campus-bldg-53-room-4050-by-appointment-only-1896\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260212T180000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353478508\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260213T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382734495\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Characterizing the dynamics of marine communities and their res\r\n ponses to disturbances\\n\\nMarine ecological communities face numerous distu\r\n rbances\\, some of which are becoming stronger and more frequent due to clim\r\n ate change. These range from chronic “press” disturbances\\, such as warming\r\n  and pollution\\, to acute “pulse” disturbances\\, such as heatwaves and stor\r\n ms. Characterizing the population dynamic responses to these stressors has \r\n been a daunting task\\, given the dynamical complexity of multispecies commu\r\n nities and the limited mathematical and computational tools to address this\r\n  complexity. I will present quantitative approaches that I have recently de\r\n veloped to overcome this challenge and will illustrate how they can be appl\r\n ied to natural communities. First\\, I will examine the issue of predicting \r\n species abundance fluctuations following a regime shift triggered by a pres\r\n s disturbance. I will show that by integrating abundance time series and th\r\n e disturbance driver into a nonparametric model\\, we can reveal how abundan\r\n ces will fluctuate under unobserved conditions. Leveraging data from a lake\r\n  plankton community and a California fishery\\, I will illustrate how this a\r\n pproach identifies disturbance thresholds that lead to abrupt population sh\r\n ifts. Next\\, I will address the problem of predicting species abundance amp\r\n lification following a pulse disturbance. I will introduce a theory that qu\r\n antifies this amplification when the undisturbed community exhibits complex\r\n  population dynamics\\, such as transients or cycles. Using data from marine\r\n  rocky intertidal and phytoplankton communities\\, I will show that the pote\r\n ntial for abundance amplification can change over time\\, leading to seasona\r\n l windows of high vulnerability. Overall\\, this research creates new possib\r\n ilities to explain and anticipate the responses of ecological communities t\r\n o a changing ocean.\r\nDTEND:20260212T183000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T171500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 292A (CIFE Classroom)\r\nSEQUENCE:0\r\nSUMMARY:Oceans Department Seminar - Lucas Medeiros\r\nUID:tag:localist.com\\,2008:EventInstance_51825769434435\r\nURL:https://events.stanford.edu/event/oceans-department-faculty-search-semi\r\n nar-lucas-medeiros\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for a school-wide ABC Coffee Convo on Thursday\\, Februa\r\n ry 12th from 10 a.m. – 11 a.m. in the Hartley Conference Room (Mitchell Ear\r\n th Sciences) where we will learn about the impactful community-building and\r\n  scholarly work advanced by Black Ocean Stanford Scholars (BOSS)\\, a studen\r\n t group supporting the representation of Black individuals in Ocean related\r\n  career paths.\\n\\nThe Coffee Convo will feature remarks from BOSS members S\r\n tephanie Caddell\\, Ryan Rogers\\, Sydney Hampton\\,Ceyenna Tillman\\, Kemi Ash\r\n ing-Giwa\\, and Catherine Lee Hing who will share the work of their organiza\r\n tion\\, highlighting the inaugural Black Faces in Ocean Spaces Workshop host\r\n ed in collaboration with the Monterey Bay Aquarium this past September. BOS\r\n S members will reflect on the importance of community\\, allyship\\, and what\r\n  they learned from the 3-day workshop.\\n\\n​Dom Johnson (Assistant Dean & As\r\n sociate Director) of the Black Community Services Center (BCSC) will speak \r\n virtually about the significance of Black History & Liberation month. Addit\r\n ionally\\, we will hear about the history of BCSC’s history on Stanford's ca\r\n mpus supporting students\\, staff\\, faculty\\, alumni\\, and community members\r\n  on Stanford's campus over the last 56 years.\\n\\nCome enjoy delicious Nirva\r\n na Soul coffee\\, pastries\\, and trivia after the presentations. Trivia winn\r\n ers will receive a bag of Nirvana Soul coffee beans!\\n\\nEveryone is welcome\r\n  to this community-building celebration!\r\nDTEND:20260212T190000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T180000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Room \r\nSEQUENCE:0\r\nSUMMARY:Celebrating Community with the Black Ocean Stanford Scholars (BOSS)\r\n  & Black Community Services Center \r\nUID:tag:localist.com\\,2008:EventInstance_51966945113033\r\nURL:https://events.stanford.edu/event/celebrating-community-with-the-black-\r\n ocean-stanford-scholars-boss-black-community-services-center\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Take a moment to relax with snacks\\, crafts\\, and games at Bran\r\n ner Earth Sciences Library! \\n\\nThis event is part of Love Data Week at Sta\r\n nford\\, an annual festival highlighting topics\\, opportunities and services\r\n  relevant to data in research. So grab a coffee while you create your own d\r\n ata inspired crafts!\\n\\nAvailable activities:\\n\\nAI APIs & Astronomy Imager\r\n y - Compare real astronomical photos from Astronomy Picture of the Day (APo\r\n D) with AI images we generate on demand for you from Stanford's AI Playgrou\r\n nd API. Check out last year's gallery.Map Embroidery - Make a meaningful ma\r\n p in this data physicalization activity! We provide the raw materials for y\r\n ou to embroider a personal mini-map\\, you bring the creativity. Textile Dat\r\n a Weaving - You’re probably used to seeing data represented in charts and g\r\n raphs\\, but have you ever seen a data set turned into a textile? With this \r\n activity\\, you can weave a data set into cloth to destress and learn a fun \r\n method of displaying data.Guess the Dataset! - Try to guess the underlying \r\n dataset from an unlabeled graph. This is a fun way to put your knowledge of\r\n  trends in the world to the test. We'll put it up on a bit screen so you ca\r\n n play with your friends\\, and maybe make some new friends! All activities \r\n are free\\, no experience necessary (we'll show you how!)\\, and will be avai\r\n lable while supplies last!\\n\\nHelp us reduce waste\\, bring your own covered\r\n  mug and reusable plate!\\nBranner Library will also be hosting several data\r\n  inspired events throughout the day\\, be sure to check them out!\\n\\nPlease \r\n bring your Stanford ID card/mobile ID to enter the library\\, visitors must \r\n present their government issued ID at the front desk.\\n\\nWe will be taking \r\n photos at this event for publicity purposes. Your presence at this event co\r\n nstitutes consent to be photographed unless you express otherwise.\r\nDTEND:20260212T220000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T180000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Relax with Data Crafts: Love Data Week De-stress!\r\nUID:tag:localist.com\\,2008:EventInstance_51446909242678\r\nURL:https://events.stanford.edu/event/branner-data-destress\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Libraries' Digital Production Group is partnering again wit\r\n h the Doerr School Geoscience Specimen Collection to promote the use and un\r\n derstanding of 3D scanning of objects for research and teaching. We will de\r\n monstrate scanning of 3D objects\\, in particular a selection of fossils fro\r\n m the Stanford Doerr School of Sustainability Geoscience Specimen Collectio\r\n ns and include examples of how this 3D scan data is used in research.\\n\\nRe\r\n gister here!\\n\\nThis event is part of Love Data Week at Stanford\\, an annua\r\n l festival highlighting topics\\, opportunities and services relevant to dat\r\n a in research. \\n\\nThis event will be held in Branner Earth Sciences Librar\r\n y. To access the library\\, please bring your Stanford ID or valid governmen\r\n t-issued ID.\\n\\nWe will be taking photos at this event for publicity purpos\r\n es. Your presence at this event constitutes consent to be photographed unle\r\n ss you express otherwise.\r\nDTEND:20260212T200000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T183000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library\r\nSEQUENCE:0\r\nSUMMARY:3D Scan Demonstration: Doerr School Geoscience Specimen Collection!\r\nUID:tag:localist.com\\,2008:EventInstance_51447063262439\r\nURL:https://events.stanford.edu/event/ldw2026-3d-scan-demo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260213T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114923962\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:About the film\\nAbundance: Living with a Forest (2024) is a fil\r\n mic biography of foraging\\, forest\\, and jhum cultivation in Nagaland\\, a h\r\n ill state in Northeast India where approximately 60% of the population depe\r\n nd on jhum cultivation. Jhum cultivation and foraging have been recognized \r\n as community practices of indigenous knowledge. However\\, both these practi\r\n ces and the forest to which they are intrinsically linked have been threate\r\n ned by the plantation\\, monocropping\\, and infrastructure activities that h\r\n ave surged with the ongoing ceasefire between Naga armed groups and the gov\r\n ernment.\\n\\nAbundance: Living with a Forest follows Zareno\\, a Lotha forage\r\n r in the forest of Khumtsü\\, and traces the foraged edible plants as they m\r\n ake their way to the market in Wokha town. The film gestures to an impendin\r\n g loss that Indigenous communities encounter across the world.\\n\\nAbout the\r\n  speaker\\nDolly Kikon is Professor of Anthropology at UC Santa Cruz and dir\r\n ector of the Center for South Asian Studies. She is the author of Experienc\r\n es of Naga Women in Armed Conflict: Narratives from a Militarized Society (\r\n 2004)\\; Life and Dignity: Women’s Testimonies of Sexual Violence in Dimapur\r\n  (2015)\\; Living with Oil and Coal: Resource Politics and Militarization in\r\n  Northeast India (2019)\\; with Bengt G. Karlsson\\, Leaving the Land: Indige\r\n nous Migration and Affective Labour in India (2019)\\; with Duncan McDuie-Ra\r\n m\\, Ceasefire City: Militarism\\, Capitalism\\, and Urbanism in Dimapur (2021\r\n )\\; with Dixita Deka\\, Joel Rodrigues\\, Bengt G. Karlsson\\, Sanjay Barbora\\\r\n , and Meenal Tula\\, Seeds and Sovereignty: Eastern Himalayan Experiences (2\r\n 023).\r\nDTEND:20260212T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Abundance: Living with a Forest\r\nUID:tag:localist.com\\,2008:EventInstance_50702132446652\r\nURL:https://events.stanford.edu/event/dolly-film-showing-and-talk\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:An estimated forty thousand Jews were murdered during the Russi\r\n an Civil War. Professor Harriet Murav (University of Illinois) examines the\r\n  Yiddish and Russian literary response to the violence (pogroms) and the re\r\n lief effort\\, exploring both the poetry of catastrophe and the documentatio\r\n n of catastrophe and care.\\n\\nLunch included.\\n\\nThis event is generously c\r\n o-sponsored with the Center for Russian\\, East European\\, and Eurasian Stud\r\n ies.\r\nDTEND:20260212T213000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, Conference Room\r\nSEQUENCE:0\r\nSUMMARY:As the Dust of the Earth: The Literature of Abandonment in Revoluti\r\n onary Russia and Ukraine\r\nUID:tag:localist.com\\,2008:EventInstance_51809806967022\r\nURL:https://events.stanford.edu/event/as-the-dust-of-the-earth-the-literatu\r\n re-of-abandonment-in-revolutionary-russia-and-ukraine\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Co-sponsored with the Black Staff Alliance\\n\\nThe Black Staff A\r\n lliance and the Faculty Staff Help Center extend the theme of wellness thro\r\n ughout the year with the offering of monthly\\, mental wellness drop-in grou\r\n ps that center the experiences of faculty\\, staff\\, retirees\\, and postdocs\r\n . This group aims to create a welcoming and inclusive space for employees o\r\n f Stanford to share their experiences\\, strengths\\, and hope in managing so\r\n me of the unique stressors of being Black. Join us as we discuss historical\r\n  contexts of mental wellness in the community\\, systems of continued suppor\r\n t and resources\\, and how to implement all of this. This group is open\\, an\r\n d we encourage participation from all faculty\\, staff\\, retirees\\, and post\r\n docs.\\n\\nFacilitators\\n\\nJohn Brown: LMFT\\, ICF Certified Coach\\n\\nKelliann\r\n e Webster: PsyD\r\nDTEND:20260212T213000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Black Mental Wellness Group\r\nUID:tag:localist.com\\,2008:EventInstance_51775015020523\r\nURL:https://events.stanford.edu/event/black-mental-wellness-group-2422\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport\r\nDESCRIPTION:Les Mills BODYPUMP™ Heavy Launch Party- Stanford Redwood City R\r\n ecreation and Wellness Center. \\n\\nGet ready to lift heavier\\, train harder\r\n \\, and feel stronger than ever. Join us for the Les Mills BODYPUMP™ Heavy L\r\n aunch Party\\, an energizing workout experience designed to challenge your l\r\n imits with powerful tracks\\, big lifts\\, and serious strength gains.\\n\\nExp\r\n ect high energy\\, motivating instructors\\, and an epic atmosphere as we lau\r\n nch the latest BODYPUMP Heavy release together. Perfect for anyone who love\r\n s strength training and wants to push to the next level.\\n\\n🗓 Thursday\\, Fe\r\n bruary 12th\\, 2026 \\n⏰ 12:00 noon - 12:50pm \\n\\nLoad up your bar\\, bring yo\r\n ur best effort\\, and let’s lift heavy.\r\nDTEND:20260212T205000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.483753;-122.204314\r\nLOCATION:Stanford Redwood City Recreation & Wellness Center\r\nSEQUENCE:0\r\nSUMMARY:BodyPump Heavy Launch (Redwood City)\r\nUID:tag:localist.com\\,2008:EventInstance_51888330749658\r\nURL:https://events.stanford.edu/event/bodypump-heavy-launch-redwood-city\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Center for Decoding the Universe brings together researcher\r\n s across scientific disciplines to answer the biggest questions about our U\r\n niverse by leveraging complex data with the most advanced computational met\r\n hods.\r\nDTEND:20260213T020000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.430043;-122.171561\r\nLOCATION:Simonyi Conference Center\\, Simonyi Conference Center\\, Fourth Flo\r\n or\\, CoDa \r\nSEQUENCE:0\r\nSUMMARY:Center for Decoding the Universe Winter Forum\r\nUID:tag:localist.com\\,2008:EventInstance_51772645846381\r\nURL:https://events.stanford.edu/event/center-for-decoding-the-universe-wint\r\n er-forum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260213T010000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561108824\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Drawing on a statistical analysis and case studies\\, Semuhi Sin\r\n anoglu\\, Lucan Way\\, and Steven Levitsky argue that incumbent control over \r\n the economy fosters authoritarianism by undermining the popular\\, financial\r\n \\, and organizational bases of opposition activity. The concentration of ec\r\n onomic resources in the hands of state leaders – whether it emerges out of \r\n statist economic policies\\, oil wealth\\, or extreme underdevelopment – make\r\n s citizens and economic actors dependent on the whim of state leaders for s\r\n urvival. Indeed\\, poor\\, statist and/or oil rich states account for the ove\r\n rwhelming share of closed autocracies today. To establish the plausibility \r\n that economic dependence is a major source of authoritarianism\\, the paper \r\n presents a statistical analysis of authoritarian durability and evidence fr\r\n om four diverse cases – Belarus\\, Russia\\, Kuwait\\, Togo\\, Burundi -- that \r\n such dependence has weakened opposition. \\n\\nLucan Ahmad Way received his B\r\n A from Harvard College and his PhD from the University of California\\, Berk\r\n eley. Way’s research focuses on global patterns of democracy and dictatorsh\r\n ip.  His most recent book (with Steven Levitsky)\\, Revolution and Dictators\r\n hip: The Violent Origins of Durable Authoritarianism (Princeton University \r\n Press) provides a comparative historical explanation for the extraordinary \r\n durability of autocracies (China\\, Cuba\\, USSR) born of violent social revo\r\n lution. Way’s solo-authored book\\, Pluralism by Default: Weak Autocrats and\r\n  the Rise of Competitive Politics (Johns Hopkins\\, 2015)\\, examines the sou\r\n rces of political competition in the former Soviet Union.  Way argues that \r\n pluralism in the developing world often emerges out of authoritarian weakne\r\n ss: governments are too fragmented and states too weak to monopolize politi\r\n cal control.  His first book\\, Competitive Authoritarianism: Hybrid Regimes\r\n  after the Cold War (with Steven Levitsky)\\, was published in 2010 by Cambr\r\n idge University Press. Way’s work on competitive authoritarianism has been \r\n cited thousands of times and helped stimulate new and wide-ranging research\r\n  into the dynamics of hybrid democratic-authoritarian rule.\\n\\nWay also has\r\n  published articles in the American Journal of Political Science\\, Comparat\r\n ive Politics\\, Journal of Democracy\\, Perspectives on Politics\\, Politics &\r\n  Society\\, Slavic Review\\, Studies in Comparative and International Develop\r\n ment\\, World Politics\\, as well as in a number of area studies journals and\r\n  edited volumes. His 2005 article in World Politics was awarded the Best Ar\r\n ticle Award in the “Comparative Democratization” section of the American Po\r\n litical Science Association in 2006. He is Co-Director of the Petro Jacyk P\r\n rogram for the Study of Ukraine and is Co-Chair of the Editorial Board of T\r\n he Journal of Democracy. He has held fellowships at Harvard University (Har\r\n vard Academy and Davis Center for Russian and Eurasian Studies)\\, and the U\r\n niversity of Notre Dame (Kellogg Fellowship).\\n\\nREDS: RETHINKING EUROPEAN \r\n DEVELOPMENT AND SECURITY\\n\\nThe REDS Seminar Series aims to deepen the rese\r\n arch agenda on the new challenges facing Europe\\, especially on its eastern\r\n  flank\\, and to build intellectual and institutional bridges across Stanfor\r\n d University\\, fostering interdisciplinary approaches to current global cha\r\n llenges.\\n\\nREDS is organized by The Europe Center and the Center on Democr\r\n acy\\, Development and the Rule of Law\\, and co-sponsored by the Hoover Inst\r\n itution and the Center for Russian\\, East European and Eurasian Studies.\\n\\\r\n nLearn more about REDS and view past seminars here.\r\nDTEND:20260212T211500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Lucan Way | REDS Seminar: Economic Dependence and Authoritarianism:\r\n  Russia in Comparative Perspective\r\nUID:tag:localist.com\\,2008:EventInstance_51808828595895\r\nURL:https://events.stanford.edu/event/lucan-way-reds-seminar-economic-depen\r\n dence-and-authoritarianism-russia-in-comparative-perspective\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join the speaker for coffee\\, cookies\\, and conversation before\r\n  the talk\\, starting at 11:45am.\\n\\nNeural mechanism linking interoception \r\n to decision-makingAbstract\\n\\nInteroceptive signals convey information abou\r\n t the physiological state of the body to the brain and have been proposed t\r\n o shape affect and decision-making. Yet it remains unclear how changes in b\r\n ody physiology alone are sufficient to bias complex decisions\\, such as cho\r\n ices in an approach-avoidance conflict task. We manipulated the peripheral \r\n autonomic state of rhesus macaques using pharmacological agents with minima\r\n l blood–brain barrier penetration. During peripherally restricted\\, sympath\r\n etic-dominated physiological states\\, animals terminated mildly aversive st\r\n imuli earlier even at the cost of forgoing reward. These effects generalize\r\n d across different aversive modalities while leaving ordinal food preferenc\r\n es intact\\, indicating a selective effect of altered interoceptive afferent\r\n s on avoidance. I will discuss the neural underpinnings of these behavioral\r\n  biases in the anterior cingulate cortex (ACC) and amygdala\\, exploring how\r\n  interoceptive states modulate neural representations of both decision comm\r\n itment and spontaneous coping behaviors. Together\\, these findings support \r\n a causal role for interoceptive signaling in shaping decision-making and hi\r\n ghlight specific neural substrates through which body–brain interactions ma\r\n y drive avoidance behavior.\\n\\n \\n\\nKatalin Gothard\\, MD\\, PhDProfessor of \r\n Physiology and Neuroscience\\, The University of Arizona | she/her\\n\\nKatali\r\n n Gothard obtained her M.D. in Romania\\, followed by postgraduate training \r\n in neurosurgery and a Ph.D. in Neuroscience. Her worked is focused on how t\r\n he brain integrates internal bodily states\\, emotional signals\\, and social\r\n  information to guide adaptive behavior. Her research bridges systems neuro\r\n science\\, primate behavior\\, and affective science\\, combining quantitative\r\n  physiology with naturalistic behavioral paradigms to uncover how the amygd\r\n ala and related circuits coordinate perception\\, emotion\\, and decision-mak\r\n ing.\\n\\nVisit lab website\\n\\nHosted by Karen Parker (Parker Lab - Social Ne\r\n urosciences Research Program)\\n\\n \\n\\nSign up for Speaker Meet-upsEngagemen\r\n t with our seminar speakers extends beyond the lecture. On seminar days\\, i\r\n nvited speakers meet one-on-one with faculty members\\, have lunch with a sm\r\n all group of trainees\\, and enjoy dinner with a small group of faculty and \r\n the speaker's host.\\n\\nIf you’re a Stanford faculty member or trainee inter\r\n ested in participating in these Speaker Meet-up opportunities\\, click the b\r\n utton below to express your interest. Depending on availability\\, you may b\r\n e invited to join the speaker for one of these enriching experiences.\\n\\nSp\r\n eaker Meet-ups Interest Form\\n\\n \\n\\nAbout the Wu Tsai Neurosciences Semina\r\n r SeriesThe Wu Tsai Neurosciences Institute seminar series brings together \r\n the Stanford neuroscience community to discuss cutting-edge\\, cross-discipl\r\n inary brain research\\, from biochemistry to behavior and beyond.\\n\\nTopics \r\n include new discoveries in fundamental neurobiology\\; advances in human and\r\n  translational neuroscience\\; insights from computational and theoretical n\r\n euroscience\\; and the development of novel research technologies and neuro-\r\n engineering breakthroughs.\\n\\nUnless otherwise noted\\, seminars are held Th\r\n ursdays at 12:00 noon PT.\\n\\nSign up to learn about all our upcoming events\r\nDTEND:20260212T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: Katalin Gothard - Neural mechanism linking i\r\n nteroception to decision-making\r\nUID:tag:localist.com\\,2008:EventInstance_50539424672818\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-katalin-gothard\r\n -interoceptive-signaling-alters-the-neural-foundation-of-decision-making\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: China's nuclear forces\\, policies\\, and\\, poss\r\n ibly\\, strategy seem to be changing dramatically\\, with official US estimat\r\n es suggesting the country may reach peer status by the end of the decade. P\r\n olicymakers and scholars alike want to understand why these changes are occ\r\n urring\\, but determining what is changing must precede explaining why. Chin\r\n a\\, like many other nuclear powers\\, veils its nuclear forces in secrecy. T\r\n hat veil\\, however\\, has been increasingly pierced by open-source intellige\r\n nce. The discovery of more than three hundred ICBM silos under construction\r\n  surprised many experts who long believed China was moving decisively towar\r\n d mobile forces. This talk considers the relationship between models of Chi\r\n na's decision-making and sources of information\\, both historical and conte\r\n mporary. I compare the gaze of the intelligence community with that of scho\r\n lars to create a framework for reconsidering our understanding of China's n\r\n uclear forces in the past and to suggest how open-source information could \r\n shape our understanding in the future. While focused on China's nuclear ars\r\n enal\\, the case illustrates a broader point: open-source analysis represent\r\n s a distinct way of knowing about the world\\, but only when married to trad\r\n itional research methods. Scholars working on other opaque policy challenge\r\n s\\, especially in security\\, face similar empirical problems\\, and this tal\r\n k offers a framework for thinking about how open-source research might cont\r\n ribute to their work.\\n\\nAbout the speaker: Dr. Jeffrey Lewis is a Distingu\r\n ished Scholar of Global Security at Middlebury College. He is also a member\r\n  of the National Academies Committee on International Security and Arms Con\r\n trol and the Frontier Red Team for Anthropic. From 2022 to 2025\\, Dr. Lewis\r\n  was a member of the U.S. Secretary of State’s International Security Advis\r\n ory Board. He is the author of three books\\, The Minimum Means of Reprisal:\r\n  China’s Search for Security in the Nuclear Age\\; Paper Tigers: China’s Nuc\r\n lear Posture\\; and The 2020 Commission on the North Korean Nuclear Attacks \r\n on the United States.\r\nDTEND:20260212T213000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Open Source Windows on China's Nuclear Forces\\, Policy and Strategy\r\nUID:tag:localist.com\\,2008:EventInstance_52013120700601\r\nURL:https://events.stanford.edu/event/open-source-windows-on-chinas-nuclear\r\n -forces-policy-and-strategy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260212T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.431942;-122.176463\r\nLOCATION:Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:SCI Cancer Biology and Cancer Stem Cell Talks/ReMS - Julien Sage\\, \r\n PhD \"Inter- and intra-tumoral heterogeneity in small-cell lung cancer\"\r\nUID:tag:localist.com\\,2008:EventInstance_51518104490044\r\nURL:https://events.stanford.edu/event/sci-cancer-biology-and-cancer-stem-ce\r\n ll-talksrems-julien-sage-phd-inter-and-intra-tumoral-heterogeneity-in-small\r\n -cell-lung-cancer\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260212T201500Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762170666\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:OverviewJoin us to enhance your clinical approach to evaluating\r\n  and managing hip\\, thigh\\, and leg pain in active individuals and athletes\r\n . Expert faculty will review the differential diagnosis of common extra-art\r\n icular and intra-articular causes of hip pain\\, as well as prevalent runnin\r\n g-related injuries affecting the thigh and lower leg. Learners will review \r\n updated approaches to diagnosis and management of these conditions\\, incorp\r\n orating recent advances and evolving concepts in sports medicine care.\\n\\nR\r\n egistrationRegistration for all practitioners - free.\\n\\nTo register for th\r\n is activity\\, please click HERE\\n\\nCreditsAMA PRA Category 1 Credits™ (1.00\r\n  hours)\\, Non-Physician Participation Credit (1.00 hours)\\n\\nTarget Audienc\r\n eSpecialties - Internal Medicine\\, Primary Care & Population Health\\, Sport\r\n s MedicineProfessions - Non-Physician\\, Physician\\n ObjectivesAt the conclu\r\n sion of this activity\\, learners should be able to:\\n1. Evaluate the non-ar\r\n thritic hip and on physical exam to differentiate between intra-articular h\r\n ip pain from extra-articular hip pain\\n2. List the differential diagnosis o\r\n f non-arthritic hip pain\\n3. Discuss the differential diagnosis of leg pain\r\n  in the runner\\n4. Explain when to refer the patient with nonarthritic hip \r\n to the orthopaedist \\n5. Develop strategies to treat the different causes o\r\n f leg pain in the runner\\n\\nAccreditationIn support of improving patient ca\r\n re\\, Stanford Medicine is jointly accredited by the Accreditation Council f\r\n or Continuing Medical Education (ACCME)\\, the Accreditation Council for Pha\r\n rmacy Education (ACPE)\\, and the American Nurses Credentialing Center (ANCC\r\n )\\, to provide continuing education for the healthcare team. \\n \\nCredit De\r\n signation \\nAmerican Medical Association (AMA) \\nStanford Medicine designat\r\n es this Live Activity for a maximum of 1.00 AMA PRA Category 1 CreditsTM.  \r\n Physicians should claim only the credit commensurate with the extent of the\r\n ir participation in the activity.\r\nDTEND:20260212T210000Z\r\nDTSTAMP:20260308T083906Z\r\nDTSTART:20260212T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Medicine Orthopaedic Academy: Hip\\, Thigh and Leg Pain in \r\n the Active Person\r\nUID:tag:localist.com\\,2008:EventInstance_51957794699593\r\nURL:https://events.stanford.edu/event/stanford-medicine-orthopaedic-academy\r\n -hip-thigh-and-leg-pain-in-the-active-person\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Community-centered investigations by Climate Rights Internation\r\n al highlight hazards to human rights in supply chains for batteries used in\r\n  electric vehicles and power grids. Implications and options? Let's discuss\r\n ! Lunch will be provided upon RSVP. \\n\\nAbout Brad Adams\\n\\nClimate Rights \r\n International was founded by Brad Adams\\, who serves as its Executive Direc\r\n tor. From 2002-2022\\, Brad was the Executive Director of the Asia division \r\n at Human Rights Watch\\, overseeing investigations\\, advocacy and media work\r\n  in twenty countries including China\\, India\\, Indonesia\\, Philippines\\, Vi\r\n etnam\\, Myanmar\\, Japan\\, and North Korea.\\n\\nHe worked on issues such as a\r\n ttacks on environmental and human rights defenders\\, land rights\\, labor ri\r\n ghts\\, the protection of civil society\\, freedom of expression\\, refugees\\,\r\n  women’s rights\\, impunity\\, and international justice. Brad has written fo\r\n r the New York Times\\, Washington Post\\, the Guardian\\, Foreign Affairs\\, a\r\n nd the Wall Street Journal\\, among others. He has regularly appeared on the\r\n  BBC\\, CNN\\, Al Jazeera\\, and other major media.\\n\\nPrior to Human Rights W\r\n atch\\, Brad worked in Cambodia for five years as the senior lawyer for the \r\n Cambodia field office of the United Nations High Commissioner for Human Rig\r\n hts and as legal advisor to the Cambodian parliament’s human rights committ\r\n ee\\, conducting human rights investigations\\, supervising a judicial reform\r\n  program\\, and drafting and revising legislation. He was the founder of the\r\n  Berkeley Community Law Center (now the East Bay Community Law Center)\\, wh\r\n ere he worked as a legal aid lawyer. He periodically teaches International \r\n Human Rights Law and Practice at the University of California\\, Berkeley\\, \r\n School of Law\\, and is a member of the California State Bar.\\n\\nThis luncht\r\n ime discussion with Brad Adams is co-hosted by Precourt Institute for Energ\r\n y and Stanford Center for Human Rights and International Justice\r\nDTEND:20260213T093000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T200000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Room \r\nSEQUENCE:0\r\nSUMMARY:Unearthed: Social and Environmental Costs of Mining for Battery Min\r\n erals \r\nUID:tag:localist.com\\,2008:EventInstance_52013359755936\r\nURL:https://events.stanford.edu/event/the-hidden-social-and-environmental-c\r\n osts-of-rapid-energy-transition-featuring-brad-adams-climate-rights-interna\r\n tional\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:This talk will present the initial findings and methodological \r\n questions of the Database of Visitors to the “Museum of Rome” (1733–1870)\\,\r\n  which is currently being developed within the research project Visibility \r\n Reclaimed. The data\\, quantitative and qualitative\\, in the process of bein\r\n g catalogued\\, reflect the evolution of the first public museums in Rome in\r\n  relation to the different geographical origins and categories (social\\, cu\r\n ltural\\, gender) of the international and cosmopolitan public who directly \r\n accessed their collections. In particular\\, the talk intends to reflect on \r\n methodological questions and the results of early research findings related\r\n  to the multiplicity of sources: requests for visiting\\, copying and studyi\r\n ng museums and ancient monuments\\, as well as access registers and visitors\r\n ’ books of private galleries and collections. At the current stage\\, the da\r\n tabase allows the mapping of artistic presences and trajectories inside the\r\n  “Museum of Rome” during the decades between the 1820s and the 1870s. It pr\r\n ovides significant data on the networks that fueled the system of education\r\n  for foreign artists and architects in Rome\\, enabling new reflections on t\r\n he controversial relationship between artists and the papal institutions re\r\n sponsible for the preservation of the city’s artistic and architectural her\r\n itage. However\\, it also reveals gaps and fragmentation of archival sources\r\n \\, that require to be critically considered when analyzing the data.\\n\\nReg\r\n ister to join online\\n\\nLunch will begin at 11:45 a.m. for in-person attend\r\n ees.\\n\\nAbout the Speakers\\n\\nCarla Mazzarelli is an Associate Professor at\r\n  the Institute of the History and Theory of Art and Architecture\\, Universi\r\n tà della Svizzera Italiana. Since 2023\\, she has directed the SNSF-funded p\r\n roject Visibility Reclaimed\\, and since 2022\\, she has been a Project Partn\r\n er in the SNSF-funded project The Civility of Anatomy. Her researches focus\r\n  in particular on classical and academic culture between the Seventeenth an\r\n d Nineteenth centuries\\, on the history of collecting and museums\\, as well\r\n  as on artistic fruition\\, the role of audiences\\, and issues relating to t\r\n he transmission of models and artistic reproducibility from the early moder\r\n n period to the twentieth century. In 2023 she was a Visiting Research Fell\r\n ow at Durham University\\, and in 2025 she was an Invited Researcher within \r\n the DEA Programme at the Foundation de la Maison des sciences de l'Homme in\r\n  Paris. She has also been a fellow of the Paul Mellon Centre-Yale Universit\r\n y\\, the Roberto Longhi Foundation for Art History Studies\\, the Accademia d\r\n i San Luca\\, and the British Academy at the Courtauld Institute. In 2024 sh\r\n e was awarded the Award of Best Teaching  by the Università della Svizzera \r\n italiana.\\n\\nAmong her most recent publications: L’anatomia tra lettere e a\r\n rti: rappresentazioni e immaginari dal XVI al XXI secolo (with Linda Bisell\r\n o\\; Brill\\, Nuncius Series 2025)\\, Pubblici dei primi musei pubblici (XVIII\r\n -XIX sec.). I. Le fonti istituzionali (with G. Capitelli\\, C. Piva\\, Mendri\r\n sio Academy Press 2025)\\; Leonardo nel Novecento. Arti\\, scienze e lettere \r\n in dialogo\\, (Cinisello Balsamo\\, Silvana editoriale 2023. Quale gotico per\r\n  Milano. I materiali della giuria per il concorso della facciata del Duomo \r\n (1886-1888)\\, (with A. Windholz\\, M. Moizi)\\, Cinisello Balsamo\\, Silvana e\r\n ditoriale 2023\\; Lettere d’artista: per una storia transnazioanale dell’art\r\n e (XVII-XIX secolo)\\, with G. Capitelli\\, M.P.Donato\\, S.A.Meyer\\, I.Miarel\r\n li Mariani\\, Cinisello Balsamo (Mi)\\, Silvana\\, 2022\\; Il carteggio d'artis\r\n ta. Fonti\\, questioni\\, ricerche tra XVII e XIX secolo (with S. Rolfi\\, Cin\r\n isello Balsamo 2019)\\; Dipingere in copia. Da Roma all'Europa (1750-1870). \r\n I. Teorie e pratiche\\, Roma\\, Campisano 2018\\n\\nLuca Piccoli is a PhD candi\r\n date\\, within the Research Project Visibility Reclaimed\\, at the Institute \r\n of the History and Theory of Art and Architecture\\, Università della Svizze\r\n ra italiana. His dissertation\\, supervised by Carla Mazzarelli and co-super\r\n vised by Chiara Piva (Sapienza Università di Roma)\\, investigates the origi\r\n ns of museography in eighteenth-century Rome. He was a fellow at the Swiss \r\n Institute in the transdisciplinary program Roma Calling 2024/2025. He is cu\r\n rrently a Visiting Student Researcher at Stanford University (Department of\r\n  Classics) within the framework of the SNSF Mobility Grant\\, from October 2\r\n 025 to March 2026.\r\nDTEND:20260212T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T201500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 433A\r\nSEQUENCE:0\r\nSUMMARY:Mapping Cosmopolitanism in the “Museum of Rome”: A Database of Visi\r\n ting Publics\r\nUID:tag:localist.com\\,2008:EventInstance_52030226874844\r\nURL:https://events.stanford.edu/event/mapping-cosmopolitanism-in-the-museum\r\n -of-rome-a-database-of-visiting-publics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260212T204500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794457874\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This workshop will provide an introduction to Dask in Python fo\r\n r satellite image analysis on distributed systems at scale. We will learn w\r\n orkflows for accessing Earth Observation satellite imagery from NASA as we \r\n learn to interact efficiently with images that are larger than the onboard \r\n memory of a single chip\\, build and run custom functions targeted at only t\r\n he pixels needed for our analysis goals\\, and process targeted\\, machine le\r\n arning ready datasets from these images with the help of Dask's paralleliza\r\n tion and distributed data capabilities. This workshop is aimed at researche\r\n rs who have intermediate Python experience or higher\\, and all levels of ex\r\n perience (beginner-advanced) with HPC computing. Access to Sherlock is requ\r\n ired to participate fully in the session. This workshop is offered in partn\r\n ership with the SDSS Center for Computation.\\n\\nDate and Time: 1:00–2:00PM\\\r\n , Thursday\\, February 12\\, 2026Location: Branner Earth Sciences Library and\r\n  Zoom (link provided upon registration)Instructors: Ellianna Abrahams (Rese\r\n arch Software and Technology Consultant)\\, Maricela Abarca (Data Curator fo\r\n r Interdisciplinary Sustainability)This workshop is part of Love Data Week\\\r\n , an annual festival highlighting topics\\, opportunities and services relev\r\n ant to data in research.\\n\\nTo access Branner Library\\, please bring your S\r\n tanford ID and tap in. The library is on the 2nd floor of Mitchell and is A\r\n DA accessible.\\n\\nWe will be taking photos at this event for publicity purp\r\n oses. Your presence at this event constitutes consent to be photographed un\r\n less you express otherwise.\r\nDTEND:20260212T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T210000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library\r\nSEQUENCE:0\r\nSUMMARY:Dask for Geospatial Analysis: Efficient Parallel Workflows for Sate\r\n llite Imagery in Sherlock\r\nUID:tag:localist.com\\,2008:EventInstance_51446873897347\r\nURL:https://events.stanford.edu/event/dask-for-geospatial-analysis\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Other\r\nDESCRIPTION:The Molecular Imaging Program at Stanford (MIPS) was establishe\r\n d as an inter-disciplinary program in 2003 by the Dean of the School of Med\r\n icine (Dr. Philip Pizzo) and brings together scientists and physicians who \r\n share a common interest in developing and using state-of-the-art imaging te\r\n chnology and developing molecular imaging assays for studying intact biolog\r\n ical systems. The inaugural director was Dr. Sanjiv Sam Gambhir\\, Virginia \r\n & D.K. Ludwig Professor of Cancer Research and Chair of the Department of R\r\n adiology from 2003 to 2020. MIPS hosts a seminar series that is open and fr\r\n ee to everyone in the Stanford community. Our next seminar will host Jørgen\r\n  Arendt Jensen\\, M.Sc(EE)\\, PhD\\, Dr.Techn.\\, for a presentation titled\\, “\r\n Fast Super Resolution Ultrasound Imaging using the Erythrocytes.”\\n\\n \\n\\nL\r\n ocation: Zoom & Clark\\, S360\\nZoom Webinar Details\\nWebinar URL: https://st\r\n anford.zoom.us/s/94538440468\\nDial US: +1 650 724 9799 or +1 833 302 1536\\n\r\n Webinar ID: 945 3844 0468\\nPasscode: 297731\\n\\n \\n\\nHosted by: Michelle Jam\r\n es\\, PhD\\nSponsored by: Molecular Imaging Program at Stanford & the Departm\r\n ent of Radiology\r\nDTEND:20260212T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T210000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, S360\r\nSEQUENCE:0\r\nSUMMARY:MIPS Seminar - Jørgen Arendt Jensen\\, M.Sc(EE)\\, PhD\\, Dr.Techn.\r\nUID:tag:localist.com\\,2008:EventInstance_51586183324454\r\nURL:https://events.stanford.edu/event/copy-of-mips-seminar-matthias-manfred\r\n -herth-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260212T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491603342\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:The increasing penetration of distributed energy resources (DER\r\n s) brings opportunities and challenges to the operation of power distributi\r\n on systems. Conventionally\\, the DER hosting capacity of a local electric p\r\n ower system is commonly represented as a static value that is determined by\r\n  evaluating DER’s impacts on grid reliability considering “worst-case” cond\r\n itions\\, resulting in a conservative DER integration and  underutilization \r\n of grid infrastructure. However\\, hosting capacity is not a static value as\r\n  it is dependent on the coincidence of DER generation and load demand that \r\n vary over time. Dynamic Operating Envelopes (DOEs) establish upper and lowe\r\n r operational bounds for DERs over a given time period\\, within which they \r\n can operate without adverse grid impacts\\, thus unleashing the full potenti\r\n al of grid infrastructure and maximizing the DER integration. This talk wil\r\n l introduce an industry-accepted model to optimize DOEs\\, which has been in\r\n tegrated into major distribution system management software. Due to the non\r\n -convex nature of power flow model\\, the optimization of DOEs faces a chall\r\n enge of balancing solution accuracy and computational efficiency. We propos\r\n e an AI-assisted constraint embedding method that convexifies the problem b\r\n y replacing power flow equations with trained input convex neural networks \r\n (ICNNs). We compare its performance with two conventional optimization meth\r\n ods\\, i.e.\\, gradient descents and linearization\\, under various operating \r\n scenarios.\\n\\nBio\\n\\nZhaoyu Wang received the BS degree in electrical engin\r\n eering from Shanghai Jiao Tong University\\, & PhD degree in electrical and \r\n computer engineering from Georgia Institute of Technology. Since 2015\\, he \r\n has been assistant\\, associate\\, and full Professor at Iowa State Universit\r\n y. Dr. Wang is a Fellow of IEEE and an IEEE Power and Energy Society (PES) \r\n Distinguished Lecturer. He was the recipient of the National Science Founda\r\n tion CAREER Award and the IEEE PES Outstanding Young Engineer Award. He was\r\n  listed as a Highly Cited Researcher by Clarivate (Web of Science). Dr. Wan\r\n g’s research interests include optimization and data analytics in power dis\r\n tribution systems and microgrids. He has been the lead Principal Investigat\r\n or for over $24M projects funded by multiple federal agencies. He is leadin\r\n g an Energy Department-funded project that converts the entire City of Mont\r\n ezuma to be the very first utility-scale microgrid in the State of Iowa. He\r\n  has published more than 135 papers in top-notch journals and has won 10 be\r\n st paper awards. Dr. Wang is the Vice Chair of IEEE Power System Operation\\\r\n , Planning and Economics (PSOPE) Committee and the Chair of IEEE Distributi\r\n on System Operation and Planning Subcommittee. He has been an Associate Edi\r\n tor of IEEE Transactions on Sustainable Energy\\, IEEE Transactions on Power\r\n  Systems\\, IEEE Transactions on Smart Grid\\, and IEEE Power Engineering Let\r\n ters.\r\nDTEND:20260212T223000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T213000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\,  292A\r\nSEQUENCE:0\r\nSUMMARY:Smart Grid Seminar: AI-Assisted Optimization of Dynamic Operating E\r\n nvelopes for Flexible Integration of Distributed Energy Resources\r\nUID:tag:localist.com\\,2008:EventInstance_52057539360251\r\nURL:https://events.stanford.edu/event/smart-grid-seminar-zhaoyu-wang\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Data Farm is Stanford University's research data exploration\\, \r\n extraction\\, and analysis tool for datasets. Stanford contracts with Redivi\r\n s for use of their SaaS platform for storing\\, distributing\\, and analyzing\r\n  research data. Redivis offers a modern\\, high-performance web-based interf\r\n ace that enables researchers to work with a wide variety of datasets. \\n\\nW\r\n hat can Data Farm do?\\n\\nData Farm allows highly efficient and fast queries\r\n  (using either the visual query editor or writing SQL) directly in the brow\r\n ser. After performing a query\\, such as: filter-aggregate-combine\\, you can\r\n  explore descriptive statistics and visualizations right away or move into \r\n integrated notebooks for further data manipulation.\\n\\nDatasets on Data Far\r\n m are interoperable with common data analysis tools such as: Python\\, R\\, S\r\n AS\\, and Stata and can be easily exported to on-premise computing environme\r\n nts such as Farmshare / Sherlock into cloud compute services like GCP\\, AWS\r\n \\, Azure\\, or downloaded for local analysis (usage rights permitting).\\n\\nD\r\n ate and Time: 2:00PM–3:00PM\\, Thursday\\, February 12\\, 2026Location: Zoom (\r\n link provided upon registration) and Velma Denning Room (120F)\\, Bing Wing\\\r\n , Green LibraryLead Instructor:  Ian Matthews (CEO\\, Redivis) & Vijoy Abrah\r\n am (Assistant University Librarian\\, Research Data Services\\, Stanford Univ\r\n ersity Libraries)This event is part of Love Data Week\\, an annual festival \r\n highlighting topics\\, opportunities and services relevant to data in resear\r\n ch.\r\nDTEND:20260212T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T220000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Velma Denning Room (120F)\r\nSEQUENCE:0\r\nSUMMARY:Stanford Data Farm: Datasets For Research\r\nUID:tag:localist.com\\,2008:EventInstance_51898743893084\r\nURL:https://events.stanford.edu/event/redivis-workshop-a-data-and-computati\r\n onal-environment-for-reproducible-data-science-6460\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Offered by Counseling and Psychological Services (CAPS) and the\r\n  Graduate Life Office (GLO)\\, this is a six-session (virtual) group where y\r\n ou can vent\\, meet other graduate students like you\\, share goals and persp\r\n ectives on navigating common themes (isolation\\, motivation\\, relationships\r\n )\\, and learn some helpful coping skills to manage the stress of dissertati\r\n on writing.\\n\\nIf you’re enrolled this fall quarter\\, located inside the st\r\n ate of California\\, and in the process of writing (whether you are just sta\r\n rting\\, or approaching completion) please consider signing up.\\n\\nIdeal for\r\n  students who have already begun the dissertation writing process. All enro\r\n lled students are eligible to participate in CAPS groups and workshops. A g\r\n roup facilitator may contact you for a pre-group meeting prior to participa\r\n tion in Dissertation Support space.\\n\\nFacilitated by Cierra Whatley\\, PhD \r\n & Angela Estrella on Thursdays at 3pm-4pm\\; 2/5\\; 2/12\\; 2/19\\; 2/26\\; 3/5\\\r\n ; 3/12\\, virtualJoin at any point in the Quarter. Sign up on the Graduate L\r\n ife Office roster through this link.\r\nDTEND:20260213T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Dissertation Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51782991487932\r\nURL:https://events.stanford.edu/event/copy-of-dissertation-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford faculty\\, students and staff are welcome to join the F\r\n reeman Spogli Institute for International Studies (FSI) for “Global Trends \r\n and Geopolitics in 2026: A Look Ahead\\,” a forward-looking conversation on \r\n the forces shaping the world.\\n\\nFSI Director Colin Kahl will moderate a pa\r\n nel of leading institute scholars as they examine key regions and themes. T\r\n he discussion will feature Larry Diamond on the future of global democracy\\\r\n ; Anna Grzymala-Busse on European politics\\; Harold Trinkunas on Latin Amer\r\n ica\\; and Or Rabinowitz on Middle East politics and U.S.-Israel relations. \r\n Kahl will also offer insights into U.S.-China competition for AI dominance.\r\n \\n\\nDon't miss this timely conversation on emerging risks\\, opportunities\\,\r\n  and policy implications as we navigate an increasingly complex global land\r\n scape in 2026.\\n\\nDrinks and hors d'oeuvres will be served following the ev\r\n ent. \\n\\nRegistration for this event is at full capacity.\r\nDTEND:20260213T003000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260212T233000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Global Trends and Geopolitics in 2026: A Look Ahead\r\nUID:tag:localist.com\\,2008:EventInstance_51897281331028\r\nURL:https://events.stanford.edu/event/global-trends-and-geopolitics-in-2026\r\n -a-look-ahead\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:With Guest Speaker Allison Carruth (Professor of American Studi\r\n es and Environmental Studies\\, Princeton University)\\n\\nThis workshop will \r\n explore the emergence of ecomedia studies as a cross-cutting subfield of bo\r\n th STS and the environmental humanities by way of a discussion of a recent \r\n stream published in the open-access journal Media + Environment on “Modelin\r\n g the Pacific Ocean”. The seminar will then share some of the work of Princ\r\n eton’s Blue Lab as a case study in the creative environmental humanities. C\r\n ofounded by Allison Carruth and Barron Bixler\\, Blue Lab is the country's o\r\n nly media production studio located at a research university that focuses o\r\n n climate and environment storytelling. Since 2021\\, Blue Lab has built a m\r\n ultidisciplinary team\\, fostered a network of collaborators and advisors\\, \r\n launched a major public art program and developed five original story proje\r\n cts (three podcasts\\, a documentary film currently in production and a nonf\r\n iction dispatch series about uncanny coastal places). The lab aims to equip\r\n  scientists and humanists alike with the training and tools to amplify the \r\n reach of their vital work beyond academic journals\\, conferences\\, monograp\r\n hs and classrooms. The lab’s method is to mobilize environmental research i\r\n n the service of telling stories that are hyperlocal\\, aesthetically captiv\r\n ating and geared toward connecting with audiences across some critical cult\r\n ural divides. With these examples of ecomedia scholarship and creative prac\r\n tice as models\\, the final part of the workshop will be structured around b\r\n reakouts in which groups develop the initial ideas—and outline some of the \r\n practical challenges and ethical considerations—for an ecomedia project bas\r\n ed in California.\\n\\nRSVP HERE for Interdisciplinary Workshop: Ecomedia Inc\r\n ubator\r\nDTEND:20260213T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T000000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 460\\, Margaret Jacks Hall\\, Terrace Room\r\nSEQUENCE:0\r\nSUMMARY:EHP: Interdisciplinary Workshop: Ecomedia Incubator\r\nUID:tag:localist.com\\,2008:EventInstance_51907953049038\r\nURL:https://events.stanford.edu/event/ehp-interdisciplinary-workshop-ecomed\r\n ia-incubator\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us at the Women’s Community Center for Fondue & Flowers\\, \r\n a cozy\\, creative night where everyone is welcome to come celebrate love in\r\n  all its forms. 🌸✨\\n\\nWe’ll have all the supplies ready for:\\n\\nPersonalize\r\n d ceramic vase painting\\n\\nBouquet making (perfect to pair with the vase yo\r\n u design!)\\n\\nAnd as a sweet bonus…\\n\\nRom-coms playing in the background\\n\r\n \\nChocolate fondue with fresh fruit\\, cookies\\, and lots of fun treats to d\r\n ip 🍓🍪🍫\\n\\nWhether you’re:\\n\\nMaking a last-minute Valentine’s gift 💝\\n\\nCre\r\n ating something special for a friend\\n\\nOr just want a cute bouquet for you\r\n r dorm room\\n\\nThis is the perfect chance to slow down\\, get creative\\, and\r\n  celebrate together.\\n\\nCome celebrate with us\\, we can’t wait to see you t\r\n here! 💐💕\\n\\nBest\\,\\nAnjana & Chelsea (WCC Community Coordinator & Intern)\r\nDTEND:20260213T013000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T000000Z\r\nGEO:37.425085;-122.171682\r\nLOCATION:Fire Truck House\r\nSEQUENCE:0\r\nSUMMARY:Fondue & Flowers \r\nUID:tag:localist.com\\,2008:EventInstance_52074373866727\r\nURL:https://events.stanford.edu/event/fondue-flowers\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Tour\r\nDESCRIPTION:Spotlight on CESTA & Yarnlab (Textile Makerspace)\\nThursday\\, F\r\n ebruary 12 - 4-5:30PM\\nWallenberg Hall\\, room 433A\\n\\n \\n\\nThis event serie\r\n s is for grad students who want to discover campus makerspaces\\, connect wi\r\n th community\\, and learn about the new grad certificate in Making and Creat\r\n ive Praxis.\\n\\nRefreshments provided\\; RSVPs requested but not required\\n\\n\r\n Learn more & RSVP HERE\\n\\n \\n\\nMaking and creative expression complement an\r\n alysis and critique as foundations of scholarly inquiry. With the launch of\r\n  a graduate certificate program in Making and Creative Praxis\\, the Program\r\n  in Modern Thought and Literature and the Stanford Arts Institute aim to fo\r\n ster a community of teachers and learners committed to integrating abstract\r\n  and embodied forms of knowledge\\, expertise\\, and artistry. The certificat\r\n e will provide a framework for students to pursue making and creative pract\r\n ice courses that contextualize and guide scholarly research on cultural art\r\n ifacts. Participants will also join periodic gatherings to share their work\r\n  and engage in dialogues across disciplines and media.\\n\\n \\n\\nMixer Spotli\r\n ght\\n\\nAt the Center for Spatial and Textual Analysis (CESETA)\\, students a\r\n nd faculty combine the power of humanistic investigation with new technolog\r\n ies to document\\, analyze and understand the changing human experience. \\n\\\r\n nAt the Textile Makerspace\\, we teach methods for creating and using textil\r\n es and fibers\\, as well as how to incorporate data into textile praxis. But\r\n  it's not primarily a research lab: the Textile Makerspace is a place where\r\n  anyone is invited to explore these tools and methods in a hands-on way\\, w\r\n hether or not their curiosity is connected to their academic work.\\n\\n \\n\\n\r\n ******\\n\\nLearn more about the MCP grad certificate and other upcoming even\r\n ts on our website:\\n\\narts.stanford.edu/mcp\r\nDTEND:20260213T013000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T000000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 433A\r\nSEQUENCE:0\r\nSUMMARY:MIXERS FOR GRAD MAKERS\r\nUID:tag:localist.com\\,2008:EventInstance_51932432367002\r\nURL:https://events.stanford.edu/event/mixers-for-grad-makers\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Welcome to QTrees\\, a supportive and inclusive space designed s\r\n pecifically for queer Stanford students navigating their unique journeys.\\n\r\n \\nThis group during Winter quarter provides a safe\\, affirming environment \r\n where members can explore their LGBTQ+ identities\\, share experiences\\, and\r\n  find solidarity with others who understand their struggles and triumphs.\\n\r\n \\nQTrees will meet for 60 mins\\, weekly for 5 weeks\\, with the same people \r\n each week.Facilitated by Christine Catipon\\, PsyDAll enrolled students are \r\n eligible to participate in CAPS groups and workshops.Meeting with a facilit\r\n ator is required to join this group. You can sign up on the INTEREST LIST_Q\r\n Trees_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in the \"Groups and Works\r\n hops\" section. The location of the group will be provided upon completion o\r\n f the pre-group meeting with the facilitator.\r\nDTEND:20260213T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:QTrees\r\nUID:tag:localist.com\\,2008:EventInstance_51101143947338\r\nURL:https://events.stanford.edu/event/qtrees-4683\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:What matters most to you? If you were facing serious illness\\, \r\n what kind of care would you want? If you couldn’t speak for yourself\\, who \r\n would?\\n\\nPlanning for your future care can bring peace of mind – to you an\r\n d your loved ones. Advance care planning is a process that helps you decide\r\n  and document what kind of care you would want – and what kind you would no\r\n t want – if you have a sudden or serious illness diagnosis and are not able\r\n  to communicate or make decisions.\\n\\nIn this free online class\\, you will \r\n learn more about advance care planning and the steps you can take to help g\r\n et the care you want\\, based on what matters most to you. This workshop is \r\n appropriate for people newly considering this topic and for people who want\r\n  to update their documentation.\\n\\nWe will cover the basics of advanced car\r\n e planning – how to think about it\\, talk about it with loved ones and heal\r\n th care professionals\\, how to choose a health care agent\\, and the appropr\r\n iate forms\\, as well as special circumstances\\, such as a dementia directiv\r\n e\\, End of Life Options Act\\, interactive scenarios\\, and time for Q&A.\\n\\n\r\n This class will not be recorded. Attendance requirement for incentive point\r\n s - at least 80% of the live session.  Request disability accommodations an\r\n d access info.\\n\\nInstructor: Connie Borden\\, RN\\, MSN\\, ANP\\, is an advanc\r\n e practice nurse with 28 years of experience in hospice and palliative care\r\n . She has led a local nonprofit hospice as executive director and worked on\r\n  inpatient services as a palliative consultant. She had presented advance c\r\n are planning information during her 15 years at San Francisco’s St. Mary’s \r\n Medical Center. \\n\\nClass details are subject to change.\r\nDTEND:20260213T013000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Take Charge! - Guided Advance Care Planning\r\nUID:tag:localist.com\\,2008:EventInstance_51388530606787\r\nURL:https://events.stanford.edu/event/take-charge-guided-advance-care-plann\r\n ing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a free tour of Denning House and explore its treehouse-ins\r\n pired architecture and art collection.\\n\\nBuilt in 2018 specifically to hou\r\n se Knight-Hennessy Scholars\\, Denning House provides an inspiring venue for\r\n  scholars\\, staff\\, and visitors\\, and a magnificent setting for art. A gif\r\n t from Roberta Bowman Denning\\, '75\\, MBA '78\\, and Steve Denning\\, MBA '78\r\n \\, made the building possible. Read more about Denning House in Stanford Ne\r\n ws.\\n\\nTour size is limited. Registration is required to attend a tour of D\r\n enning House.\\n\\nNote: Most parking at Stanford is free of charge after 4 p\r\n m. Denning House is in box J6 on the Stanford Parking Map. Please see Stanf\r\n ord Parking for more information on visitor parking at Stanford. Tours last\r\n  approximately 30 minutes.\r\nDTEND:20260213T003000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T000000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Tour Denning House\\, home to Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51579196696683\r\nURL:https://events.stanford.edu/event/copy-of-tour-denning-house-home-to-kn\r\n ight-hennessy-scholars-5766\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Hoover Institution Library & Archives invites you to a hybr\r\n id event on Thursday\\, February 12\\, 2026 from 4:30 - 6:00 p.m. PT. Organiz\r\n ed in conjunction with Eastern Europe and Beyond: Photographic Albums Revea\r\n led\\, in person and online attendees will be encouraged to engage with the \r\n exhibition in expansive terms and to consider how photographic evidence por\r\n trays the human condition throughout history.\\n\\nOut of the horrible loss o\r\n f life of the American Civil War\\, an unlikely hero emerged—a photographer \r\n who had no idea that he was portraying the vast armies of the dead\\, ennobl\r\n ing and gracing them as individual souls lost to the world\\, but who kept a\r\n t it\\, day after day\\, year after year\\, decade after decade\\, until his dy\r\n ing day—making a heaven that fell to the ground. In this talk\\, Alexander N\r\n emerov will take the audience into the art and singular poetic grace of Wil\r\n son Bentley\\, the greatest photographer of snowflakes\\nwho ever lived.\\n\\nA\r\n BOUT THE SPEAKER\\n\\nAlexander Nemerov is the Carl and Marilynn Thoma Provos\r\n tial Professor in the Arts and Humanities\\, Stanford University. He has pub\r\n lished widely on different photographers\\; he has a special interest in the\r\n  1940s and has written about photography and films of the Second World War \r\n in several books and essays. Every fall Nemerov teaches a popular course on\r\n  art\\, “How to Look at Art and Why.”\r\nDTEND:20260213T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T003000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\\, Milbank Reading Room (T108)\r\nSEQUENCE:0\r\nSUMMARY:Wilson Bentley’s Army of Souls: A Photographic Requiem of the Ameri\r\n can Civil War\r\nUID:tag:localist.com\\,2008:EventInstance_51940417119907\r\nURL:https://events.stanford.edu/event/wilson-bentleys-army-of-souls-a-photo\r\n graphic-requiem-of-the-american-civil-war\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the French-Speaking Worlds: Then and Now for a talk\r\n  entitled \"Friedrich Nietzsche\\, a Poet\\, and the French Revolution\" by Gui\r\n llaume Métayer (CNRS). \\n\\nAbstract: \\nFriedrich Nietzsche took an astoundi\r\n ngly early interest in French culture and especially in the French Revoluti\r\n on. It is one of the haunting themes of his early poems\\, in particular aro\r\n und 1862. How can we understand this early fascination? What were its sourc\r\n es? Through an investigation focused mainly on the poem “Im Gefängnis” (“In\r\n  Prison”)\\, dedicated to the legendary account of the death of the Girondin\r\n s\\, we will attempt to better understand Nietzsche’s relationship with Fran\r\n ce and its history\\, while also identifying the philosophical and ideologic\r\n al implications of his poetic interpretation of it.\\n\\nBio:\\nGuillaume Méta\r\n yer is a research director at the CNRS within the CELLF (Sorbonne Universit\r\n é\\, Paris). His research focuses on the reception of the Enlightenment at t\r\n he turn of the 19th and 20th centuries\\, and especially on Friedrich Nietzs\r\n che and Anatole France and his circle\\, like the Hungarian woman writer Ott\r\n ilia Bölöni. He is also a translator of German\\, Hungarian and Slovenian po\r\n etry and the author of an essay on translation (A like in Babel\\, 2020) and\r\n  some books of poems.\\n\\nRSVP for talk by Guillaume Métayer\\n\\nHosted by th\r\n e French-Speaking Worlds: Then and Now Focal Group\\, sponsored by the Divis\r\n ion of Literatures\\, Cultures\\, and Languages Research Unit and co-sponsore\r\n d by the France-Stanford Center and Stanford Global Studies. This event is \r\n part of Stanford Global Studies’ Global Research Workshop Program.\r\nDTEND:20260213T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T010000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 216\r\nSEQUENCE:0\r\nSUMMARY:French-Speaking Worlds: \"Friedrich Nietzsche\\, a Poet\\, and the Fre\r\n nch Revolution\" by Guillaume Métayer (CNRS)\r\nUID:tag:localist.com\\,2008:EventInstance_51905501888986\r\nURL:https://events.stanford.edu/event/french-speaking-worlds-friedrich-niet\r\n zsche-a-poet-and-the-french-revolution-by-guillaume-metayercnrs\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Please join the Stanford Doerr School of Sustainability Student\r\n  & Alumni Networking Mixer for current students\\, postdocs\\, and alumni.\\n\\\r\n nThe Student & Alumni Networking Mixer is an excellent opportunity for memb\r\n ers of the SDSS community to connect\\, gain industry knowledge\\, and explor\r\n e a variety of career paths\\, while making meaningful connections.\\n\\nAgend\r\n a:\\n\\n5:00 p.m. Networking Workshop for Current Students and Postdocs\\n5:30\r\n  p.m. Reception and Alumni Mixer\\n\\nLight refreshments and appetizers will \r\n be provided. \\n\\nThis event is designed for students and postdoctoral schol\r\n ars from the Stanford Doerr School of Sustainability.\\n\\nAlumni: Register H\r\n ere\\nStudents\\, Postdocs\\, Staff: Register Here \\n\\nRegister by Thursday\\, \r\n February 5.\r\nDTEND:20260213T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T010000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Huang 300\\, Mackenzie Room\r\nSEQUENCE:0\r\nSUMMARY:SDSS Student & Alumni Networking Mixer\r\nUID:tag:localist.com\\,2008:EventInstance_51500132805255\r\nURL:https://events.stanford.edu/event/sdss-student-alumni-networking-mixer\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Michael Blyumin\\, PharmD\\, CDCES\\, will provide essential guida\r\n nce on how Medicare covers diabetes-related care and services. \\n\\nThis web\r\n inar will be presented by Michael Blyumin\\, PharmD\\, CDCES\\, who is a clini\r\n cal pharmacist and certified diabetes care and education specialist at Stan\r\n ford Health Care.\r\nDTEND:20260213T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T010000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Understanding Medicare Coverage with Diabetes\r\nUID:tag:localist.com\\,2008:EventInstance_51940405866859\r\nURL:https://events.stanford.edu/event/understanding-medicare-coverage-with-\r\n diabetes\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260213T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51757275428023\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Jeffrey J. Kripal\\, J. Newton Rayzor Professor of Philosophy an\r\n d Religious Thought at Rice University and author of The Superhumanities an\r\n d How to Think Impossibly\\n\\nPlease join us in exploring the intersections \r\n of the human\\, the superhuman\\, and the study of mind and culture.\\n\\nA rou\r\n ndtable on why the humanities matter\\, and how they should change. Lecture \r\n followed by responses from Gabriella Safran (Slavic Languages and Literatur\r\n es)\\, Elaine Fisher (Religious Studies)\\, and Matthew Wilson Smith (German \r\n Studies)\\, moderated by Amir Eshel (Comparative Literature).\\n\\nCo-sponsore\r\n d by the Division of Literatures\\, Cultures\\, and Languages\\; The Contempor\r\n ary\\; Stanford's Medical Humanities\\; and the Stanford Humanities Center\r\nDTEND:20260213T033000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:The Contemporary: The Humanities Today\r\nUID:tag:localist.com\\,2008:EventInstance_51941860409072\r\nURL:https://events.stanford.edu/event/the-contemporary-the-humanities-today\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Jeffrey J. Kripal\\, J. Newton Rayzor Professor of Philosophy an\r\n d Religious Thought at Rice University and author of The Superhumanities an\r\n d How to Think Impossibly\\, visits Stanford for two public events exploring\r\n  the intersections of the human\\, the superhuman\\, and the study of mind an\r\n d culture.\\n \\nA Garden Next Door: How One Woman Was Struck by Lightning\\, \r\n Talked to God\\, and Came Back to Dream the Future \\nWednesday\\, February 11\r\n \\, 2026 | 5:30–7:00 PM | Stanford Humanities Center\\, Watt Room and online\\\r\n nRSVP >>\\n\\nProf. Kripal will discuss his work with Elizabeth Krohn\\, who w\r\n as struck by lightning in the parking lot of her synagogue on September of \r\n 1988. They have co-authored Changed in a Flash: One Woman’s Near-Death Expe\r\n rience and How a Scholar Thinks It Empowers Us All (North Atlantic Books\\, \r\n 2018).\\n\\nThe Humanities Today \\nThursday\\, February 12\\, 2026 | 5:30–7:30 \r\n PM | Stanford Humanities Center\\, Levinthal Hall\\n\\nA roundtable on why the\r\n  humanities matter\\, and how they should change. Lecture followed by respon\r\n ses from Gabriella Safran (Slavic Languages and Literatures)\\, Elaine Fishe\r\n r (Religious Studies)\\, and Matthew Wilson Smith (German Studies)\\, moderat\r\n ed by Amir Eshel (Comparative Literature).\\n\\nCo-sponsored by the Division \r\n of Literatures\\, Cultures\\, and Languages\\; The Contemporary\\; Stanford's M\r\n edical Humanities\\; and the Stanford Humanities Center\r\nDTEND:20260213T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\r\nSEQUENCE:0\r\nSUMMARY:Two Public Events with Jeffrey J. Kripal\r\nUID:tag:localist.com\\,2008:EventInstance_51757231050405\r\nURL:https://events.stanford.edu/event/two-public-events-with-jeffrey-j-krip\r\n al\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Social Event/Reception\r\nDESCRIPTION:Interested in civic issues and the questions shaping public lif\r\n e today?\\n\\nJoin Stanford faculty and instructors for conversations that bu\r\n ild on the topics of COLLEGE 102. Civic Salons are open to all undergraduat\r\n e students\\, and refreshments are provided.\\n\\nSchedule:\\n\\nThursday\\, Janu\r\n ary 15\\, 6:00 p.m. at Castaño and CedroThursday\\, January 22\\, 6:00 p.m. at\r\n  Crothers and RobleThursday\\, January 29\\, 6:00 p.m. at Larkin and PotterTh\r\n ursday\\, February 5\\, 6:00 p.m. at Casa ZapataThursday\\, February 12\\, 6:00\r\n  p.m. at Robinson and West Florence MooreTuesday\\, February 17\\, 7:00 p.m. \r\n at DonnerThursday\\, February 26\\, 6:00 p.m. at Arroyo and PotterThursday\\, \r\n March 5\\, 6:00 p.m. at Trancos and West Florence Moore\r\nDTEND:20260213T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T020000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Civic Salons: Winter 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51785130945363\r\nURL:https://events.stanford.edu/event/civic-salons-winter-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Cur\r\n ator\\, Prints\\, Drawings\\, and Academic Engagement\\, on this special highli\r\n ghts tour of Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge.\\n\\nCu\r\n nning Folk considers magical practice\\, practitioners\\, and their persecuti\r\n on in early modern European artwork and material culture (c.1500–1750). The\r\n  term “cunning folk” typically describes wise people who knew traditional s\r\n pells and remedies believed to cure and protect. The works on paper\\, paint\r\n ing\\, and personal items on view in this intimate\\, single gallery exhibiti\r\n on more broadly explore the historical concept of “cunning” in connection t\r\n o many forms of secret magical rites and knowledge\\, from folk charms to oc\r\n cult natural philosophy to diabolic witchcraft. Early modern artists also h\r\n elped construct the idea of magical figures as a threat to the prevailing s\r\n ocial order–particularly through the rise of print culture–and here\\, a sel\r\n ection of American contemporary artworks reconjure these histories. RSVP he\r\n re.\\n\\nAll public programs at the Cantor Arts Center are always free! Space\r\n  for this program is limited\\; advance registration is recommended. \\n\\nRSV\r\n P here.\\n\\nImage: Dominique Viviant Denon (French\\, 1747–1825)\\, A Coven of\r\n  Witches (detail)\\, 18th century. Etching. Cantor Arts Center\\, Stanford Un\r\n iversity\\, gift of William Drummond\\n\\n________\\n\\nParking\\n\\nFree visitor \r\n parking is available along Lomita Drive as well as on the first floor of th\r\n e Roth Way Garage Structure\\, located at the corner of Campus Drive West an\r\n d Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. From the Palo Alto Ca\r\n ltrain station\\, the Cantor Arts Center is about a 20-minute walk or the fr\r\n ee Marguerite shuttle will bring you to campus via the Y or X lines.\\n\\nDis\r\n ability parking is located along Lomita Drive near the main entrance of the\r\n  Cantor Arts Center. Additional disability parking is located on Museum Way\r\n  and in Parking Structure 1 (Roth Way & Campus Drive). Please click here to\r\n  view the disability parking and access points.\\n\\nAccessibility Informatio\r\n n or Requests\\n\\nCantor Arts Center at Stanford University is committed to \r\n ensuring our programs are accessible to everyone. To request access informa\r\n tion and/or accommodations for this event\\, please complete this form at le\r\n ast one week prior to the event: museum.stanford.edu/access. For questions\\\r\n , please contact disability.access@stanford.edu or Kwang-Mi Ro\\, kwangmi8@s\r\n tanford.edu.\r\nDTEND:20260213T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T020000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Evening Curator Talk | Cunning Folk: Witchcraft\\, Magic\\, and Occul\r\n t Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_51518282130267\r\nURL:https://events.stanford.edu/event/evening-curator-talk-cunning-folk-wit\r\n chcraft-magic-and-occult-knowledge_feb-12\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Want to understand how LGBTQ+ visibility is used to obscure opp\r\n ression and injustice?\\n\\nJoin the Stanford Women's Community Center for th\r\n e first event of our Collective Liberation Series:\\n\\nPinkwashing 101: A Te\r\n ach-In with Mama Ganuush\\, a trans Palestinian performance artist\\, drag qu\r\n eer\\, filmmaker\\, and organizer\\, in a facilitated discussion on combating \r\n pinkwashing.\\n\\nThis teach-in will unpack the concept of pinkwashing\\, how \r\n corporations and states deploy LGBTQ+ rights language to appear progressive\r\n  while masking harmful policies and human rights abuses. \\n\\nIn this intera\r\n ctive teach-in\\, we will:\\n1. Explore the origins and history of pinkwashin\r\n g\\n2. Examine real-world examples across corporate branding and state polit\r\n ics\\n3. Center queer\\, trans\\, and Palestinian perspectives often erased fr\r\n om mainstream narratives\\n4. Build shared language to critically engage in \r\n collective liberation \\n\\nWhether you’re involved in organizing\\, curious a\r\n bout queer politics\\, or looking to deepen your analysis of power and repre\r\n sentation\\, this teach-in offers information and tools you can carry into y\r\n our communities.\\n\\n \\n\\nRSVP? Here! *Food available while supplies last* S\r\n ee you there\\, Thursday\\, February 12th\\, at 6:30 pm!\\n\\n \\n\\nCo-sponsors: \r\n Stanford's Center for Comparative Studies in Race & Ethnicity\\, Stanford's \r\n Program in Feminist Gender\\, and Sexuality Studies\\,  the Institute for Div\r\n ersity in the Arts\\, Queer Student Resources\\n\\nHosted by: Stanford Women's\r\n  Community Center. \\n\\n \\n\\nQuestions? Reach out to the Collective Liberati\r\n on Coordinator\\, lizbethz@stanford.edu.\r\nDTEND:20260213T040000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T023000Z\r\nGEO:37.425085;-122.171682\r\nLOCATION:Fire Truck House\r\nSEQUENCE:0\r\nSUMMARY:WCC Collective Liberation Series - Pinkwashing 101: A Teach-In with\r\n  Mama Ganuush\r\nUID:tag:localist.com\\,2008:EventInstance_52012279056375\r\nURL:https://events.stanford.edu/event/wcc-collective-liberation-series-pink\r\n washing-101-a-teach-in-with-mama-ganuush\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:A heart failure diagnosis doesn’t mean stopping the activities \r\n you love. Join Eldrin Lewis\\, MD\\, MPH\\, as he outlines modern approaches t\r\n o care from initial diagnostic workup to the Four Pillars of therapy—the fo\r\n undational medications for heart failure. Dr. Lewis will share essential st\r\n rategies for integrating quality of life into your care plan\\, empowering y\r\n ou to work with your doctor to prioritize your well-being and independence.\r\n \\n\\nThis webinar will be presented by Eldrin Lewis\\, MD\\, MPH\\, who is Chie\r\n f of the Division of Cardiovascular Medicine and a professor at Stanford Un\r\n iversity School of Medicine. He is an internationally recognized expert in \r\n advanced heart failure\\, heart transplant\\, and improving quality of life f\r\n or heart failure patients. As of 2024\\, he serves as president of the Weste\r\n rn States Board of the American Heart Association\\, helping steer regional \r\n efforts in prevention\\, health equity\\, and community outreach.\r\nDTEND:20260213T040000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T030000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Heart Failure: Current Concepts in Diagnosis and Management\r\nUID:tag:localist.com\\,2008:EventInstance_51941312556060\r\nURL:https://events.stanford.edu/event/heart-failure-current-concepts-in-dia\r\n gnosis-and-management\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:Film screening of Khata: Poison or Purity?\\, followed by a disc\r\n ussion with director Dr. Huatse Gyal and Prof. James Gentry.\\n\\nKhata: Pois\r\n on or Purity?\\n\\nAcross the Tibetan plateau\\, Khata (ceremonial scarves) an\r\n d prayer flags flutter in the thin air\\, representing blessings\\, devotion\\\r\n , and sincerity. However\\, these sacred items now have taken on a darker le\r\n gacy. Made from petroleum-based polyester\\, discarded prayer flags and Khat\r\n a litter the grasslands\\, harming livestock and contaminating rivers. How d\r\n id these revered objects become an environmental threat? Who produces them\\\r\n , and from what materials? Who is primarily responsible for this issue? Thi\r\n s ethnographic documentary film explores the journey of Khata from mass pro\r\n duction to waste in an era dominated by synthetic chemical fibers. Through \r\n the eyes of Indigenous Tibetan pastoralists witnessing the death of their a\r\n nimals and the contamination of their landscapes\\, the film raises an urgen\r\n t question: Can something be both holy and harmful? \\n\\nAbout the director:\r\n \\n\\nDr. Huatse Gyal is a filmmaker and an Assistant Professor of Anthropolo\r\n gy at Rice University. He has published peer-reviewed articles in internati\r\n onal journals\\, including Critical Asian Studies\\, Nomadic Peoples\\, and At\r\n eliers d’anthropologie. Dr. Gyal is the co-editor of the first English volu\r\n me titled Resettlement among Tibetan Nomads in China (2015) and recently co\r\n -edited a special issue called Translating Across the Bardo: Centering the \r\n Richness of Tibetan Language in Tibetan Studies (2024). In 2023\\, he releas\r\n ed his first feature-length documentary film titled Khata: Poison or Purity\r\n ? Dr. Gyal is enthusastic about multimodal forms of knowledge production an\r\n d looks forward to collaborating with students and colleagues who share thi\r\n s passion.\\n\\nProf. James Gentry is Assistant Professor of Religious Studie\r\n s. He specializes in Tibetan Buddhism\\, with particular focus on the litera\r\n ture and history of its Tantric traditions. He is the author of Power Objec\r\n ts in Tibetan Buddhism: The Life\\, Writings\\, and Legacy of Sokdokpa Lodrö \r\n Gyeltsen\\, which examines the roles of Tantric material and sensory objects\r\n  in the lives and institutions of Himalayan Buddhists.\r\nDTEND:20260213T043000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T030000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:Huatse Gyal: \"'Khata: Poison or Purity?' Documentary Film Screening\r\n  and Discussion\r\nUID:tag:localist.com\\,2008:EventInstance_51455473003447\r\nURL:https://events.stanford.edu/event/huatse-gyal-khata-poison-or-purity-do\r\n cumentary-film-screening\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260213\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264963306\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260213\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355487709\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260213\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101470662\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260213\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019652007\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260214T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T160000Z\r\nGEO:37.445593;-122.162327\r\nLOCATION:Fidelity Office Palo Alto CA\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Fidelity Office in Palo Alto) (\r\n By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525101830060\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-fidelity-office-in-palo-alto-by-appointment-only-8879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Global Sustainability Challenge is an ambitious new initiat\r\n ive led by the Stanford Doerr School of Sustainability in collaboration wit\r\n h leading universities around the world\\, including including Technical Uni\r\n versity of Munich\\, IIT Bombay\\, The Hong Kong University of Science & Tech\r\n nology\\, Zhejiang University\\, Imperial College London\\, and more. Our miss\r\n ion is to create a global platform to mobilize college students worldwide t\r\n o develop real-world sustainability solutions for their communities. \\n\\nWe\r\n  are pleased to host the Americas Finals on Feb. 13\\, where finalist teams \r\n from North and South America will showcase their work. Watch the livestream\r\n  for key moments from the Americas Finals. \\n\\nOpening remarks: https://www\r\n .youtube.com/live/klDyGt_Fqww?si=quujxcsE8Y_dEPhm\\n\\n8:00 a.m. – 8:15 a.m. \r\n Opening Remarks\\n\\n     Arun Majumdar\\, Dean\\, Stanford Doerr School of Sus\r\n tainability\\n\\n8:15 a.m. – 8:45 a.m. Global Sustainability Challenge: Overv\r\n iew and Inaugural Year Highlights \\n\\n     Parul Gupta\\, Managing Director\\\r\n , Mobilization \\n\\n     Nidhi Gupta\\, Global Sustainability Challenge Progr\r\n am Lead\\, Stanford Doerr School of Sustainability\\n\\nFireside chat and awar\r\n ds ceremony: https://youtube.com/live/6c_GcLUqww8\\n\\n3:00 p.m. –  3:50 p.m.\r\n  Fireside Chat: Mobilizing Change for Sustainability\\n\\n     Sarah Soule\\, \r\n Dean\\, Stanford Graduate School of Business\\n\\n     Dave Weinstein\\, Associ\r\n ate Dean\\, External Education & Mobilization\\, Stanford Doerr School of Sus\r\n tainability\\n\\n4:00 p.m. –  4:30 p.m. Award ceremony & Closing Remarks \\n\\n\r\n      Ann Doerr\\, Board Chair\\, Khan Academy\\n\\n     Jonathan Levin\\, Presid\r\n ent\\, Stanford University\r\nDTEND:20260214T001500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T160000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\r\nSEQUENCE:0\r\nSUMMARY:Global Sustainability Challenge\r\nUID:tag:localist.com\\,2008:EventInstance_51968265006076\r\nURL:https://events.stanford.edu/event/global-sustainability-challenge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260213T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353478509\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260214T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382736544\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:To mark the fifteen-year anniversary of Egypt's January 25 Upri\r\n sing\\, CDDRL's Program on Arab Reform and Development (ARD) invites you to \r\n a panel discussing major findings from the recently released edited volume\\\r\n , Egypt's New Authoritarian Republic\\, edited by Robert Springborg and Abde\r\n l-Fattah Mady and published by Lynne Rienner Publishers (2025).\\n\\nMODERATO\r\n R: Hesham Sallam\\n\\nSPEAKERS:\\n\\nRobert SpringborgHossam el-HamalawyMay Dar\r\n wich\r\nDTEND:20260213T191500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Book Launch: Egypt’s New Authoritarian Republic\r\nUID:tag:localist.com\\,2008:EventInstance_51888496680868\r\nURL:https://events.stanford.edu/event/book-launch-egypts-new-authoritarian-\r\n republic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Roses are red\\, Matcha is green\\, and Valentine’s Day is near! \r\n Come stop by the A3C and take time to show gratitude for loved ones. The CS\r\n T & A3C will provide arts and craft supplies to write letters\\, make cards\\\r\n , and create self-affirmations. So come join us and sip on matcha while sho\r\n wing love to yourself and loved ones.\r\nDTEND:20260213T200000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T180000Z\r\nGEO:37.424754;-122.169821\r\nLOCATION:A3C Couchroom\r\nSEQUENCE:0\r\nSUMMARY:So Matcha Love\r\nUID:tag:localist.com\\,2008:EventInstance_51968911649099\r\nURL:https://events.stanford.edu/event/so-matcha-love\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:In part two of our LDW Wikidata Edit-a-thon series\\, participan\r\n ts will do a deep dive into one of Stanford’s collections: the Piano Roll A\r\n rchive\\, part of the Archive of Recorded Sound. Participants will add metad\r\n ata about piano roll performers to Wikidata. A brief overview of Wikidata w\r\n ill be provided before learning about this unique Stanford collection\\, and\r\n  how it benefits from discovery in Wikidata\\, an open\\, multilingual struct\r\n ured knowledge base that can be read and edited by both humans and machines\r\n  and is made by people like you. We will learn and discuss the collection\\,\r\n  review relevant data as a group\\, and then edit and add to Wikidata in thi\r\n s 2-hour hands-on session.\\n\\nFriday\\, February 13\\, 2026\\, 11am - 1pm\\n\\nJ\r\n oin us in-person in the IC Classroom\\, Green Library or join us over Zoom\\n\r\n \\nRegister to attend the event in person: spots are open to current Stanfor\r\n d Affiliates only.\\n\\nPlease create an account in advance.\\n\\nThis is part \r\n of a series of workshops for Love Data Week\\, an annual festival highlighti\r\n ng topics\\, opportunities and services relevant to data in research. \\n\\nFo\r\n r those attending the in-person workshop\\, please bring your Stanford ID ca\r\n rd/mobile ID to enter the library. \\n\\nWe will be taking photos at this eve\r\n nt for publicity purposes. Your presence at this event constitutes consent \r\n to be photographed unless you express otherwise.\r\nDTEND:20260213T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T190000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Hobach Hall\\, Classroom 118 (IC Classr\r\n oom)\r\nSEQUENCE:0\r\nSUMMARY:2026 Wikidata Edit-a-thon: Performers from the Piano Roll Archive\r\nUID:tag:localist.com\\,2008:EventInstance_51506959995081\r\nURL:https://events.stanford.edu/event/2026-wikidata-edit-a-thon-performers-\r\n from-the-piano-roll-archive\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260214T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114927035\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260213T200000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802447101\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260213T203000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699818162\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Performance\r\nDESCRIPTION:​The Stanford Doerr School of Sustainability (SDSS)'s Access\\, \r\n Belonging & Community (ABC) Office invites you to our Lunar New Year Coffee\r\n  Convo on Friday\\, February 13 from 11:30–12:30pm in the Hartley Conference\r\n  Room and Mitchell Patio. We'll gather to celebrate\\, connect\\, and welcome\r\n  the year of the horse together.\\n\\n​Lunar New Year is one of the most impo\r\n rtant and widely celebrated holidays across East\\, Southeast\\, and parts of\r\n  South Asia. Rooted in centuries-old traditions\\, it marks the beginning of\r\n  the lunar calendar and is a time for renewal\\, family\\, gratitude\\, and th\r\n e sharing of good fortune. Across cultures\\, Lunar New Year is honored thro\r\n ugh food\\, storytelling\\, music\\, gifts\\, and rituals meant to bring health\r\n \\, prosperity\\, and joy in the year ahead.\\n\\n​We’re excited to have repres\r\n entation from the Asian American Graduate Student Association and to hear f\r\n rom Jennifer Lee\\, (Graduate Student in the East Asian Studies and Modern T\r\n hought and Literature Programs) who will share information about the Asian \r\n American Activities Center and the work done by staff and students on campu\r\n s and in the community. \\n\\n​At 12:00pm\\, step outside to the Mitchell Pati\r\n o for a special performance by the Stanford Lion Dance Club. Founded in 201\r\n 9\\, the Stanford Lion Dance Club  is an Asian-American organization dedicat\r\n ed to spreading good luck\\, sharing blessings\\, and raising awareness about\r\n  cultural heritage through performance. Lion dance is a vibrant and powerfu\r\n l tradition often featured during Lunar New Year celebrations\\, combining d\r\n ance\\, costumes\\, martial arts\\, music\\, and acting. Originating in China\\,\r\n  lion dance has spread across many regions\\, including Vietnam\\, Korea\\, Si\r\n ngapore\\, Malaysia\\, and Indonesia\\, evolving into many distinct regional s\r\n tyles. The performance is meant to invite good fortune and positive energy \r\n for the year ahead.\\n\\n​We’ll also be sharing red envelopes\\, giving away f\r\n un prizes\\, and serving coffee from Phin Cafe\\, a beloved Asian-American-ow\r\n ned brand.\\n\\n​Come for the coffee\\, and celebrate community\\, tradition\\, \r\n and new beginnings with us. All are welcome. 🧧✨\\n\\n​Program Itinerary\\n\\n​1\r\n 1:30-12pm : Coffee Convo Social with red envelopes\\, fun prizes and opportu\r\n nity to learn about the Asian American Graduate Student Association\\, the A\r\n sian American Activities Center and Stanford Lion Dance Club members\\n\\n​12\r\n :00-12:05pm: Transition into Mitchell Patio for Stanford Lion Dance Club pe\r\n rformance \\n\\n​12:05-12:15pm: Stanford Lion Dance Club Performance\\n\\n​12:1\r\n 5-12:30pm: Continue with coffee convo social\r\nDTEND:20260213T203000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T193000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Room \r\nSEQUENCE:0\r\nSUMMARY:Welcoming the Lunar New Year with the Stanford Lion Dance Club \r\nUID:tag:localist.com\\,2008:EventInstance_51967040678991\r\nURL:https://events.stanford.edu/event/welcoming-the-lunar-new-year-with-the\r\n -stanford-lion-dance-club\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Title: Flood Projections Across Scales: A Local\\, Regional\\, an\r\n d Continental Approach\\n\\nAbstract: Flooding is one of the most damaging na\r\n tural hazards worldwide\\, with increasing risk driven by climate‑induced ch\r\n anges and exposure in vulnerable communities. Meeting emerging design and p\r\n lanning challenges requires scalable flood modeling tools that incorporate \r\n future climate conditions while quantifying the uncertainty inherent in the\r\n se projections. Typically\\, national flood information often lacks sufficie\r\n nt spatial detail\\, does not reflect nonstationary climate influences\\, and\r\n  provides deterministic outputs that obscure uncertainty that hinder effect\r\n ive and equitable risk management.\\n\\nTo bridge this gap\\, this seminar int\r\n roduces an integrated modeling framework designed to quantify how flood haz\r\n ard and risk may evolve under warming across multiple spatial scales. The f\r\n ramework combines high‑resolution rainfall–runoff modeling\\, two‑dimensiona\r\n l hydraulic simulations\\, and pseudo global warming scenarios to generate c\r\n onsistent flood estimates across the contiguous United States. A regional a\r\n pplication in Iowa further evaluates how uncertainties in climate model for\r\n cing propagate through hydrologic and hydraulic processes\\, revealing nonli\r\n near sensitivities. This has significant implications for engineering risk \r\n assessment\\, scenario selection\\, and adaptation planning.\\n\\nAn analysis f\r\n or the northeastern United States applies large ensembles of flood inundati\r\n on simulations to quantify interval variability and develop probabilistic b\r\n ounds on potential future flood inundation. Collectively\\, these efforts de\r\n monstrate how physically based models\\, modern climate datasets\\, and uncer\r\n tainty‑aware methods can support resilient infrastructure design\\, hazard m\r\n itigation\\, and community‑level adaptation in a changing climate.\\n\\nAlexan\r\n der Michalek is a fifth‑year Ph.D. candidate in Civil and Environmental Eng\r\n ineering at Princeton University\\, where he studies how climate change will\r\n  reshape the frequency\\, extent\\, and impacts of flooding across different \r\n spatial scales. His research combines large‑scale hydrologic and hydraulic \r\n modeling with various climate datasets to evaluate flood hazard and impacts\r\n  under present and future conditions. At Princeton\\, he is a recipient of t\r\n he Wallace Memorial Fellowship\\, one of the Graduate School’s highest honor\r\n s. His broader research interests include continental‑scale flood inundatio\r\n n modeling\\, climate change impacts on hydrologic extremes\\, uncertainty qu\r\n antification\\, and the development of transparent\\, scalable tools to suppo\r\n rt climate‑resilient infrastructure and community‑level decision making. He\r\n  holds a B.S. and M.S. in Civil Engineering from the University of Kansas.\r\nDTEND:20260213T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 111\r\nSEQUENCE:0\r\nSUMMARY:Civil & Environmental Engineering Seminar Series\r\nUID:tag:localist.com\\,2008:EventInstance_52001795914771\r\nURL:https://events.stanford.edu/event/civil-environmental-engineering-semin\r\n ar-series-6994\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:With Guest Speaker Allison Carruth (Professor of American Studi\r\n es and Environmental Studies\\, Princeton University)\\n\\nIn this century\\, c\r\n onsequential visions of climate action have emerged from the domain of Big \r\n Tech: self-driving electric cars fueled by rare earth minerals\\, global coo\r\n ling brought about by releasing sulfur into the stratosphere\\, floating cit\r\n ies built from whole cloth to weather rising seas. This techno-utopian para\r\n digm is now turning to the ocean\\, at the same time that marine scientists \r\n and stewards are reimagining established approaches to oceanic protection\\,\r\n  restoration and rewilding. Such imaginaries and investments are the subjec\r\n t of “The Ocean Remade.” Building on the framework of Carruth’s book Novel \r\n Ecologies: Nature Remade and the Illusions of Tech (2025)\\, “The Ocean Rema\r\n de” documents Pacific Ocean rewilding and geoengineering endeavors as they \r\n are unfolding in real-time and explores the stories that variously advance\\\r\n , animate and oppose them. These case studies include Indigenous-led marine\r\n  protected areas\\, university-housed captive breeding experiments\\, large-s\r\n cale artificial reef developments\\, marine cloud start-ups and deep sea min\r\n ing ventures. “The Ocean Remade” thus moves from intertidal to benthic wate\r\n rs and from California’s coastline to the Clarion-Clipperton zone and the M\r\n ariana Trench. Opening with Richard Powers’ novel Playground and closing wi\r\n th Craig Santos Perez’s poetry volume Call this Mutiny (both published in 2\r\n 024)\\, the keynote will offer an extended comparison of two\\, very differen\r\n t examples of ocean remaking: on the one hand\\, a kelp forest restoration e\r\n xperiment in the Channel Islands that is running out of funding and\\, on th\r\n e other\\, the deep sea mining gambits of a Vancouver-based\\, Silicon Valley\r\n -launched corporation called The Metals Company.\\n\\nRSVP HERE for Research \r\n Talks: The Ocean Remade\r\nDTEND:20260213T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Room 216\r\nSEQUENCE:0\r\nSUMMARY:EHP: Research Talks: The Ocean Remade\r\nUID:tag:localist.com\\,2008:EventInstance_51907997900632\r\nURL:https://events.stanford.edu/event/ehp-research-talks-the-ocean-remade\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260214T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561109849\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Discover the vibrant flavors and proven health benefits of the \r\n Mediterranean way of eating! Known for supporting heart health and longevit\r\n y\\, the Mediterranean diet emphasizes fresh\\, plant-based foods\\, healthy f\r\n ats like olive oil\\, whole grains\\, and lean proteins such as fish and poul\r\n try—all while keeping red meat and added sugars to a minimum.\\n\\nIn this en\r\n gaging virtual cooking demonstration\\, you’ll learn how to prepare a simple\r\n  yet delicious meal inspired by the Mediterranean region. As the instructor\r\n  guides you through each step\\, you’ll gain practical tips on how to incorp\r\n orate these nourishing ingredients into your everyday cooking and understan\r\n d their relation to heart health.\\n\\nThroughout the class\\, the instructor \r\n will share easy ingredient swaps and protein options to accommodate a varie\r\n ty of dietary needs and preferences—so you can tailor each dish to suit you\r\n r lifestyle.\\n\\nBy the end of the session\\, you’ll walk away with a collect\r\n ion of wholesome\\, flavorful recipes that you and your family will love—and\r\n  your heart will thank you for. A complete recipe packet\\, including ingred\r\n ient lists and equipment notes\\, will be provided afterward so you can recr\r\n eate these Mediterranean-inspired meals in your own kitchen.\\n\\nThis class \r\n will be recorded and a one-week link to the recording will be shared with a\r\n ll registered participants. To receive incentive points\\, attend at least 8\r\n 0% of the live session or listen to the entire recording within one week.  \r\n Request disability accommodations and access info.\\n\\nInstructor: Lisa Robe\r\n rts\\, M.Phil.\\, is a culinary archaeologist\\, chef\\, and founder of Lisa Ro\r\n berts Health\\, Nutrition & Lifestyle Advisory. She teaches at Stanford Heal\r\n thy Living\\, NYU\\, and Canyon Ranch\\, and holds degrees from Oxford\\, Tufts\r\n \\, and The French Culinary Institute.\\n\\nClass details are subject to chang\r\n e.\r\nDTEND:20260213T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Heart Healthy Mediterranean\r\nUID:tag:localist.com\\,2008:EventInstance_51388530656969\r\nURL:https://events.stanford.edu/event/heart-healthy-mediterranean-7225\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:In this roundtable discussion\\, experts on the Arctic region wi\r\n ll present on topics including: myths in news about the Arctic\\; how histor\r\n ical methods\\, scholarship\\, and materials contribute to current conversati\r\n ons on the Arctic\\; climate emergency effects\\; resource extraction and the\r\n  relevance of the region in both historical and contemporary contexts.\\n\\nP\r\n anelists inclue:\\nAlina Bykova\\, Stanford University\\;\\nGabriella Gricius\\,\r\n  University of Konstanz\\;\\nOlivia Wynne Houck\\, MIT\\n\\nThis roundtable will\r\n  be moderated by James Goldgeier\\, Research Affiliate at the Center for Int\r\n ernational Security and Cooperation.\\n\\nPlease RSVP here.\\n\\nThis event is \r\n sponsored by Stanford Global Studies’ Oceanic Imaginaries\\, a multi-year in\r\n itiative that adopts the world’s oceans as an analytical framework for adva\r\n ncing cross-regional\\, interdisciplinary research and activities addressing\r\n  timely global topics.\\n\\nAbout the speakers:\\n\\nAlina Bykova is a PhD cand\r\n idate in Russian and East European History at Stanford University. Her rese\r\n arch interests include Arctic and Soviet environmental history with a focus\r\n  on natural resources and industry. Alina is writing her dissertation on th\r\n e history of energy and extraction on Svalbard\\, Norway. In 2025-2026\\, Ali\r\n na is a predoctoral fellow at the Clements Center for National Security at \r\n the University of Texas at Austin. She also works as a senior research asso\r\n ciate and editor-in-chief at The Arctic Institute\\, an interdisciplinary th\r\n ink tank.\\n\\nAlina earned her masters in European and Russian Affairs from \r\n the Munk School of Global Affairs and Public Policy at the University of To\r\n ronto in 2019. Her masters thesis was about the rise and fall of Soviet min\r\n ing settlements on Svalbard. Prior to her work in academia\\, she completed \r\n a Bachelor of Journalism at Toronto Metropolitan University and worked as a\r\n  breaking news reporter at the Toronto Star\\, Canada’s largest newspaper.\\n\r\n \\nGabriella Gricius is a Postdoctoral Fellow at the University of Konstanz \r\n and a Fellow and the Media Coordinator with the North American and Arctic D\r\n efence and Security Network (NAADSN). She is also a Senior Research Associa\r\n te at the Arctic Institute. At the University of Konstanz\\, she is currentl\r\n y working on a project covering Nordic security community formation and the\r\n  conceptualization and coordination of responses to hybrid threats to criti\r\n cal infrastructure in the European Arctic region.\\n\\nShe received her Ph.D.\r\n  from Colorado State University's Political Science Department where her di\r\n ssertation explored the prevalence of low-tension discourse in Greenland\\, \r\n Svalbard\\, the Northern Sea Route\\, and the Northwest Passage. Her research\r\n  interests broadly cover international relations\\, Arctic security\\, the po\r\n tential for desecuritization during great power competition\\, and the role \r\n of experts in security decision-making processes.\\n\\nOlivia Wynne Houck is \r\n a PhD candidate in the History of Architecture program at MIT\\, where she f\r\n ocuses on the intersection of the built environment\\, diplomacy\\, and geopo\r\n litics during the early Cold War. She is particularly interested in the int\r\n erplay between the origins of NATO\\, American foreign policy\\, technology\\,\r\n  and infrastructure in relation to the European and North American Arctic r\r\n egions. Her dissertation investigates how the North Atlantic region became \r\n a strategic territory\\, in large part through the American desire for\\, and\r\n  fear of\\, military bases on the islands of Greenland and Iceland during th\r\n e 1940s. The resulting territory\\, both infrastructurally and diplomaticall\r\n y\\, would form the basis of the North Atlantic Treaty Organization.\\n\\nShe \r\n is a Research Associate at The Arctic Institute and a Research Fellow with \r\n the North American and Arctic Defense and Security Network. She has publish\r\n ed a book chapter on the geopolitics of Svalbard\\, and has edited two serie\r\n s for The Arctic Institute on ‘NATO in the Arctic\\,’ with Alina Bykova\\, an\r\n d ‘Infrastructure in the Arctic.’ She holds an M.A. in Architectural Histor\r\n y from the University of Virginia\\, and a Postgraduate Diploma in ‘Small St\r\n ates Studies’ from the University of Iceland.\\n\\nJames Goldgeier is a Resea\r\n rch Affiliate at the Center for International Security and Cooperation and \r\n a Professor at the School of International Service at American University\\,\r\n  where he served as Dean from 2011-17. From 2019-2025\\, he was a Visiting F\r\n ellow at the Brookings Institution. In 2018-19\\, he held the Library of Con\r\n gress Chair in U.S.-Russia Relations at the John W. Kluge Center and was a \r\n visiting senior fellow at the Council on Foreign Relations. Prior to joinin\r\n g American University\\, he was a professor of political science and interna\r\n tional affairs at George Washington University\\, where from 2001-05 he dire\r\n cted the Elliott School’s Institute for European\\, Russian\\, and Eurasian S\r\n tudies. He also taught at Cornell University\\, and has held a number of pub\r\n lic policy appointments and fellowships\\, including Director for Russian\\, \r\n Ukrainian\\, and Eurasian Affairs on the National Security Council Staff\\, W\r\n hitney Shepardson Senior Fellow at the Council on Foreign Relations\\, Henry\r\n  A. Kissinger Chair at the Library of Congress\\, and Edward Teller National\r\n  Fellow at the Hoover Institution.\\n\\nDr. Goldgeier has authored or edited \r\n six books\\, most recently Evaluating NATO Enlargement: From Cold War Victor\r\n y to the Russia-Ukraine War (2023)\\, co-edited with Joshua Shifrinson. He i\r\n s the recipient of the Edgar S. Furniss book award in national and internat\r\n ional security and co-recipient of the Georgetown University Lepgold Book P\r\n rize in international relations. Dr. Goldgeier is a senior adviser to the B\r\n ridging the Gap initiative\\, which promotes scholarly contributions to publ\r\n ic debate and decision making on global challenges and U.S. foreign policy\\\r\n , and is co-editor of the Oxford University Press Bridging the Gap Book Ser\r\n ies.\\n\\nDr. Goldgeier is past president of the Association of Professional \r\n Schools of International Affairs (2015-2017). He received his M.A. and PhD \r\n in Political Science from the University of California Berkeley and his A.B\r\n .\\, magna cum laude in Government\\, from Harvard University.\r\nDTEND:20260213T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Rm. 123\r\nSEQUENCE:0\r\nSUMMARY:Hot Ice: Security\\, Governance and Environment in the Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_52032377297118\r\nURL:https://events.stanford.edu/event/hot-ice-security-governance-and-envir\r\n onment-in-the-arctic-2892\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:In this roundtable discussion\\, experts on the Arctic region wi\r\n ll present on topics including: myths in news about the Arctic\\; underdiscu\r\n ssed topics\\; how historical methods\\, scholarship\\, and materials contribu\r\n te to current conversations on the Arctic\\; climate emergency effects\\; res\r\n ource extraction and the relevance of the region. \\n\\nPanelists inclue:\\nAl\r\n ina Bykova\\, Stanford University\\;\\nGabriella Gricius\\, University of Konst\r\n anz\\;\\nOlivia Wynne Houck\\, MIT\\n\\nThis roundtable will be moderated by Jam\r\n es Goldgeier\\, Research Affiliate at the Center for International Security \r\n and Cooperation.\\n\\nPlease RSVP here.\\n\\nThis event is sponsored by Stanfor\r\n d Global Studies’ Oceanic Imaginaries\\, a multi-year initiative that adopts\r\n  the world’s oceans as an analytical framework for advancing cross-regional\r\n \\, interdisciplinary research and activities addressing timely global topic\r\n s.\\n\\nAbout the speakers:\\n\\nAlina Bykova is a PhD candidate in Russian and\r\n  East European History at Stanford University. Her research interests inclu\r\n de Arctic and Soviet environmental history with a focus on natural resource\r\n s and industry. Alina is writing her dissertation on the history of energy \r\n and extraction on Svalbard\\, Norway. In 2025-2026\\, Alina is a predoctoral \r\n fellow at the Clements Center for National Security at the University of Te\r\n xas at Austin. She also works as a senior research associate and editor-in-\r\n chief at The Arctic Institute\\, an interdisciplinary think tank.\\n\\nAlina e\r\n arned her masters in European and Russian Affairs from the Munk School of G\r\n lobal Affairs and Public Policy at the University of Toronto in 2019. Her m\r\n asters thesis was about the rise and fall of Soviet mining settlements on S\r\n valbard. Prior to her work in academia\\, she completed a Bachelor of Journa\r\n lism at Toronto Metropolitan University and worked as a breaking news repor\r\n ter at the Toronto Star\\, Canada’s largest newspaper.\\n\\nGabriella Gricius \r\n is a Postdoctoral Fellow at the University of Konstanz and a Fellow and the\r\n  Media Coordinator with the North American and Arctic Defence and Security \r\n Network (NAADSN). She is also a Senior Research Associate at the Arctic Ins\r\n titute. At the University of Konstanz\\, she is currently working on a proje\r\n ct covering Nordic security community formation and the conceptualization a\r\n nd coordination of responses to hybrid threats to critical infrastructure i\r\n n the European Arctic region.\\n\\nShe received her Ph.D. from Colorado State\r\n  University's Political Science Department where her dissertation explored \r\n the prevalence of low-tension discourse in Greenland\\, Svalbard\\, the North\r\n ern Sea Route\\, and the Northwest Passage. Her research interests broadly c\r\n over international relations\\, Arctic security\\, the potential for desecuri\r\n tization during great power competition\\, and the role of experts in securi\r\n ty decision-making processes.\\n\\nOlivia Wynne Houck is a PhD candidate in t\r\n he History of Architecture program at MIT\\, where she focuses on the inters\r\n ection of the built environment\\, diplomacy\\, and geopolitics during the ea\r\n rly Cold War. She is particularly interested in the interplay between the o\r\n rigins of NATO\\, American foreign policy\\, technology\\, and infrastructure \r\n in relation to the European and North American Arctic regions. Her disserta\r\n tion investigates how the North Atlantic region became a strategic territor\r\n y\\, in large part through the American desire for\\, and fear of\\, military \r\n bases on the islands of Greenland and Iceland during the 1940s. The resulti\r\n ng territory\\, both infrastructurally and diplomatically\\, would form the b\r\n asis of the North Atlantic Treaty Organization.\\n\\nShe is a Research Associ\r\n ate at The Arctic Institute and a Research Fellow with the North American a\r\n nd Arctic Defense and Security Network. She has published a book chapter on\r\n  the geopolitics of Svalbard\\, and has edited two series for The Arctic Ins\r\n titute on ‘NATO in the Arctic\\,’ with Alina Bykova\\, and ‘Infrastructure in\r\n  the Arctic.’ She holds an M.A. in Architectural History from the Universit\r\n y of Virginia\\, and a Postgraduate Diploma in ‘Small States Studies’ from t\r\n he University of Iceland.\\n\\nJames Goldgeier is a Research Affiliate at the\r\n  Center for International Security and Cooperation and a Professor at the S\r\n chool of International Service at American University\\, where he served as \r\n Dean from 2011-17. From 2019-2025\\, he was a Visiting Fellow at the Brookin\r\n gs Institution. In 2018-19\\, he held the Library of Congress Chair in U.S.-\r\n Russia Relations at the John W. Kluge Center and was a visiting senior fell\r\n ow at the Council on Foreign Relations. Prior to joining American Universit\r\n y\\, he was a professor of political science and international affairs at Ge\r\n orge Washington University\\, where from 2001-05 he directed the Elliott Sch\r\n ool’s Institute for European\\, Russian\\, and Eurasian Studies. He also taug\r\n ht at Cornell University\\, and has held a number of public policy appointme\r\n nts and fellowships\\, including Director for Russian\\, Ukrainian\\, and Eura\r\n sian Affairs on the National Security Council Staff\\, Whitney Shepardson Se\r\n nior Fellow at the Council on Foreign Relations\\, Henry A. Kissinger Chair \r\n at the Library of Congress\\, and Edward Teller National Fellow at the Hoove\r\n r Institution.\\n\\nDr. Goldgeier has authored or edited six books\\, most rec\r\n ently Evaluating NATO Enlargement: From Cold War Victory to the Russia-Ukra\r\n ine War (2023)\\, co-edited with Joshua Shifrinson. He is the recipient of t\r\n he Edgar S. Furniss book award in national and international security and c\r\n o-recipient of the Georgetown University Lepgold Book Prize in internationa\r\n l relations. Dr. Goldgeier is a senior adviser to the Bridging the Gap init\r\n iative\\, which promotes scholarly contributions to public debate and decisi\r\n on making on global challenges and U.S. foreign policy\\, and is co-editor o\r\n f the Oxford University Press Bridging the Gap Book Series.\\n\\nDr. Goldgeie\r\n r is past president of the Association of Professional Schools of Internati\r\n onal Affairs (2015-2017). He received his M.A. and PhD in Political Science\r\n  from the University of California Berkeley and his A.B.\\, magna cum laude \r\n in Government\\, from Harvard University.\r\nDTEND:20260213T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Rm. 123\r\nSEQUENCE:0\r\nSUMMARY:Hot Ice: Security\\, Governance and Environment in the Arctic \r\nUID:tag:localist.com\\,2008:EventInstance_51763551057919\r\nURL:https://events.stanford.edu/event/hot-ice-security-governance-and-envir\r\n onment-in-the-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:\"Rebuilding Democracy in Venezuela\" is a four-part webinar seri\r\n es hosted by CDDRL's Democracy Action Lab that examines Venezuela’s uncerta\r\n in transition to democracy through the political\\, economic\\, security\\, an\r\n d justice-related challenges that will ultimately determine its success. Mo\r\n ving beyond abstract calls for change\\, the series will offer a practical\\,\r\n  sequenced analysis of what a democratic opening in Venezuela would realist\r\n ically require\\, drawing on comparative experiences from other post-authori\r\n tarian transitions.\\n\\nVenezuela stands at a critical juncture. Following N\r\n icolás Maduro's removal in January 2026\\, the question facing Venezuelan de\r\n mocratic actors and international partners is no longer whether a transitio\r\n n should occur\\, but how it could realistically unfold and what risks may u\r\n ndermine it.\\n\\nThis first webinar in the Democracy Action Lab’s \"Rebuildin\r\n g Democracy in Venezuela\" series examines the political foundations of demo\r\n cratic transition in Venezuela. The discussion will focus on the institutio\r\n nal and strategic constraints shaping a potential democratic opening\\, the \r\n priorities democratic forces should consider in the early stages of transit\r\n ion\\, and the lessons that comparative experiences — from Eastern Europe an\r\n d other post-authoritarian contexts — offer for Venezuela today.\\n\\nPanelis\r\n ts will assess practical pathways toward democratic governance\\, highlighti\r\n ng both the opportunities and the blind spots embedded in prevailing transi\r\n tion strategies.\\n\\nSPEAKERS\\n\\nJosé Ramón Morales-Arilla\\, Research Profes\r\n sor at Tecnológico de Monterrey's Graduate School of Government and Public \r\n TransformationThe Challenges of the Venezuelan Transition\\n Larry Diamond\\,\r\n  Mosbacher Senior Fellow in Global Democracy at the Freeman Spogli Institut\r\n e for International Studies\\, and William L. Clayton Senior Fellow at the H\r\n oover InstitutionChallenges for Democratization in Comparative Perspective\\\r\n n Kathryn Stoner\\, Mosbacher Director of CDDRL and Satre Family Senior Fell\r\n ow at the Freeman Spogli Institute for International StudiesLessons for Ven\r\n ezuela from Eastern Europe\\n Moderator: Héctor Fuentes\\, Visiting Scholar a\r\n t CDDRL\r\nDTEND:20260213T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Rebuilding Democracy in Venezuela: Political Challenges and Pathway\r\n s Forward\r\nUID:tag:localist.com\\,2008:EventInstance_52029814395943\r\nURL:https://events.stanford.edu/event/rebuilding-democracy-in-venezuela-pol\r\n itical-challenges-and-pathways-forward\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:The Geophysics and the Earth and Planetary Sciences Departments\r\n  are pleased to once again present geode smashing! Please join us on the Mi\r\n tchell Earth Sciences Building Patio on Friday\\, Feb. 13 from 12:30pm-2:30p\r\n m\\, for a chance to smash a geode with a rock hammer (and proper PPE) while\r\n  learning about Earth Science & Sustainability majors offered by the Doerr \r\n School and enjoying a delicious lunch from Tacos Mi Tierra Caliente. This i\r\n s event is free\\, open to students of any major\\, and no registration is re\r\n quired.\\n\\nThis event is co-sponsored by the Geophysics and Earth and Plane\r\n tary Sciences Departments.\r\nDTEND:20260213T223000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T203000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Patio\r\nSEQUENCE:0\r\nSUMMARY:Want to Smash Geodes? Learn about Earth Sciences Majors\r\nUID:tag:localist.com\\,2008:EventInstance_52004874011118\r\nURL:https://events.stanford.edu/event/geode-smashing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260213T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682817419\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:In Bêtes Noires\\, Lauren Derby explores storytelling traditions\r\n  among the people of Haiti and the Dominican Republic\\, focusing on shape-s\r\n hifting spirit demons called baka/bacá. Drawing on interviews with and life\r\n  stories of residents in a central Haitian-Dominican frontier town\\, Derby \r\n contends that bacás—hot spirits from the sorcery side of vodou/vodú that pr\r\n esent as animals and generate wealth for their owners—are a manifestation o\r\n f what Dominicans call the fukú de Colón\\, the curse of Columbus. The dogs\\\r\n , pigs\\, cattle\\, and horses that Columbus brought with him are the only ty\r\n pes of animals that bacás become. As instruments of Indigenous dispossessio\r\n n\\, these animals and their spirit demons convey a history of trauma and ra\r\n cialization in Dominican popular culture. In the context of slavery and bey\r\n ond\\, bacás keep alive the promise of freedom\\, since shape-shifting has lo\r\n ng enabled fugitivity. As Derby demonstrates\\, bacás represent a complex hi\r\n story of race\\, religion\\, repression\\, and resistance.\\n\\nThis event is pa\r\n rt of Stanford Global Studies’ Oceanic Imaginaries\\, a multi-year initiativ\r\n e that adopts the world’s oceans as an analytical framework for advancing c\r\n ross-regional\\, interdisciplinary research on timely global topics.\\n\\nLaur\r\n en (Robin) Derby’s research has treated dictatorship and everyday life\\, th\r\n e long durée social history of the Haitian and Dominican border\\, and how n\r\n otions of race\\, national identity and witchcraft have been articulated in \r\n popular media such as rumor\\, food and animals. Her publications include th\r\n e prize-winning The Dictator’s Seduction: Politics and the Popular Imaginat\r\n ion in the Era of Trujillo\\, the co-authored Terreur de frontière: le massa\r\n cre des Haïtiens en République dominicaine en 1937 (Port-au-Prince\\, Haiti\\\r\n , 2021)\\, and the co-edited Dominican Republic Reader. Her current project \r\n is based on oral testimony of demonic animal phantasms in Haiti and the Dom\r\n inican Republic and considers werewolf encounters in light of the animal tu\r\n rn. It is called Bêtes Noires: Sorcery as History in the Haitian-Dominican \r\n Borderlands and will soon be published with Duke University Press. She is p\r\n rofessor of history at UCLA where she teaches courses on modern Latin Ameri\r\n ca and Caribbean history\\, cultural history\\, and food studies.\r\nDTEND:20260213T223000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T213000Z\r\nGEO:37.422017;-122.165624\r\nLOCATION:Bolivar House\r\nSEQUENCE:0\r\nSUMMARY:Bêtes Noires: Sorcery as History in the Haitian-Dominican Borderlan\r\n ds\r\nUID:tag:localist.com\\,2008:EventInstance_51509156359501\r\nURL:https://events.stanford.edu/event/betes-noires-sorcery-as-history-in-th\r\n e-haitian-dominican-borderlands\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Participants: RSVP BY FEB 08 | Only 10 Slots available | Open t\r\n o Stanford Students\\n\\nObservers: RSVP By FEB 12 | Open to the Stanford Stu\r\n dents\\, Faculty\\, and Staff\\n\\nIn this workshop\\, \"Working: How to Animate \r\n an Idea—Get It Supported\\, and to What End\\,\" Anna Deavere Smith explores t\r\n he vital intersection of creative expression and artistic entrepreneurship.\r\n  The session will move beyond theory into the practicalities of creating an\r\n  artistic project: defining your content\\, identifying your purpose\\, and s\r\n trategizing for financial and community support. Open to both participants \r\n and observers\\, Smith will work with participants on how you move from \"hav\r\n ing an idea\" to \"securing support\" and to \"finding an audience.\"\\n\\nPartici\r\n pants and Observers are asked to familiarize themselves with Smith’s piece \r\n Notes from the Field\\, and if time permits with Letters to a Young Artist. \r\n  [Links and specifics are sent via email after RSVP.] \\n\\nParticipants will\r\n  also be asked to submit a short paragraph project proposal that will be se\r\n nt to Smith ahead of time and you will explore together during the workshop\r\n .\r\nDTEND:20260214T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T220000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, Harry\\, J. Elam\\, Jr. Theater\r\nSEQUENCE:0\r\nSUMMARY:WORKSHOP | Anna Deavere Smith\r\nUID:tag:localist.com\\,2008:EventInstance_51888861536915\r\nURL:https://events.stanford.edu/event/workshop-anna-deavere-smith\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The experience of OCD (Obsessive Compulsive Disorder) can be is\r\n olating and stressful.\\n\\nThis is an open and ongoing group for students wh\r\n o live with OCD to support each other and have a safe space to connect. The\r\n  group will focus on providing mutual support\\, sharing wisdom\\, increasing\r\n  self-compassion\\, and enhancing overall coping and wellness.\\n\\nMeeting wi\r\n th a facilitator is required to join this group. You can sign up on the INT\r\n EREST LIST_LIVING_WITH_OCD_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in \r\n the \"Groups and Workshops\" section. This group will take place in-person on\r\n  Fridays from 3-4pm on 1/23\\; 1/30\\; 2/6\\; 2/13\\; 2/20\\; 2/27\\; 3/6\\; 3/13.\r\n Facilitated by Jennifer Maldonado\\, LCSWAll enrolled students are eligible \r\n to participate in CAPS groups and workshops. A pre-group meeting is require\r\n d prior to participation in this group. Please contact CAPS at (650) 723-37\r\n 85 to schedule a pre-group meeting with the facilitators\\, or sign up on th\r\n e portal as instructed above.\r\nDTEND:20260214T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260213T230000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Living with OCD\r\nUID:tag:localist.com\\,2008:EventInstance_51782951092520\r\nURL:https://events.stanford.edu/event/copy-of-living-with-ocd-3482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260214T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T013000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_51940680617868\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This lecture\\, led by Stanford music faculty Ory Shihor\\, explo\r\n res how performers make informed interpretive decisions when the musical sc\r\n ore leaves essential elements unspecified. Drawing on Classical-era sources\r\n \\, formal analysis\\, and performance practice\\, the discussion examines how\r\n  notation\\, style\\, and context shape choices of articulation\\, timing\\, ph\r\n rasing\\, and expression. Emphasis is placed on developing interpretive judg\r\n ment that balances historical awareness with artistic responsibility.\\n\\nAd\r\n mission Information\\n\\nFree admission\r\nDTEND:20260214T043000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T030000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Between Notation and Meaning: Making Interpretive Decisions in Clas\r\n sical-Era Repertoire\r\nUID:tag:localist.com\\,2008:EventInstance_51843314051989\r\nURL:https://events.stanford.edu/event/between-notation-and-meaning\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport\r\nDESCRIPTION:Join Cardinal Nights and Stanford Figure Skating Club for a pre\r\n -Valentines Day night on the ice!\\n\\nWe'll start the evening with a perform\r\n ance from the Stanford Figure Skating Club and then the ice will be open to\r\n  everyone.\\n\\nBring your friends\\, lovers\\, and enemies (to lovers?)\\n\\nTic\r\n ket includes admission\\, skate rental\\, and round trip bus transportation. \r\n Please bring your own socks! Limit 2 tickets per Stanford student.\\n\\nTicke\r\n ts $15\\, on sale Friday\\, January 30 at 5 pm.\\n\\nBuses from Faculty Club de\r\n part at 5:45 pm. Please arrive with time to scan your tickets. Stanford Fig\r\n ure Skating showcase at 7pm followed by open skate until 9 pm. Must have va\r\n lid Humanitix ticket to enter rink.\\n\\nLimited financial assistance availab\r\n le. Submit a request here starting on Friday\\, Jan 30!\\n\\n*this event is on\r\n ly available to currently enrolled Stanford students\r\nDTEND:20260214T050000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T030000Z\r\nGEO:37.319459;-121.864543\r\nLOCATION:Sharks Ice\r\nSEQUENCE:0\r\nSUMMARY:Sweetheart Skate Night \r\nUID:tag:localist.com\\,2008:EventInstance_51942825829694\r\nURL:https://events.stanford.edu/event/sweetheart-skate-night\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Marco Fusi presents a concert of new works by Stanford Graduate\r\n  Composers Kimia Koochakzadeh-Yazdi\\, Seán Ó Dálaigh\\, Nick Shaheed\\, and S\r\n tella Song.\\n\\nMarco Fusi is a violinist/violist\\, a researcher in music pe\r\n rformance\\, and a passionate advocate for the music of our time. Among many\r\n  collaborations with emerging and established composers\\, he has premiered \r\n works by Jessie Marino\\, Tim McCormack\\, Yu Kuwabara\\, Evan Johnson and Kri\r\n stine Tjøgersen\\, among others. Marco has performed with Pierre Boulez\\, El\r\n ena Schwarz\\, Lorin Maazel\\, Susanna Mälkki\\, Alan Gilbert\\, and frequently\r\n  plays with leading contemporary ensembles including Klangforum Wien\\, Musi\r\n kFabrik\\, Meitar Ensemble\\, Mivos Quartet\\, Ensemble Linea. He has recorded\r\n  several solo albums\\, published by Kairos\\, Stradivarius\\, Col Legno\\, Da \r\n Vinci\\, Geiger Grammofon\\, New Focus Recordings. Marco also plays viola d’a\r\n more\\, commissioning new pieces and collaborating with composers to promote\r\n  and expand existing repertoire for the instrument.\\n\\nAfter his Masters in\r\n  Violin and Composition at the Conservatory of Milan\\, Marco received his P\r\n hD from the University of Antwerp / docARTES program with a dissertation on\r\n  the performance practice of Giacinto Scelsi’s works for string instruments\r\n .\\n\\nHe is currently Assistant Professor of Artistic Research at HEMU Lausa\r\n nne and Associate Researcher at the Orpheus Instituut of Gent.\\n\\nAdmission\r\n  Information\\n\\nFree admission\r\nDTEND:20260214T050000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T033000Z\r\nGEO:37.421012;-122.172383\r\nLOCATION:The Knoll\\, CCRMA Stage\r\nSEQUENCE:0\r\nSUMMARY:CCRMA Presents: Marco Fusi – New Works by Stanford Graduate Compose\r\n rs \r\nUID:tag:localist.com\\,2008:EventInstance_52002746871952\r\nURL:https://events.stanford.edu/event/ccrma-presents-marco-fusi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Annual affiliates meeting for Suetri-a members.\r\nDTEND:20260214T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T043000Z\r\nGEO:37.425273;-122.172422\r\nLOCATION:Press Bldg.\r\nSEQUENCE:0\r\nSUMMARY:2026 4th Annual SUETRI-A Affiliates Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_51993485949532\r\nURL:https://events.stanford.edu/event/copy-of-2026-4th-annual-suetri-a-affi\r\n liates-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260214\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264965355\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260214\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355488734\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a BioBlitz!\\n\\nA bioblitz is a community event to o\r\n bserve and record as many species as possible within a specific location an\r\n d time period. As part of Love Data Week\\, we'll be using iNaturalist to ga\r\n ther information on our local biodiversity - around Stanford and the Hopkin\r\n s Marine Station - to better understand the plants\\, animals\\, and critters\r\n  that share the campus with us.\\n\\nIf you're not sure where to start\\, chec\r\n k out some of the themed walks and trails on campus.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260214\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BioBlitz 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51507101471687\r\nURL:https://events.stanford.edu/event/love-data-week-2026-bioblitz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport\r\nDESCRIPTION:Have you ever wanted to do a Triathlon?\\n\\nJoin in the fun and \r\n challenge of one of the best collegiate triathlons in Northern California. \r\n The race features a 750m open-water swim\\, a 20km bike\\, and a 5k run and i\r\n s organized by Stanford's Triathlon Team.\\n\\nThis year's race will be held \r\n at the beautiful Seal Point Park in San Mateo\\, California\\, with views of \r\n the Bay\\, the Santa Cruz Mountains\\, and the San Francisco Skyline.\\n\\nThe \r\n race is open to beginners and experts alike! We host two race formats: Our \r\n classic sprint offers waves for all athletes\\, including the option to race\r\n  as a relay team! The draft-legal sprint is a competitive race format for e\r\n xperienced triathletes and has collegiate\\, open\\, and elite waves!\r\nDTEND:20260214T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T160000Z\r\nGEO:37.573403;-122.301077\r\nLOCATION:Seal Point Park\r\nSEQUENCE:0\r\nSUMMARY:Treeathlon 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51828774357494\r\nURL:https://events.stanford.edu/event/treeathlon-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260214T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353479534\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260214T193000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T173000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078566322\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260215T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114930108\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260214T203000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699819187\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260214T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691939608\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260214T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682819468\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260214T233000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708310795\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260215T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260214T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668829678\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260215\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264966380\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260215\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355489759\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260215T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353480559\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260215T200000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T190000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809520493\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260216T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114932157\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260215T200000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51889750107475\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260215T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691941657\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260215T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682820493\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:¡Ven a conocer el museo Cantor!\\n\\nExplora las colecciones del \r\n Cantor con un guía que te guiará a través de una selección de obras de dife\r\n rentes culturas y épocas.\\n\\nLos participantes están muy bienvenidos a part\r\n icipar en la conversación y aportar sus ideas sobre los temas explorados a \r\n lo largo de la visita si lo desean.\\n\\nLas visitas no requieren reserva pre\r\n via y son gratuitas. Se ruega registrarse en el mostrador de atención al vi\r\n sitante del vestíbulo principal del museo. \\n\\n ¡Esperamos verte en el muse\r\n o!\\n_______________________________________\\n\\nCome and visit the Cantor! \\\r\n n\\nExplore the Cantor's collections with a museum engagement guide who will\r\n  lead you through a selection of works from different cultures and time per\r\n iods.\\n\\nParticipants are welcomed to participate in the conversation and p\r\n rovide their thoughts on themes explored throughout the tour but are also f\r\n ree to engage at their own comfort level. \\n\\n Tours do not require a reser\r\n vation and are free of charge. Please check-in at the visitor services desk\r\n  in the main museum lobby.\r\nDTEND:20260215T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Spanish \r\nUID:tag:localist.com\\,2008:EventInstance_52057413915602\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -spanish-language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260215T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766127170\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260215T233000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708312844\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260216T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260215T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668830703\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260216\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019653032\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Monday\\, February 16th\\n\\n• AOERC: OPEN 9:00 AM - 8:00 PM\\n\\n• \r\n Climbing Wall\\, Outdoor Center: CLOSED\\n\\n• Avery Rec Pool: OPEN 10:00 AM -\r\n  2:00 PM\\n\\n• Avery Aquatic Center: CLOSED\\n\\n• ACSR/Ford: CLOSED\\n\\n• Stan\r\n ford Redwood City: CLOSED\\n\\n• ARCAS: CLOSED\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260216\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Preisdent's Day Hours\r\nUID:tag:localist.com\\,2008:EventInstance_52073655652686\r\nURL:https://events.stanford.edu/event/preisdents-day-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the Presidents' Day holiday. There are no classes e\r\n xcept Law School classes.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260216\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Presidents' Day (No Classes)\r\nUID:tag:localist.com\\,2008:EventInstance_50472521709310\r\nURL:https://events.stanford.edu/event/presidents-day-no-classes-5012\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260216\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Presidents' Day (holiday\\, no classes).\r\nUID:tag:localist.com\\,2008:EventInstance_49463312443454\r\nURL:https://events.stanford.edu/event/presidents-day-holiday-no-classes-343\r\n 5\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The university is closed to recognize an official holiday on th\r\n is date\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260216\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Presidents’ Day\r\nUID:tag:localist.com\\,2008:EventInstance_51754563197564\r\nURL:https://events.stanford.edu/event/copy-of-martin-luther-king-jr-day-749\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260216T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260216T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353481584\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260217T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260216T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382739617\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the Graduate School of Business begins instruction f\r\n or MBA and MSx courses only. See the Graduate School of Business academic c\r\n alendar for a full schedule.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260217\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: GSB Monday Classes Meet\r\nUID:tag:localist.com\\,2008:EventInstance_50472521819912\r\nURL:https://events.stanford.edu/event/winter-quarter-gsb-monday-classes-mee\r\n t\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260218T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T160000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 139\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Main Campus\\, Huang Bldg\\, Room\r\n  139) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525110945656\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-main-campus-huang-bldg-room-139-by-appointment-only-8720\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Pediatric Grand Rounds in Recognition of Black History Month\\nA\r\n dvocacy in Historic Times: Honoring Our Legacy and Forging Our Future\\n\\nSP\r\n EAKER\\nTerri McFadden\\, MD\\nPresident Elect\\, American Academy of Pediatric\r\n s\\nProfessor\\, General Pediatrics\\, Emory University School of Medicine\\n\\n\r\n SESSION DESCRIPTION\\nThis session will discuss the history of advocacy for \r\n children and families in the US. Basic tenets of advocacy will be explored \r\n as we discuss the AAP's current approach to and priorities for advocacy. Fi\r\n nally\\, we will examine the importance of advocacy in contentious times\\, a\r\n nd describe the benefits of advocacy for both children and advocates.\\n\\nED\r\n UCATION GOALS\\n\\nDefine Advocacy and describe the basic tenets.Discuss the \r\n AAP's long history of advocacy for children and families and describe how t\r\n he past shapes current advocacy priorities.Describe practical steps as well\r\n  as benefits of advocacy during unsettling times.\\nZOOM INFORMATION\\n[Regis\r\n ter for Webinar]\\n\\nSubscribe to receive weekly email announcements and Zoo\r\n m webinar information for each session.\\nSubscribe to mailing list\\n\\n\\nCME\r\n  ACCREDITATION\\nThis session is eligible for CME credit. To claim CME credi\r\n t\\, text code to (844) 560-1904 to confirm attendance. A new code will be p\r\n rovided at beginning of the session.\r\nDTEND:20260217T170000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T160000Z\r\nGEO:37.437255;-122.171767\r\nLOCATION:Center for Academic Medicine \\, Grand Rounds Room \r\nSEQUENCE:0\r\nSUMMARY:Pediatric Grand Rounds (CME): Advocacy in Historic Times: Honoring \r\n Our Legacy and Forging Our Future\r\nUID:tag:localist.com\\,2008:EventInstance_52083947869504\r\nURL:https://events.stanford.edu/event/copy-of-pediatric-grand-rounds-cme-ad\r\n hd-in-preschool-age-children-what-pediatricians-need-to-know\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260217T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353481585\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260218T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382741666\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260217T212000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nLOCATION:Turing Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Atmosphere & Energy Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_52011065146704\r\nURL:https://events.stanford.edu/event/atmosphere-energy-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for this month's Center for Sleep and Circadian \r\n Sciences Community Series:\\n\\n\"Mathematical Modeling of Circadian Rhythms f\r\n rom Wearable Data\"\\n\\nTuesday\\, February 17th\\, 2026 at 12pm PST\\n\\nCaleb L\r\n uke Mayer\\, PhD\\n\\nPostdoctoral Scholar\\, Genetics\\n\\nZoom link: https://st\r\n anford.zoom.us/j/91908447378?pwd=VzY1TlJNaFdVVWdYWlZ3c0dEaWlUZz09\r\nDTEND:20260217T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:CSCS Community Series: \"Mathematical Modeling of Circadian Rhythms \r\n from Wearable Data\" with Caleb Luke Mayer\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_51748376493693\r\nURL:https://events.stanford.edu/event/cscs-community-series-mathematical-mo\r\n deling-of-circadian-rhythms-from-wearable-data-with-caleb-luke-mayer-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Although understanding how ice sheets respond to a changing cli\r\n mate is a pressing issue of the century\\, our current knowledge of past ice\r\n -sheet changes remains limited by data sparsity. Over the last deglaciation\r\n \\, we understand global sea-level changes quite well\\, however\\, we know li\r\n ttle about which ice sheets contributed meltwater at what times. I explore \r\n approaches that leverage non-traditional datasets to constrain past ice she\r\n et and sea-level change over the last glacial cycle. For example\\, I revisi\r\n t two topics of considerable debate: the expansion of the ice-free corridor\r\n  between the two North American ice sheets and the flooding of the Bering S\r\n trait. I show it is possible to use observations of the Bering Strait flood\r\n ing as sea-level indicators to fingerprint the timing and location of North\r\n  American saddle deglaciation.\\n\\nNext\\, I consider the role of ice sheet-s\r\n olid Earth interactions on the deglaciation of the Ross Sea in West Antarct\r\n ica. Since the Last Glacial Maximum\\, ice streams in the Ross Sea retreated\r\n  hundreds of kilometers from the shelf break to their modern grounding line\r\n  positions. I show that glacial isostatic adjustment causes a net retreat o\r\n f stable grounding line positions from 20 ka to modern\\, with some ice stre\r\n ams experiencing up to 1000 km of stable grounding line zone retreat. This \r\n finding differs from prior studies that cite glacial isostatic adjustment a\r\n s a stabilizing mechanism for marine-terminating ice streams\\, and underlin\r\n es that solid Earth-ice sheet feedbacks are a function of both timescale an\r\n d spatial scale of ice sheet unloading.\\n\\n \\n\\nBio:\\n\\nTamara Pico is an A\r\n ssistant Professor at UC Santa Cruz in Earth and Planetary Sciences\\, and i\r\n s also an affiliate with the Science and Justice Research Center. The Pico \r\n group uses ice sheet-solid Earth interactions as a lens to improve ice shee\r\n t and sea level reconstructions on glacial timescales. By leveraging unconv\r\n entional sea level data sets\\, including ancient landscapes\\, we aim to tar\r\n get knowledge gaps on ice sheet growth and decay. Our overarching goal is t\r\n o better understand past ice sheets and their stability.\r\nDTEND:20260217T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nLOCATION:Building 320\\, Geology Corner\\, Room 220\r\nSEQUENCE:0\r\nSUMMARY:Earth Planetary Science Seminar - Professor  Tamara Pico \"Out of th\r\n e ice age: Insights into past sea level and ice sheets from Beringia to Ant\r\n arctica\".\r\nUID:tag:localist.com\\,2008:EventInstance_52015070651086\r\nURL:https://events.stanford.edu/event/earth-planetary-science-seminar-profe\r\n ssor-tamara-pico-out-of-the-ice-age-insights-into-past-sea-level-and-ice-sh\r\n eets-from-beringia-to-antarctica\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:Director Etant Dupain will discuss his documentary\\, Madan Sara\r\n \\, about the Haitian women who work tirelessly to buy\\, distribute\\, and se\r\n ll food and other essentials in markets through the country. Despite the ob\r\n stacles faced by the women working in a sector that lacks investment\\, infr\r\n astructure\\, and state assistance\\, the Madan Sara continue to be one of th\r\n e most critical parts of the Haitian economy and of who Haiti is as a count\r\n ry. This documentary tells the stories of these indefatigable women who wor\r\n k at the margins to make Haiti’s economy run. Despite facing intense hardsh\r\n ip and social stigma\\, the hard work of the Madan Sara puts their children \r\n through school\\, houses their families\\, and helps to ensure a better life \r\n for generations to come. This film amplifies the calls of the Madan Sara as\r\n  they speak directly to society to share their dreams for a more just Haiti\r\n .\\n\\nThis event is part of the \"Haiti: Past\\, Present\\, and Futures\" event \r\n series organized by Professor Rachel Jean-Baptiste (History and African & A\r\n frican American Studies).\r\nDTEND:20260217T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 200\\, History Corner\\, Room 307\r\nSEQUENCE:0\r\nSUMMARY:Film Screening and Q&A with Director of Madan Sara\r\nUID:tag:localist.com\\,2008:EventInstance_52073864585617\r\nURL:https://events.stanford.edu/event/film-screening-and-qa-with-director-o\r\n f-madan-sara\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the German Studies Lecture Series talk entitled\\, H\r\n omeless and Lovesick: Loss in Tristan-Romances of the 12th and 13th Centuri\r\n es by Professor Monika Schausten (University of Cologne).\\n\\nAbstract\\nRese\r\n arch has long explained the enduring fascination with the medieval Tristan \r\n romances by referring to their depictions of passionate love. Notably\\, Got\r\n tfried of Straßburg's Middle High German version from the beginning of the \r\n 13th century is renowned for its depiction of the illicit love affair betwe\r\n en Tristan and Isolde\\, with the latter being the wife of Tristan’s uncle\\,\r\n  King Marke of Cornwall. In particular\\, Richard Wagner's 19th-century adap\r\n tation of the plot for his famous musical drama Tristan und Isolde has shap\r\n ed the modern perception of his medieval sources by removing nearly all of \r\n the story's socially significant elements. In Wagner's version\\, the protag\r\n onists' passionate love appears as a means of escaping societal constraints\r\n . However\\, research on the medieval Tristan stories has long emphasized th\r\n e importance of the narratives with regard to the friction that passionate \r\n love entails for the social order of the imagined nobility. Nevertheless\\, \r\n the question of how the texts relate the love story to their negotiations o\r\n f political topics remains. Against this backdrop\\, the lecture offers an i\r\n nterpretative reading of the romances\\, focusing on the ways in which they \r\n interweave discourses of love with discourses on the prerequisites of power\r\n  claims\\, as defined by premodernconcepts of noble identity. It explores me\r\n dieval notions of 'Heimat' (homeland) and belonging as they are negotiated \r\n in French and German Tristan romances of the 12th and 13th centuries. Drawi\r\n ng on the recent work of the sociologist Andreas Reckwitz\\, who identified \r\n loss as a defining feature of modernity\\, the lecture examines strategies f\r\n or coping with loss as depicted in premodern romances by authors such as Ei\r\n lhart of Oberg\\, Gottfried of Strassburg\\, and Thomas of Britain. Using epi\r\n sodes from these texts as examples\\, the talk illustrates how the romances \r\n depict the dynamics of loss and their personal and societal impacts. The fo\r\n cus will be on the connection that the texts reveal between the loss of a h\r\n omeland and the loss of love. The historically specific manifestations and \r\n encodings of losses\\, as well as the imagined practices of compensating\\, s\r\n ubstituting\\, and restituting losses\\, will be discussed. The analysis will\r\n  demonstrate how literary representations of the losses of homeland and lov\r\n e reveal the preconditions for aristocratic claims to power.\\n\\nRSVP for ta\r\n lk by Monika Schausten\\n\\nThe German Studies Lecture Series is hosted by th\r\n e Department of German Studies\\, Stanford University.\r\nDTEND:20260217T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Rm 216\r\nSEQUENCE:0\r\nSUMMARY:German Studies Lecture Series - Homeless and Lovesick: Loss in Tris\r\n tan-Romances of the 12th and 13th Centuries by Monika Schausten (University\r\n  of Cologne)\r\nUID:tag:localist.com\\,2008:EventInstance_51093423642410\r\nURL:https://events.stanford.edu/event/german-studies-lecture-series-homeles\r\n s-and-lovesick-loss-in-tristan-romances-of-the-12th-and-13th-centuries-by-m\r\n onika-schausten-university-of-cologne\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Have you ever found yourself struggling to calm the mind or cle\r\n ar your thoughts during meditation? The first step towards a profound medit\r\n ation experience is complete relaxation of body and mind. Often the stress \r\n we store in our bodies holds us back from experiencing the deep calm within\r\n .\\n\\nIn this webinar\\, we will explore ways to consciously prepare ourselve\r\n s for meditation using calming exercises and breathwork. We will gain a dee\r\n per understanding of the connection between the breath and the mind and pra\r\n ctice simple breathing techniques and yoga exercises to fully relax our bod\r\n ies and minds. By the end of the class\\, you will have developed a personal\r\n  toolkit to help you calm and de-stress at will.\\n\\nThis class will be reco\r\n rded and a one-week link to the recording will be shared with all registere\r\n d participants. To receive incentive points\\, attend at least 80% of the li\r\n ve session or listen to the entire recording within one week. Request disab\r\n ility accommodations and access info.\\n\\nInstructor: Saiganesh Sairaman is \r\n a certified teacher of meditation and yoga philosophy and is part of the te\r\n aching faculty at the Ananda center in Palo Alto. His experience with workp\r\n lace stress as a management consultant and IT services manager at Fortune 5\r\n 00 companies led him to find creative ways of applying and sharing the teac\r\n hings of yoga in scientific ways.\\n\\nClass details are subject to change.\r\nDTEND:20260217T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Meditation Toolkit\r\nUID:tag:localist.com\\,2008:EventInstance_51388530709199\r\nURL:https://events.stanford.edu/event/meditation-toolkit\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The City is Ours accounts how urban politics mediated the rise \r\n of Kurdish nationhood and mobilization in Diyarbakır\\, Turkey. Muna Güvenç \r\n elucidates how urban and architectural forms are not merely the backdrop of\r\n  the cityscape where political struggles unfold\\; they constitute the very \r\n essence of these conflicts. Güvenç posits that urban spaces offer \"wiggle r\r\n oom\"\\, turning oppression into chances for dissent and resilience. In this \r\n talk\\, Güvenç takes readers from municipal halls to the streets and illustr\r\n ates how\\, in the early 2000s\\, pro-Kurdish parties harnessed urban plannin\r\n g to resist coercion and foster Kurdish mobilization in Turkey.\\n\\n \\n\\n\\n\\\r\n nMuna Güvenç (Ph.D.\\, University of California\\, Berkeley\\, 2014) is an arc\r\n hitect and an architectural and urban historian whose work lies at the inte\r\n rsection of spatial justice\\, minority politics\\, and the built environment\r\n  in the Middle East and beyond. Her research explores how architecture and \r\n urban form can both empower and constrain marginalized communities\\, partic\r\n ularly in contexts of state repression and political struggle. Trained as a\r\n n architect in Istanbul before transitioning to academia\\, Güvenç brings a \r\n critical and grounded perspective to the study of cities\\, drawing from ext\r\n ensive fieldwork\\, ethnographic methods\\, and spatial analysis.\\n\\nShe is t\r\n he author of The City is Ours: Spaces of Political Mobilization and Imagina\r\n ries of Nationhood in Turkey (Cornell University Press\\, 2024)\\, which exam\r\n ines how Kurdish political movements have used urban planning and architect\r\n ure to foster resilience\\, dissent\\, and collective identity in the face of\r\n  state violence. Her scholarship engages deeply with contemporary social th\r\n eory\\, highlighting the entanglements between space-making\\, power\\, and po\r\n litical mobilization.\\n\\nIn her current research\\, Güvenç investigates the \r\n spatial politics of centralization in contemporary Turkey\\, with particular\r\n  attention to housing and local governance. She explores how the state cons\r\n olidates authority through the restructuring of municipal institutions\\, th\r\n e appointment of regime-loyal trustees (kayyumlar)\\, and the deliberate wea\r\n kening of local autonomy and professional chambers (meslek odaları). By con\r\n tinuously altering urban legislation to serve its interests\\, the central g\r\n overnment effectively constructs a fourth\\, invisible layer of authority—on\r\n e that operates alongside and often supersedes municipalities\\, ministries\\\r\n , and provincial governorships. Her work reveals how state power is enacted\r\n  not only through legal mechanisms\\, but also through the material and symb\r\n olic regulation of space. This includes strategic interventions into the po\r\n litics of construction and demolition—determining what is built\\, what is e\r\n rased\\, and where development unfolds—enabling a broader project of spatial\r\n  domination that reshapes both the physical and symbolic contours of the ci\r\n ty in service of centralized political authority.\r\nDTEND:20260217T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:The City Is Ours: Spaces of Political Mobilization and Imaginaries \r\n of Nationhood in Turkey | Book Talk with Muna Güvenç\r\nUID:tag:localist.com\\,2008:EventInstance_51321299061527\r\nURL:https://events.stanford.edu/event/city-is-ours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the\\n\\nTech Impact and Policy Center on February 17th from\r\n  12PM–1PM Pacific for a seminar with Robin Nabi.\\n\\nStanford affiliates are\r\n  invited to join us at 11:40 AM for lunch\\, prior to the seminar.  The Wint\r\n er Seminar Series continues through March\\; see our Winter Seminar Series p\r\n age for speakers and topics. Sign up for our newsletter for announcements. \r\n \\n\\nAbout the Seminar:\\n\\nExtensive attention has been paid to the potentia\r\n l harms of media consumption generally\\, and social media use in particular\r\n \\, with relatively little consideration given to the potential psychologica\r\n l benefits of media use. This talk will address why this bias exists and it\r\n s potential for unintended negative consequences.  Evidence of how self-sel\r\n ected and prescribed digital media content can support desirable outcomes\\,\r\n  including reduced stress and procrastination\\, increased goal motivation a\r\n nd pursuit\\, and increased empathy and relational satisfaction\\, will be sh\r\n ared to highlight the need for better understanding of how to empower users\r\n  to make media choices that can support their psychological well-being.\\n\\n\r\n About the Speaker:\\n\\nRobin L. Nabi is a Professor of Communication at the \r\n University of California\\, Santa Barbara. With degrees from Harvard and the\r\n  University of Pennsylvania\\, she has published over 100 journal articles a\r\n nd book chapters investigating the effects of media use on emotional experi\r\n ences\\, decision-making\\, and well-being.  She is the co-editor of two volu\r\n mes: The SAGE Handbook of Media Processes and Effects and Emotions in the D\r\n igital World (Oxford University Press). She is a Fellow of the Internationa\r\n l Communication Association\\, and her research has been featured in numerou\r\n s media outlets\\, including the New York Times\\, the Los Angeles Times\\, US\r\n A Today\\, NPR\\, CBC/Radio-Canada\\, and the Harvard Business Review.\r\nDTEND:20260217T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T200000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, Studio S40 - bring you\r\n r Stanford ID card/mobile ID to enter the building\r\nSEQUENCE:0\r\nSUMMARY:The Dangers of Focusing on the Danger of Digital Media Use\r\nUID:tag:localist.com\\,2008:EventInstance_51960510046146\r\nURL:https://events.stanford.edu/event/the-dangers-of-focusing-on-the-danger\r\n -of-digital-media-use\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260217T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491604367\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Gallop into the Year of the Horse! Come see a selection of scro\r\n lls\\, prints and more New Year's and equine-related materials selected from\r\n  our Locked Stacks collection. Stop in anytime on Feb. 17 between 1-3 pm.\r\nDTEND:20260217T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T210000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Bowes Art & Architecture Library\\, 2nd floor. \r\n For visitors\\, please call 650-723-3408 for building\\, elevator and library\r\n  access.\r\nSEQUENCE:0\r\nSUMMARY:Year of the Horse Pop-up at Bowes Art & Architecture Library\r\nUID:tag:localist.com\\,2008:EventInstance_52030815904532\r\nURL:https://events.stanford.edu/event/year-of-the-horse-pop-up-bowes-art-ar\r\n chitecture-library\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Join a community of fellow instructors sharing and discussing t\r\n heir experiences navigating AI in their teaching practices. These events wi\r\n ll be hosted in-person only at the Center for Teaching and Learning in wint\r\n er quarter. Each event includes lightning talks and open discussions featur\r\n ing Stanford educators.\\n\\nThis series is part of AI meets Education at Sta\r\n nford (AImES)\\, a VPUE effort to catalyze and support critical engagement w\r\n ith generative AI in Stanford teaching and learning contexts\\, coordinated \r\n by the Center for Teaching and Learning.\\n\\nRegister separately for each se\r\n ssion by clicking the date below:\\n\\nTuesday\\, February 10\\, 1:30–3 pm\\, fe\r\n aturing:\\n\\nRamesh Johari\\, Professor\\, Management Science and EngineeringT\r\n amar Brand-Perez\\, Lecturer\\, Human BiologyRobby Ratan\\, Visiting Scholar\\,\r\n  Communication DepartmentTuesday\\, February 17\\, 2:30–4 pm\\, featuring: ***\r\n This session has been cancelled due to power cuts on campus\\; check for res\r\n cheduling later ***\\n\\nAriel Stilerman\\, Assistant Professor\\, East Asian L\r\n anguages and CulturesSho Takatori\\, Associate Professor\\, Chemical Engineer\r\n ingNarayanan Shivakumar\\, Lecturer\\, Computer ScienceAll sessions will be a\r\n t 408 Panama Mall\\, CTL Meeting Space (Room 116)\\n\\nIf you need accommodati\r\n on or have questions\\, please contact Kenji Ikemoto at AcademicTechnology@s\r\n tanford.edu.\r\nDTEND:20260218T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T223000Z\r\nLOCATION:408 Panama Mall\\, CTL Meeting Space (Room 116)\r\nSEQUENCE:0\r\nSUMMARY:Teaching with AI Community Share-outs Winter 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51577833072940\r\nURL:https://events.stanford.edu/event/teaching-with-ai-community-share-out-\r\n w26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Richard Shweder\\, the Harold H. Swift Distinguished Service Pro\r\n fessor of Human Development at the University of Chicago\\, and Shirin Sinna\r\n r\\, the William W. and Gertrude H. Saunders Professor of Law at Stanford La\r\n w School\\, discuss whether private universities should provide wide latitud\r\n e to student protests\\, even when the constitutional free speech protection\r\n s applicable to demonstrations in public spaces do not extend to private ca\r\n mpuses. How should universities regulate protests in light of the education\r\n al missions of these institutions?\\n\\nDeep disagreement pervades our democr\r\n acy\\, from arguments over immigration\\, gun control\\, abortion\\, and the Mi\r\n ddle East crisis\\, to the function of elite higher education and the value \r\n of free speech itself. Loud voices drown out discussion. Open-mindedness an\r\n d humility seem in short supply among politicians and citizens alike. Yet c\r\n onstructive disagreement is an essential feature of a democratic society. T\r\n his class explores and models respectful civic disagreement. Each week feat\r\n ures scholars who disagree — sometimes quite strongly — about major policy \r\n issues. Each class will be focused on a different topic and have guest spea\r\n kers. Students will have the opportunity to probe those disagreements\\, to \r\n understand why they persist even in the light of shared evidence\\, and to i\r\n mprove their own understanding of the facts and values that underlie them.\\\r\n n\\nThis course is offered in the spirit of the observation by Hanna Holborn\r\n  Gray\\, former president of the University of Chicago\\, that “education sho\r\n uld not be intended to make people comfortable\\, it is meant to make them t\r\n hink. Universities should be expected to provide the conditions within whic\r\n h hard thought\\, and therefore strong disagreement\\, independent judgment\\,\r\n  and the questioning of stubborn assumptions\\, can flourish in an environme\r\n nt of the greatest freedom.”\\n\\nThe speakers in this course are the guests \r\n of the faculty and students alike and should be treated as such. They are a\r\n ware that their views will be subject to criticism in a manner consistent w\r\n ith our commitment to respectful critical discourse. We will provide as muc\r\n h room for students’ questions and comments as is possible for a class of s\r\n everal hundred. For anyone who feels motivated to engage in a protest again\r\n st particular speakers\\, there are spaces outside the classroom for doing s\r\n o.\\n\\nWhen/Where?: Tuesdays 3:00-4:50PM in Cemex Auditorium\\n\\nWho?: This c\r\n lass will be open to students\\, faculty and staff to attend and will also b\r\n e recorded.\\n\\n1/6 Administrative State: https://events.stanford.edu/event/\r\n the-administrative-state-with-brian-fletcher-and-saikrishna-prakash\\n\\n1/13\r\n  Israel-Palestine: https://events.stanford.edu/event/democracy-and-disagree\r\n ment-israel-palestine-the-future-of-palestine\\n\\n1/20 COVID Policies in Ret\r\n rospect: https://events.stanford.edu/event/democracy-and-disagreement-covid\r\n -policies-in-retrospect-with-sara-cody-and-stephen-macedo\\n\\n1/27 Gender-Af\r\n firming Care: https://events.stanford.edu/event/democracy-and-disagreement-\r\n gender-affirming-care-with-alex-byrne-and-amy-tishelman\\n\\n2/3 Fetal Person\r\n hood: https://events.stanford.edu/event/democracy-and-disagreement-fetal-pe\r\n rsonhood-with-rachel-rebouche-and-chris-tollefsen\\n\\n2/10 Internet Regulati\r\n on: https://events.stanford.edu/event/democracy-and-disagreement-internet-r\r\n egulation-the-take-it-down-act-with-eric-goldman-and-jim-steyer\\n\\n2/24 Pro\r\n portional Representation: https://events.stanford.edu/event/democracy-and-d\r\n isagreement-proportional-representation-with-bruce-cain-and-lee-drutman \\n\\\r\n n3/3 AI and Jobs: https://events.stanford.edu/event/democracy-and-disagreem\r\n ent-ai-and-jobs-with-bharat-chander-and-rob-reich\\n\\n3/10 Ending the Russia\r\n -Ukraine War: https://events.stanford.edu/event/democracy-and-disagreement-\r\n ending-the-russiaukraine-war-with-samuel-charap-and-gabrielius-landsbergis\r\nDTEND:20260218T005000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T230000Z\r\nGEO:37.428584;-122.162763\r\nLOCATION:GSB Knight - Arbuckle / Cemex\r\nSEQUENCE:0\r\nSUMMARY:Democracy and Disagreement: Restrictions on College Protests with R\r\n ichard Shweder and Shirin Sinnar\r\nUID:tag:localist.com\\,2008:EventInstance_51569278504679\r\nURL:https://events.stanford.edu/event/democracy-and-disagreement-restrictio\r\n ns-on-college-protests-with-richard-shweder-and-shirin-sinnar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This group is designed to support students who wish to have a s\r\n afe healing space through utilization of art. Sessions will include hand bu\r\n ilding clay\\, doodling\\, watercolor painting\\, Turkish lump making\\, Chines\r\n e calligraphy\\, rock painting\\, washi tape art\\, terrarium making\\, origami\r\n  and matcha tea. \\n\\nPre-screening is required. Mari or Marisa will reach o\r\n ut to schedule a confidential pre-screening phone or zoom call. \\n\\nWHEN: E\r\n very Tuesday from 3:00 PM - 4:30 PM in Fall Quarter for 7-8 sessions (start\r\n ing on Tuesday in the beginning of Feb\\, 2026) \\n\\nWHERE: In person @ Room \r\n 306 in Kingscote Gardens (419 Lagunita Drive\\, 3rd floor)\\n\\nWHO: Stanford \r\n undergrad and grad students Facilitators: Mari Evers\\, LCSW & Marisa Pereir\r\n a\\, LCSW from Stanford Confidential Support Team\r\nDTEND:20260218T003000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden \r\nSEQUENCE:0\r\nSUMMARY:Healing with Art group \r\nUID:tag:localist.com\\,2008:EventInstance_51827321266537\r\nURL:https://events.stanford.edu/event/healing-with-art-group-6772\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Abstract: The computational resources required to describe the \r\n full state of a quantum many-body system scale exponentially with the numbe\r\n r of constituents. This severely limits our ability to explore and understa\r\n nd the fascinating phenomena of quantum systems using classical algorithms.\r\n  Quantum simulation offers a potential route to overcome these limitations.\r\n  The idea is to build a well-controlled quantum system in the laboratory th\r\n at represents the problem of interest\\, and whose properties can be studied\r\n  through controlled measurements. This talk will introduce quantum simulato\r\n rs based on neutral atoms confined in optical arrays using laser beams. Sta\r\n te-of-the-art experiments now generate arrays of several thousand particles\r\n  while maintaining control at the level of single atoms. These systems can \r\n be used to study topological phases of matter and to simulate the dynamics \r\n of lattice gauge theories\\, opening new routes to explore phenomena inspire\r\n d by high-energy physics. Recent developments in novel probes inspired by q\r\n uantum information science\\, opening new opportunities for discoveries in f\r\n undamental quantum many-body physics across fields.\\n\\nMonika Aidelsburger \r\n is a professor at Ludwig Maximilian University of Munich (LMU) and leads a \r\n W2 research group at the Max Planck Institute of Quantum Optics. She receiv\r\n ed her PhD in Physics from LMU in 2015. From 2016 to 2017\\, she was a Marie\r\n  Curie postdoctoral fellow at Collège de France before establishing her res\r\n earch group at LMU. Her research focuses on quantum simulation using ultrac\r\n old atoms in optical lattices to investigate topological phases and lattice\r\n  gauge theories. Aidelsburger has received numerous prestigious awards\\, in\r\n cluding an ERC Starting Grant\\, the Alfried Krupp Prize and the Klung Wilhe\r\n lmy Science Award.\r\nDTEND:20260218T003000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260217T233000Z\r\nGEO:37.428953;-122.172839\r\nLOCATION:Hewlett Teaching Center\\, 201\r\nSEQUENCE:0\r\nSUMMARY:Applied Physics/Physics Colloquium: Monika Aidelsburger- \"Quantum s\r\n imulation – Engineering & Understanding Quantum Systems Atom-by-Atom\" \r\nUID:tag:localist.com\\,2008:EventInstance_51763835330010\r\nURL:https://events.stanford.edu/event/applied-physicsphysics-colloquium-mon\r\n ika-aidelsburger-quantum-simulation-engineering-understanding-quantum-syste\r\n ms-atom-by-atom\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:How does storytelling resist injustice? What happens when moder\r\n nization becomes a project of erasure\\, displacing communities\\, reshaping \r\n identity\\, and silencing language?\\n\\nJoin us for From Empire to Erasure: T\r\n he View from Mediterranean Africa with Professor Vaughn Rasberry. This even\r\n t explores the power of memory as a form of resistance in North Africa\\, pa\r\n rticularly in moments of political upheaval\\, post-colonialism\\, and forced\r\n  displacement. Through a discussion of modernity\\, language\\, and memory\\, \r\n including the histories of Nubian displacement and Amazigh revival\\, Profes\r\n sor Rasberry will guide us in examining how literature and memory confront \r\n oppression and preserve what systems of power attempt to erase.\\n\\nWe invit\r\n e you to reflect on the role of storytelling in reclaiming identity through\r\n  remembrance\\, resistance\\, and revival.\\n\\nVaughn Rasberry is a Stanford p\r\n rofessor of English and African & African American Studies whose work exami\r\n nes African diaspora literature\\, postcolonial theory\\, and modernity. He i\r\n s the award-winning author of Race and the Totalitarian Century: Geopolitic\r\n s in the Black Literary Imagination.\\n\\nThe event will be moderated by the \r\n Abbasi-Markaz 25-26 Fellow Ameera Eshtewi.\r\nDTEND:20260218T013000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T000000Z\r\nGEO:37.425339;-122.169746\r\nLOCATION:The Nitery\\, Markaz Resource Center\\, Room 210 (The Lounge)\r\nSEQUENCE:0\r\nSUMMARY:From Empire to Erasure: The View from Mediterranean Africa | Vaughn\r\n  Rasberry\r\nUID:tag:localist.com\\,2008:EventInstance_52073430559535\r\nURL:https://events.stanford.edu/event/from-empire-to-erasure\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Counseling & Psychological Services is happy to offer Rooted! T\r\n his is a support group for Black-identified Stanford graduate students that\r\n  is designed to be a confidential space for students to speak their minds\\,\r\n  build community\\, rest\\, connect with themselves\\, and learn coping skills\r\n  for managing graduate life at Stanford.\\n\\nFacilitated by Cierra Whatley\\,\r\n  PhD & Katie Ohene-Gambill\\, PsyDThis group meets in-person on Tuesdays fro\r\n m 4-5pm on 1/27\\; 2/3\\; 2/10\\; 2/17\\; 2/24\\; 3/3\\; 3/10All enrolled student\r\n s are eligible to participate in CAPS groups and workshops. A pre-group mee\r\n ting is required prior to participation in this group. Please contact CAPS \r\n at (650) 723-3785 to schedule a pre-group meeting with the facilitators.\r\nDTEND:20260218T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T000000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Rooted! Black Graduate Student Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51579799614494\r\nURL:https://events.stanford.edu/event/copy-of-rooted-black-graduate-student\r\n -support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Gary M. Berke\\, MS\\, CP\\, FAAOP\\nStanford Medical Center\\n\\nAbs\r\n tract: Gary will present challenges of human interface design\\, using prost\r\n hetic limbs as the springboard for discussion.\\n\\nBiosketch: Gary M. Berke \r\n is a prosthetist and an Adjunct Clinical Associate Professor in Stanford's \r\n Department of Orthopaedic Surgery as well as the previous owner of Berke Pr\r\n osthetics and Orthotics in San Mateo. He was also the Chief Clinical Office\r\n r for Medical Creations in Denver\\, a start up in the prosthetic space. He \r\n is also now a consultant for Hanger Clinic. He has worked and lectured both\r\n  nationally and internationally on prosthetic care and has authored multipl\r\n e publications. He has a keen interest in investigating cost effective tech\r\n nologies that enhance the lives of those who use prostheses and orthoses da\r\n ily.\\n\\nClass Session Webpage\\n\\nPerspectives in Assistive Technology Cours\r\n e Website\\n\\nClassroom Loczation & Accessibility Information\r\nDTEND:20260218T015000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T003000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, Classroom 282\r\nSEQUENCE:0\r\nSUMMARY:Issues of Human Interface Design\r\nUID:tag:localist.com\\,2008:EventInstance_52118856261995\r\nURL:https://events.stanford.edu/event/issues-of-human-interface-design-2228\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for the third seminar\\, on Tuesday\\, January 17\\, at 4:\r\n 30pm in Pigott Hall 252 for a conversation with Professor Carlos Grenier (F\r\n lorida International University) on: Early Modernity through Biographical H\r\n istory: The Yazıcıoğlu Family of the Fifteenth-Century Ottoman Frontier\\n\\n\r\n The seminar is part of the series\\, Early Modernity Beyond the West\\, which\r\n  will take place in the winter and spring 2026. \\n\\n \\n\\nEarly Modernity Be\r\n yond the West aims to investigate whether and how the concept of early mode\r\n rnity can be extended to Central and Eastern Europe\\, the Middle East\\, Afr\r\n ica\\, and Asia between the 15th and the 18th centuries. The project brings \r\n together professors\\, postdoctoral fellows\\, and graduate students from Sta\r\n nford and from other institutions\\, who work in the early modern field in h\r\n istory\\, art history\\, literature\\, and religion. In this way\\, the group f\r\n osters reflection on the features and issues of early modernity.\\n\\n \\n\\nAs\r\n sessing the breadth and relevance of early modernity for Central and Easter\r\n n Europe\\, the Middle East\\, Africa\\, and Asia helps reconsider the concept\r\n  on a global scale. In turn\\, defining early modernity as a transnational c\r\n oncept allows for more accurate analyses of each region’s specificities. He\r\n nce\\, the group’s guiding questions are: What are the defining traits of ea\r\n rly modernity? What are the specificities of local experiences of early mod\r\n ernity? How do these specificities combine to delineate early modernity as \r\n a transnational concept?\\n\\nThe series is a Research Unit within the DLCL a\r\n nd takes place in collaboration with the Abbasi Program\\, CMEMS\\, CREEES\\, \r\n the Department of History\\, the Department of Slavic Languages and Literatu\r\n res\\, EALC\\, Religious Studies\\, and Renaissances. \\n\\nRSVP for the Carlos \r\n Grenier talk and to access the Zoom link.\r\nDTEND:20260218T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 252\r\nSEQUENCE:0\r\nSUMMARY:UPDATE: Zoom Event: Early Modernity Beyond the West: Carlos Grenier\r\n  (Florida International University)\r\nUID:tag:localist.com\\,2008:EventInstance_51773093214511\r\nURL:https://events.stanford.edu/event/early-modernity-beyond-the-west-carlo\r\n s-grenier-florida-international-university\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the French-Speaking Worlds: Then and Now for a talk\r\n  entitled \"After the Coup: Literature in an Age of Tyranny\" by Maurice Samu\r\n els (Yale). \\n\\nAbstract: \\nBaudelaire declared in a letter that “Le 2 déce\r\n mbre m’a physiquement dépolitiqué\\,” but scholars have long refused to take\r\n  him at his word. This paper reconsiders Baudelaire’s reaction to the coup \r\n d’état of December 2\\, 1851\\, in the light not only of his famously ambiguo\r\n us political pronouncements but also of his repeated requests for subsidies\r\n  from the Second Empire regime.  It concludes with a reading of the prose p\r\n oem “Assommons les pauvres!” (1865) as a belated response—a response produc\r\n ed\\, as it were\\, après coup—to the violence of “le 2 décembre\\,” an event \r\n with uncomfortable but perhaps instructive parallels to our own political m\r\n oment.\\n\\nBio: \\nMaurice Samuels is the Betty Jane Anlyan Professor of Fren\r\n ch at Yale University. He specializes in the literature and culture of nine\r\n teenth-century France. His broad interests include investigating the origin\r\n s of our cultural modernity\\, and tracing how new forms of subjectivity—and\r\n  new ideas about history\\, politics\\, race\\, and the novel—took shape in th\r\n e period following the French Revolution. He is the award-winning author of\r\n  five books and several edited volumes. His most recent book\\, a biography \r\n of Alfred Dreyfus\\, was published in the Jewish Lives series (Yale Universi\r\n ty Press) in February 2024. A recipient of the Guggenheim Fellowship and of\r\n  the New York Public Library Cullman Center Fellowship\\, he has published a\r\n rticles on diverse topics\\, including romanticism and realism\\, aesthetic t\r\n heory\\, representations of the Crimean War\\, boulevard culture\\, and writer\r\n s from Balzac to Zola. He served as chair of Yale’s Judaic Studies Program \r\n and has directed the Yale Program for the Study of Antisemitism since 2011.\r\n \\n\\nRSVP for talk by Maurice Samuels\\n\\nHosted by the French-Speaking World\r\n s: Then and Now Focal Group\\, sponsored by the Division of Literatures\\, Cu\r\n ltures\\, and Languages Research Unit and co-sponsored by the France-Stanfor\r\n d Center and Stanford Global Studies. This event is part of Stanford Global\r\n  Studies’ Global Research Workshop Program.\r\nDTEND:20260218T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T010000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 216\r\nSEQUENCE:0\r\nSUMMARY:French-Speaking Worlds: \"After the Coup: Literature in an Age of Ty\r\n ranny\" by Maurice Samuels (Yale) \r\nUID:tag:localist.com\\,2008:EventInstance_51905572269441\r\nURL:https://events.stanford.edu/event/french-speaking-worlds-after-the-coup\r\n -literature-in-an-age-of-tyranny-by-maurice-samuelsyale\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Join us for Game Nights every Tuesday in Green Library from 5pm\r\n -8pm in the IC Classroom (near the Reference Desk) of Green Library! These \r\n Game Nights will be open to all\\, from those who can only stop by briefly t\r\n o those who can be there for the entire time.\\n\\nIf you would like to be ad\r\n ded to the Game Nights @ Green mailing list\\, suggest a game\\, or if you ha\r\n ve other feedback\\, please fill out this contact form.\r\nDTEND:20260218T040000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T010000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, IC Classroom\r\nSEQUENCE:0\r\nSUMMARY:Game Nights @ Green\r\nUID:tag:localist.com\\,2008:EventInstance_51808876179839\r\nURL:https://events.stanford.edu/event/game-nights-green-3104\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260218T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T013000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663075758\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change during Winter Quarter.\\n\\nRelax\r\n  + Center with Yoga Class with Diane Saenz. A traditional\\, easy-to-learn s\r\n ystem of Hatha Yoga which encourages proper breathing and emphasizes relaxa\r\n tion.  A typical class includes breathing exercises\\, warm-ups\\, postures a\r\n nd deep relaxation.  The focus is on a systematic and balanced sequence tha\r\n t builds a strong foundation of basic asanas from which variations may be a\r\n dded to further deepen the practice.  This practice is both for beginners a\r\n nd seasoned practitioners alike to help calm the mind and reduce tension.\\n\r\n \\nDiane Saenz (she/her) is a yoga instructor with more than 20 years of exp\r\n erience in the use of yoga and meditation to improve mental and physical we\r\n ll-being.  Following a classical approach\\, she leans on asana and pranayam\r\n a as tools to invite participants into the present moment.  Diane completed\r\n  her 500 hour level training with the International Sivananda Yoga Vedanta \r\n Organization in South India\\, followed by specializations in adaptive yoga \r\n and yoga for kids.  She has taught adult and youth audiences around the glo\r\n be.\r\nDTEND:20260218T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Old Union\\, Room 302)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932526681154\r\nURL:https://events.stanford.edu/event/yoga-tuesdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:This event is co-sponsored by the Center for South Asia and the\r\n  Department of Art and Art History\\n\\nAbout the film\\nVasudhaiva Kutumbakam\r\n \\, a Sanskrit phrase meaning “the world is family” is a universalist idea t\r\n hat competes with dominant\\, exclusivist Hindu notions of caste. Anand grew\r\n  up in a milieu that questioned the latter. The family’s elders had fought \r\n for India’s Independence but rarely spoken about it. ‘Liberty\\, Equality\\, \r\n Fraternity’\\, words enshrined in India’s Constitution\\, were subconsciously\r\n  internalized.\\n\\nAs his parents aged\\, Anand began to film with whatever e\r\n quipment was at hand. Soon birthdays and family gatherings gave way to oral\r\n  history. Revisiting home movie footage a decade after his parents had pass\r\n ed\\, was a revelation. Today self-confessed supremacists whose ideology onc\r\n e inspired the murder of Mahatma Gandhi\\, are in power. As they rewrite Ind\r\n ia’s history\\, memories of the past have become more precious than mere per\r\n sonal nostalgia.\\n\\nAbout the filmmaker \\nAnand Patwardhan has been making \r\n socio-political documentaries for over five decades pursuing diverse and co\r\n ntroversial issues that are at the crux of social and political life in Ind\r\n ia. Many of his films were at one time or another banned by state televisio\r\n n channels in India and became the subject of litigation by Anand who succe\r\n ssfully challenged the censorship rulings in court.\\n\\nAnand received a B.A\r\n . in English Literature from Bombay University in 1970\\, won scholarships t\r\n o get another B.A. in Sociology from Brandeis University in 1972 and a Mast\r\n er’s degree in Communications from McGill University in 1982.\\n\\nAnand has \r\n been an activist ever since he was a student — having participated in the a\r\n nti-Vietnam War movement\\; being a volunteer in Caesar Chavez’s United Farm\r\n  Workers Union\\; working in a rural development and education project in ce\r\n ntral India\\; in the Bihar anti-corruption movement in 1974-75 and in the c\r\n ivil liberties and democratic rights movement during and after the 1975-77 \r\n Emergency. Since then he has been active in movements for housing rights of\r\n  the urban poor\\, for communal harmony and participated in movements agains\r\n t unjust\\, unsustainable development\\, militarism and nuclear nationalism. \r\n He describes himself as “a non-serious human being forced by circumstances \r\n to make serious films”.\r\nDTEND:20260218T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T013000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:“The World is Family”: Film Screening with director Anand Patwardha\r\n n\r\nUID:tag:localist.com\\,2008:EventInstance_50783424557963\r\nURL:https://events.stanford.edu/event/the-world-is-family-film-screening-wi\r\n th-director-anand-patwardhan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Sign Up Now\\n\\nRomeo and Juliet find romance in a fiercely divi\r\n ded society\\, where loving may be the most dangerous act of all. Combining \r\n wild humor\\, breathtaking language\\, and an anarchy of the imagination\\, Sh\r\n akespeare’s classic tale hurdles at a feverish pace\\, as these star-crossed\r\n  lovers race to avoid their deadly fate. Setting the play in a cosmopolitan\r\n  world of Baroque excess\\, this production will immerse audiences in an exp\r\n losive exploration of the age-old potential for neighbors to be divided by \r\n hate\\, united by love\\, and driven by burning passion.\\n\\nStanford TAPS see\r\n ks to build a diverse cast for this production and encourages members of an\r\n y race\\, gender identity\\, and ability to audition. If any accessibility ac\r\n commodations are needed please email tapsinformation@stanford.edu for assis\r\n tance.\r\nDTEND:20260218T050000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T020000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, Lounge\r\nSEQUENCE:0\r\nSUMMARY:AUDITIONS | \"Romeo & Juliet\" (Spring 2026 Main Stage)\r\nUID:tag:localist.com\\,2008:EventInstance_51524299775578\r\nURL:https://events.stanford.edu/event/auditions-romeo-juliet\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Stanford’s Distinguished Careers Institute (DCI) invites Fellow\r\n s to a year on campus after they have already had remarkable careers.  They\r\n  have so much to offer based on their insights from experience\\, and DCI Fe\r\n llows interested in energy and climate generously mentor and propel current\r\n  students in their pursuits.  This is your chance to engage some of the mos\r\n t avid DCI Fellows & friends in energy!\\n\\nDCI Fellows include:\\n\\nTony Sta\r\n yner\\, Managing Director\\, Excelsior Impact FundRahul Dhir\\, Former CEO\\, T\r\n ullow plcBeth Singer\\, Entrepreneur\\, Board Director\\, PhilanthropistMark A\r\n dams\\, Storyteller\\, Teacher\\, Advisor\\, Traveler \\n\\nEmcee:  Explore Energ\r\n y House Leader\\, Anders Luffman\r\nDTEND:20260218T032000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T020000Z\r\nGEO:37.425097;-122.181554\r\nLOCATION:Lyman Atrium\r\nSEQUENCE:0\r\nSUMMARY:Energy Transitions at Scale: Dialogues with Distinguished Career In\r\n stitute (DCI) Fellows\r\nUID:tag:localist.com\\,2008:EventInstance_52092739747243\r\nURL:https://events.stanford.edu/event/energy-transitions-at-scale-dialogues\r\n -with-distinguished-career-institute-dci-fellows\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Social Event/Reception\r\nDESCRIPTION:Interested in civic issues and the questions shaping public lif\r\n e today?\\n\\nJoin Stanford faculty and instructors for conversations that bu\r\n ild on the topics of COLLEGE 102. Civic Salons are open to all undergraduat\r\n e students\\, and refreshments are provided.\\n\\nSchedule:\\n\\nThursday\\, Janu\r\n ary 15\\, 6:00 p.m. at Castaño and CedroThursday\\, January 22\\, 6:00 p.m. at\r\n  Crothers and RobleThursday\\, January 29\\, 6:00 p.m. at Larkin and PotterTh\r\n ursday\\, February 5\\, 6:00 p.m. at Casa ZapataThursday\\, February 12\\, 6:00\r\n  p.m. at Robinson and West Florence MooreTuesday\\, February 17\\, 7:00 p.m. \r\n at DonnerThursday\\, February 26\\, 6:00 p.m. at Arroyo and PotterThursday\\, \r\n March 5\\, 6:00 p.m. at Trancos and West Florence Moore\r\nDTEND:20260218T040000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T030000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Civic Salons: Winter 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51825157080705\r\nURL:https://events.stanford.edu/event/civic-salons-winter-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting,Workshop,Other\r\nDESCRIPTION:Sign-Up for our FREE Upstander Trainings facilitated by PEERs a\r\n nd in collaboration with the Well House! \\n\\nUpstanders are individuals who\r\n  witness a behavior that could lead to something high risk or harmful\\, and\r\n  make the choice to intervene. Learn from fellow PEERs how you can create a\r\n  culture of consent within and outside your communities! \\n\\nUpstander Trai\r\n nings this quarter will take place in the Well House\\, from 7-8pm on Januar\r\n y 20th\\, February 2nd\\, and February 17th\\n\\nRSVP Here! Drop-ins are also w\r\n elcome but RSVP helps us know how much boba tea to bring!\\n\\nDrop ins welco\r\n me!Open to all Stanford UndergraduatesIf you have any questions about this \r\n event please email peerprogram@stanford.edu\r\nDTEND:20260218T040000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T030000Z\r\nGEO:37.421896;-122.169177\r\nLOCATION:The Well House\\, 562 Mayfield Ave\\, Stanford\\, CA\\, 94305\\, The Lo\r\n bby\r\nSEQUENCE:0\r\nSUMMARY:Upstander Workshops with PEERs: FREE boba!\r\nUID:tag:localist.com\\,2008:EventInstance_51499690082555\r\nURL:https://events.stanford.edu/event/upstander-workshops-with-peers-free-b\r\n oba-8366\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260218\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264968429\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260218\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355491808\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260218\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019655081\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260218\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Term withdrawal deadline\\; last day to submit Leave of Absence to w\r\n ithdraw from the University with a partial refund (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463319869648\r\nURL:https://events.stanford.edu/event/term-withdrawal-deadline-last-day-to-\r\n submit-leave-of-absence-to-withdraw-from-the-university-with-a-partial-refu\r\n nd-5-pm-5859\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a Leave of Absence to withdraw f\r\n rom the university with a partial refund.\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260218\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Term Withdrawal Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472521917201\r\nURL:https://events.stanford.edu/event/winter-quarter-term-withdrawal-deadli\r\n ne-1124\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260218T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353482610\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260218T200000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105016953\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260219T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382743715\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260219T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114937280\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Noon Ecumenical Service with The Rev. Dr. Zandra L. Jordan\\, Di\r\n rector of the Hume Center for Writing and Speaking at Stanford University a\r\n nd a chaplain affiliate with Stanford’s Office for Religious and Spiritual \r\n Life\\, preaching.\\n\\nAsh Wednesday marks the start of Lent at Stanford Memo\r\n rial Church and takes place 46 days before Easter.\r\nDTEND:20260218T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Ash Wednesday Ecumenical Christian Service\r\nUID:tag:localist.com\\,2008:EventInstance_51933428168701\r\nURL:https://events.stanford.edu/event/ash-wednesday-ecumenical-christian-se\r\n rvice-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford Department of Medicine would like to invite all Stanfo\r\n rd community members to attend this instance of the Medicine Grand Rounds (\r\n MGR) series\\, which will feature a Reaven Lecture with Samuel Klein\\, MD\\, \r\n a prominent expert in metabolic health and nutrition at Washington Universi\r\n ty whose transformative research is redefining clinical practices related t\r\n o obesity\\, diabetes\\, and the interplay of diet and metabolic disease. In \r\n this presentation\\, Dr. Klein will break down the latest science on why som\r\n e bodies struggle more than others and how we can finally personalize the w\r\n ay we treat metabolic health.\\n\\nView accreditation info here.\\n\\nCME Activ\r\n ity ID: 56175\\n\\nText to 844-560-1904 for CME credit.\\n\\nIf you prefer to c\r\n laim credit online\\, click here.\r\nDTEND:20260218T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T200000Z\r\nLOCATION:Li Ka Shing Center\\, Berg Hall\r\nSEQUENCE:0\r\nSUMMARY:Beyond the Scale: Metabolic Heterogeneity in Obesity\r\nUID:tag:localist.com\\,2008:EventInstance_51933488015103\r\nURL:https://events.stanford.edu/event/medicine-grand-rounds-with-samuel-kle\r\n in-md\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Title: Climate-Driven Landslide Hazard: Enhancing Community Res\r\n ilience through Physics-Based Regional Simulations\\n\\n \\n\\nAbstract: Landsl\r\n ides remain a major global hazard\\, with thousands of events each year posi\r\n ng significant impacts to human life\\, infrastructure\\, critical lifelines\\\r\n , and ecosystems. Global climate change and evolving land-use practices are\r\n  expected to increase the frequency\\, severity\\, and spatial extent of land\r\n slides\\, further amplifying the socio-economic risks. While advanced consti\r\n tutive models enable detailed slope-stability analyses at the single-hillsl\r\n ope scale\\, a critical gap persists in assessing landslide hazards at the c\r\n ommunity scale. Addressing this gap is essential for improving resilience a\r\n nd informing effective mitigation strategies. Existing regional-scale model\r\n s often struggle to balance physical rigor\\, predictive accuracy\\, and comp\r\n utational efficiency. They rely either on empirical approaches with limited\r\n  physical basis or on mechanistic formulations that are highly sensitive to\r\n  data availability and quality. This study presents CRISIS (Coupled Regiona\r\n l Rainfall-Induced and Seismic Slope Instability Simulations)\\, a physics-b\r\n ased regional landslide prediction framework. It couples a pseudo-3D slope-\r\n stability formulation with a hydrological model capable of simulating trans\r\n ient three-dimensional groundwater flow. CRISIS operates in complementary b\r\n ack-analysis and forward-prediction modes\\, integrating multi-scale topogra\r\n phic\\, hydraulic\\, and hydrological data from remote sensing\\, geophysical \r\n surveys\\, and field and laboratory testing. Back-analysis of both failed an\r\n d stable slopes generates high-resolution spatial estimates of shear streng\r\n th. These estimates are iteratively refined and used for forward prediction\r\n  of landslide location\\, size\\, depth\\, and timing. Results reveal a strong\r\n  geospatial connection between hillslope location and dominant failure mech\r\n anisms. This emphasizes that landslide initiation is inherently geospatial \r\n and governed by coupled surface–subsurface processes. Application of the fr\r\n amework to Hurricane Maria in Puerto Rico\\, where over 70\\,000 landslides w\r\n ere triggered\\, demonstrates close agreement between predicted and observed\r\n  landslide locations\\, sizes\\, and timing. Additional validation against hi\r\n storical storm events further confirms the robustness of the approach. The \r\n broader vision of this work is to advance regional characterization\\, asses\r\n sment\\, and mitigation of cascading hazards through data-model integration.\r\n  This enables climate-driven risk quantification and supports early warning\r\n  systems for resilient communities. \\n\\nMirna Kassem is a Ph.D. candidate i\r\n n the Department of Civil and Environmental Engineering at the University o\r\n f California\\, Berkeley. She is a recipient of the Jane Lewis Fellowship at\r\n  UC Berkeley\\, and the Harry Bolton Seed Award.\\n\\nHer research focuses on \r\n assessing rainfall-induced and coseismic landslide hazards at the community\r\n  scale\\, with particular emphasis on the impacts of climate change and evol\r\n ving land-use practices. Her work integrates hydrologic groundwater process\r\n es\\, seismic-induced displacements\\, and regional slope stability modeling \r\n to better understand how interacting physical processes drive landslide ini\r\n tiation and subsequent cascading hazards. This research contributes to a br\r\n oader vision of advancing predictive modeling frameworks that support risk-\r\n informed decision-making\\, resilient communities\\, and sustainable infrastr\r\n ucture systems.\\n\\nMirna is deeply committed to teaching\\, mentoring\\, and \r\n creating engaging learning environments that inspire the next generation of\r\n  Civil and Environmental engineers. She received her B.E. in Civil and Envi\r\n ronmental Engineering from the American University of Beirut and her M.S. i\r\n n Geosystems Engineering from the University of California\\, Berkeley.\r\nDTEND:20260218T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T200000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 299\r\nSEQUENCE:0\r\nSUMMARY:Civil & Environmental Engineering Seminar Series\r\nUID:tag:localist.com\\,2008:EventInstance_52056094408083\r\nURL:https://events.stanford.edu/event/civil-environmental-engineering-semin\r\n ar-series-5692\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260219T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561111899\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The fear of public speaking ranks amongst the top fears out the\r\n re. But there is hope! You can learn many foundational techniques to help y\r\n ou feel and appear more confident. Come learn about several such practical \r\n tips to apply to your public speaking.\\n\\nExperience Level: Entry-Level\\n\\n\r\n Register Here\\n\\nFacilitated by:  Matt Abrahams\\, Lecturer in Organizationa\r\n l Behavior\\, GSB\\n\\nAbout Quick Bytes:\\n\\nGet valuable professional develop\r\n ment wisdom that you can apply right away! Quick Bytes sessions cover a var\r\n iety of topics and include lunch. Relevant to graduate students at any stag\r\n e in any degree program.\\n\\nSee the full Quick Bytes schedule\r\nDTEND:20260218T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T201500Z\r\nLOCATION:Tresidder Memorial Union\\, Oak West Lounge\r\nSEQUENCE:0\r\nSUMMARY:Quick Bytes: Speaking Up without Freaking Out\r\nUID:tag:localist.com\\,2008:EventInstance_51382945536668\r\nURL:https://events.stanford.edu/event/quick-bytes-speaking-up-without-freak\r\n ing-out\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Abstract\\n\\nGeologic hydrogen\\, including both naturally occurr\r\n ing and stimulated\\, is a promising primary energy resource. The Earth is a\r\n  natural laboratory where hydrogen can be observed from surface features (e\r\n .g.\\, springs\\, fairy circles) and subsurface structures (e.g. geothermal w\r\n ells\\, chromite mines). The Earth is also a natural factory where both natu\r\n ral and stimulated hydrogen can be generated through water–rock reactions s\r\n uch as serpentinization -- a highly complex set of coupled chemo-mechanical\r\n  processes (Hu\\, 2025a). The development of geologic hydrogen can be accele\r\n rated significantly by leveraging decades of technologies developed in indu\r\n stries such as geothermal (Hu et al.\\, 2026)\\, with a key distinction of H2\r\n  generation.\\n\\nIn this talk\\, Hu will present several major factors that c\r\n ontrol the economics of stimulated geologic hydrogen: the efficiency of H₂ \r\n extraction and injection strategies\\, stress-mediated reaction rates\\, frac\r\n ture density\\, and water consumption and regional water availability. First\r\n \\, a novel cyclic injection approach that enhances H₂ extraction will be in\r\n troduced. This technology exploits the interplay between two-phase flow and\r\n  fracture geometry and has been tested using both numerical modeling and la\r\n boratory experiments.\\n\\nTo investigate the chemo-mechanical controls on H₂\r\n  generation\\, a previously developed modeling framework\\, NMM–Crunch (Hu et\r\n  al.\\, 2021)\\, has been extended to account for stress-mediated mineral dis\r\n solution and growth within a new unified chemo-mechanical rate law. The mod\r\n el has been applied to simulate H₂ generation in partially serpentinized ro\r\n cks and it demonstrates that stress suppresses serpentinization reactions\\,\r\n  thereby reducing H₂ generation rates.\\n\\nFinally\\, using H₂ generation rat\r\n es obtained from experiments (Hu\\, 2025b) at different temperatures with va\r\n rying fracture densities and across multiple length scales\\, Hu conducted a\r\n  techno-economic analysis of stimulated geologic hydrogen for two potential\r\n  sites in CA with different water supply scenarios. The results show that r\r\n eaction rates\\, controlled primarily by fracture density\\, as well as regio\r\n nal water availability and supply\\, are both critical factors governing the\r\n  cost of stimulated geologic hydrogen. These findings highlight key interdi\r\n sciplinary research areas needed for the future success of geologic hydroge\r\n n.\\n\\n \\n\\nBio\\n\\nDr. Mengsu Hu is a Staff Scientist at the Lawrence Berkel\r\n ey National Laboratory. Her research focuses on multiscale numerical modeli\r\n ng and machine learning for analyzing coupled thermal-hydro-mechanical-chem\r\n ical (THMC) processes from fundamental Earth science to subsurface engineer\r\n ing systems. Since 2024\\, Dr. Hu has led multiple projects on geologic hydr\r\n ogen\\, studying cyclic injection for economic and seismic safe geologic hyd\r\n rogen generation and production (funded by ARPA-E)\\, anisotropic stress con\r\n trol on serpentinization (funded by BES)\\, and pathways from enhanced geoth\r\n ermal systems to stimulated geologic hydrogen (newly funded by GTO). Dr. Hu\r\n  is serving on the Board of Directors of American Rock Mechanics Associatio\r\n n (ARMA). Since 2022\\, she has been invited to serve on the Editorial Board\r\n  for Rock Mechanics and Rock Engineering (Associate Editor)\\, PNAS Nexus of\r\n  the National Academy of Sciences (NAS)\\, Journal of Rock Mechanics and Geo\r\n technical Engineering\\, International Journal of Rock Mechanics and Mining \r\n Sciences\\, and Geomechanics and Geophysics for Geo-Energy and Geo-Resources\r\n . In 2022\\, Dr. Hu was selected as a participant of National Academy of Eng\r\n ineering (NAE) U.S. Frontiers of Engineering (FOE) symposium.\\n\\n \\n\\nResea\r\n rch/Related Papers\\n\\nHu\\, M. (2025a). Geologic hydrogen production: Geomec\r\n hanics\\, reactive fluid transport\\, and induced seismicity. In Frontiers in\r\n  Geologic Hydrogen\\, National Academies Meeting. Link\\n\\nHu\\, M.\\, Schill\\,\r\n  E.\\, Rutqvist\\, J.\\, Steefel\\, C.\\, & Weber\\, A. (2026). From enhanced geo\r\n thermal systems (EGS) to stimulated geologic hydrogen. DOE GTO Report\\, Law\r\n rence Berkeley National Laboratory\\, Berkeley\\, CA.\\n\\nHu\\, M.\\, Steefel\\, \r\n C. I.\\, & Rutqvist\\, J. (2021). Microscale mechanical–chemical modeling of \r\n granular salt: Insights for creep. Journal of Geophysical Research: Solid E\r\n arth\\, 126(12)\\, e2021JB023112.\\nhttps://agupubs.onlinelibrary.wiley.com/do\r\n i/full/10.1029/2021JB023112\\n\\nHu\\, M. (2025b). Toward economic and seismic\r\n -safe geologic hydrogen. October 10\\, 2025\\, Warren Distinguished Lecture S\r\n eries\\, University of Minnesota\\, Minneapolis\\, MN\\, United States.\\nhttps:\r\n //cse.umn.edu/cege/events/toward-economic-and-seismic-safe-geologic-hydroge\r\n n\r\nDTEND:20260218T212000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T203000Z\r\nGEO:37.426823;-122.174006\r\nLOCATION:Green Earth Sciences Building\\, 104\r\nSEQUENCE:0\r\nSUMMARY:ESE Seminar - Mengsu Hu: \"Geologic Hydrogen -- From Chemo-Mechanics\r\n  to Economics\"\r\nUID:tag:localist.com\\,2008:EventInstance_52066602123216\r\nURL:https://events.stanford.edu/event/ese-seminar-mengsu-hu-geologic-hydrog\r\n en-from-chemo-mechanics-to-economics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Ann Tate\\, \"Immune\r\n  system evolution in a variable world\"\r\nDTEND:20260218T213000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T203000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Ann Tate\\, \"Immune sys\r\n tem evolution in a variable world\"\r\nUID:tag:localist.com\\,2008:EventInstance_51143351551556\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-ann-tate-tbd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260218T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T203000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Flute Students of Melody Holmes\r\nUID:tag:localist.com\\,2008:EventInstance_51463171080372\r\nURL:https://events.stanford.edu/event/noon-holmes-win26-2\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Curious about the richly detailed facsimile copies of illuminat\r\n ed manuscripts in the library collection? Join us as we host Giovanni Scorc\r\n ioni\\, facsimile edition expert and founder of FacsimileFinder.com\\, in a d\r\n iscussion about the history\\, production\\, and market of facsimiles\\, as we\r\n ll as use cases in the library\\, the classroom\\, the studio\\, and beyond.\\n\r\n \\nPlease RSVP if you would like to attend.\\n\\nCo-sponsored by Stanford Univ\r\n ersity Libraries and Stanford Manuscript Sciences.\r\nDTEND:20260218T220000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T210000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Illuminated Manuscript Facsimiles: from Production to Engagement\r\nUID:tag:localist.com\\,2008:EventInstance_52082419830620\r\nURL:https://events.stanford.edu/event/illuminated-manuscript-facsimiles-fro\r\n m-production-to-engagement\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Do you have questions about requirements and logistics surround\r\n ing your degree? Drop-In and get answers!\\n\\nThis is for current Earth Syst\r\n ems undergrad and coterm students.\r\nDTEND:20260218T223000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T213000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Drop-In Advising (Undergrad & Coterm majors)\r\nUID:tag:localist.com\\,2008:EventInstance_51932797181990\r\nURL:https://events.stanford.edu/event/earth-systems-drop-in-advising-underg\r\n rad-coterm-majors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The Global Studies in Migration & Diaspora Research Workshop is\r\n  excited to announce that the second Winter quarter meeting will feature Vi\r\n ctoria Huynh\\, a PhD candidate in the Ethnic Studies department at UC Berke\r\n ley. Join us for a presentation titled\\, \"Criminalized survivors and the fe\r\n minist work of fighting deportation.\" The research paper will be circulated\r\n  beforehand. Food and refreshments will be provided at this event. The pres\r\n entation will be followed by a Q&A and an open discussion.\\n\\nPaper Abstrac\r\n t: Situated in critical migration and refugee studies\\, alongside a lineage\r\n  of anti-carceral feminist organizing\\, this article in progress examines t\r\n he participatory defense campaign of Ny Nourn\\, a Cambodian-American refuge\r\n e and survivor of domestic violence who was incarcerated\\, then detained to\r\n  await deportation to the country her family once fled. Ny’s life as both r\r\n efugee and survivor complicates the assumption that she had been rescued vi\r\n a resettlement to the United States\\, a process which instead entrapped her\r\n  within the intimate violence of abuse and the structural violence of the c\r\n riminal legal system. Yet in over 16 years of incarceration and detention a\r\n longside other survivors\\, Ny also built the organizing strategies to fight\r\n  for her freedom from deportation. The article asks: how might a framework \r\n of survival—or one’s lived experiences with gender-based violence—enrich ou\r\n r understandings of immigrant and refugee captivity\\, and of carceral punis\r\n hment? How can survival become a political foundation with which to challen\r\n ge our punitive immigration system?\\n\\nSpeaker Bio: Victoria Huynh is a PhD\r\n  candidate in the Ethnic Studies department at UC Berkeley. Her dissertatio\r\n n centers the criminalized deportations of Southeast Asian refugees and ens\r\n uing social movements to interrupt cycles of displacement and captivity.\\n\\\r\n nPlease RSVP HERE.\r\nDTEND:20260218T233000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T213000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, SHC Board Room\r\nSEQUENCE:0\r\nSUMMARY:Victoria Hyunh | Criminalized survivors and the feminist work of fi\r\n ghting deportation\r\nUID:tag:localist.com\\,2008:EventInstance_52056128870884\r\nURL:https://events.stanford.edu/event/victoria-hyunh-criminalized-survivors\r\n -and-the-feminist-work-of-fighting-deportation\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Natural Climate Solutions Initiative for a discussion \r\n with David Coomes\\, Professor of Forest Ecology and Conservation at Cambrid\r\n ge University.\\n\\nRapid decarbonization and conservation are both essential\r\n  to addressing climate change\\, with tropical forests playing a critical ro\r\n le in achieving net-zero emissions.\\n\\nDrawing on research from the Cambrid\r\n ge Centre for Carbon Credits (4C)\\, Coomes will explore how forest-based na\r\n ture-based climate solutions seek to reduce deforestation and restore degra\r\n ded landscapes through credible carbon markets —and why these approaches ha\r\n ve struggled to scale. \\n\\nFor more information\\, contact: toshea@stanford.\r\n edu.\\n\\nSpeakers:\\nDr. David Coomes\\, University of Cambridge. \\nDavid Coom\r\n es is a multidisciplinary scientist dedicated to nature protection and ecos\r\n ystem restoration. As the Professor of Forest Ecology and Conservation at C\r\n ambridge University\\, he leads two significant research initiatives: the NE\r\n RC Centre for Landscape Regeneration\\, which explores nature-based solution\r\n s in the UK\\, and the University's Centre for Earth Observation. His work b\r\n ridges the gap between ecological research and practical conservation effor\r\n ts.\\n\\nModerated by Professor Adam Pellegrini\\, Assistant Professor in Eart\r\n h Systems Science\\, Stanford University.\r\nDTEND:20260218T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T220000Z\r\nGEO:37.425273;-122.172422\r\nLOCATION:Press Building / Sustainability Accelerator\\, 106\r\nSEQUENCE:0\r\nSUMMARY:Forest-based natural climate solutions: Is there still hope?\r\nUID:tag:localist.com\\,2008:EventInstance_52013922291134\r\nURL:https://events.stanford.edu/event/forest-based-natural-climate-solution\r\n s-is-there-still-hope\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop,Other\r\nDESCRIPTION:Bring whatever LaTeX documents you are working on and get help \r\n on your sticking points!\\n\\nThis event will be held Huang 219.\r\nDTEND:20260219T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260218T220000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 219\r\nSEQUENCE:0\r\nSUMMARY:LaTeX Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_51898373041365\r\nURL:https://events.stanford.edu/event/latex-office-hours-1115\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The Program in Native American Studies warmly invites you to an\r\n  informational session. There will be a 15-minute presentation on the progr\r\n am\\, major and minor requirements\\, course offerings\\, and the declaration \r\n process.\\n\\nThe remaining time will be for students to meet and talk to pro\r\n gram leadership\\, current students\\, Native American Studies lecturers\\, an\r\n d other community members. Students who are interested in checking their de\r\n gree progress or would like to declare on the spot can use this time to mee\r\n t with the CCSRE Student Services Officer individually. \\n\\nSnacks and drin\r\n ks will be provided!\r\nDTEND:20260219T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T000000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, 361J\r\nSEQUENCE:0\r\nSUMMARY:Native American Studies Program Info Session\r\nUID:tag:localist.com\\,2008:EventInstance_52013811890401\r\nURL:https://events.stanford.edu/event/native-american-studies-program-info-\r\n session\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Congressman Jim Clyburn (D-SC) will be interviewed by Congressm\r\n an Ro Khanna (D-CA) regarding Congressman Clyburn’s powerful\\, inspirationa\r\n l new book\\, The First Eight: A Personal History of the Pioneering Black Co\r\n ngressmen Who Shaped a Nation. Congressman Clyburn shares these men’s stori\r\n es\\, as they pursued America’s great promise of equality for all. Through t\r\n he trials\\, triumphs\\, and challenges that all nine men faced\\, Congressman\r\n  Clyburn reveals an insightful new way of understanding the complex period \r\n between the Civil War and the present\\, one that until now has buried their\r\n  life stories. Their story is our story\\, offering the lessons of history t\r\n o help propel us into a more just and equitable future.\\n\\nThis event is co\r\n -sponsored by the Martin Luther King\\, Jr. Research and Education Institute\r\n \\, Stanford Center for Racial Justice\\, Department of African and African A\r\n merican Studies\\, and Stanford in Government.\r\nDTEND:20260219T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T000000Z\r\nGEO:37.423877;-122.167441\r\nLOCATION:Law School\\, Room 290\r\nSEQUENCE:0\r\nSUMMARY:The First Eight: A Fireside chat with Congressman Jim Clyburn\r\nUID:tag:localist.com\\,2008:EventInstance_52013838975980\r\nURL:https://events.stanford.edu/event/the-first-eight\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:She spearheaded some of the greatest battles for women’s and ga\r\n y rights. A brilliant and sexy superstar who inspired thousands. So how com\r\n e you never heard of Sally Gearhart?\\n\\nSally! highlights the life and lega\r\n cy of Sally Gearhart—a charismatic\\, trailblazing lesbian-feminist\\, activi\r\n st\\, professor\\, and fantasy author. Balancing humor\\, insight\\, and heart\\\r\n , the film is at once a celebration of a radical icon\\, a glimpse into quee\r\n r life and culture in 1970s and 80s San Francisco\\; a meditation on the ten\r\n sions inherent in revolutionary moments\\, and a powerful reflection on the \r\n lessons her work offers for today’s struggles for civil rights\\, justice\\, \r\n and equality.\\n\\n“Funny\\, provocative\\, and deeply moving” – The Boston Glo\r\n be\\n\\nAbout the filmmaker Deborah Craig:\\n\\nDeborah Craig is an award-winni\r\n ng documentary director and producer whose films use compelling personal st\r\n ories to raise awareness about the challenges and strengths of underreprese\r\n nted communities. Sally!—her first feature-length documentary—premiered in \r\n 2024 and has since screened at over 50 festivals in the U.S. and around the\r\n  globe. \\n\\nRSVP here!\r\nDTEND:20260219T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T010000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 4th Floor\r\nSEQUENCE:0\r\nSUMMARY:Sally! Film Screening & Filmmaker Talk\r\nUID:tag:localist.com\\,2008:EventInstance_51834794050036\r\nURL:https://events.stanford.edu/event/sally-film-screening-director-talk\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change in Winter Quarter.\\n\\nThis all-\r\n levels yoga class offers a balanced\\, accessible practice designed to suppo\r\n rt both physical ease and mental clarity. Classes typically integrate mindf\r\n ul movement\\, breath awareness\\, and simple contemplative elements to help \r\n release accumulated tension while maintaining stability and strength. Postu\r\n res are approached with options and modifications\\, making the practice app\r\n ropriate for a wide range of bodies and experience levels. Emphasis is plac\r\n ed on sustainable movement\\, nervous system regulation\\, and cultivating pr\r\n actices that translate beyond the mat and into daily life.\\n\\nSara Elizabet\r\n h Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yoga Philosophy from the\r\n  Graduate Theological Union. Her dissertation\\, In Search of Sleep: A Compr\r\n ehensive Study of Yoga Philosophy\\, Therapeutic Practice\\, and Improving Sl\r\n eep in Higher Education\\, examines the integration of contemplative practic\r\n es within university settings. She joined the Stanford community in Spring \r\n 2024\\, where she has taught Sleep for Peak Performance and Meditation throu\r\n gh Stanford Living Education (SLED)\\, and currently teaches Yoga for Stress\r\n  Management in the Department of Athletics\\, Physical Education\\, and Recre\r\n ation (DAPER). Dr. Ivanhoe is the Founding Director Emeritus of YogaUSC and\r\n  previously lectured in USC’s Mind–Body Department\\, where she also served \r\n on faculty wellness boards. A practitioner and educator since 1995\\, she ha\r\n s completed three 500-hour teacher training programs. She has served as the\r\n  Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga for Dummies\\, and Crunc\r\n h: Yoga\\, and was the yoga columnist for Health magazine for three years. H\r\n er work has appeared in nearly every major yoga and wellness publication. I\r\n n 2018\\, she co-created Just Breathe\\, a yoga\\, breathwork\\, and meditation\r\n  initiative in partnership with Oprah Magazine. She is a recipient of USC’s\r\n  Sustainability Across the Curriculumgrant and the Paul Podvin Scholarship \r\n from the Graduate Theological Union. She currently serves as Interim Direct\r\n or of Events and Operations in Stanford’s Office for Religious and Spiritua\r\n l Life\\, where she also teaches weekly contemplative practice classes.\r\nDTEND:20260219T023000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Room 302)\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932582043203\r\nURL:https://events.stanford.edu/event/yoga-wednesdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:With Guest Speaker: Jordan Thomas (Author of When It All Burns:\r\n  Fighting Fire in a Transformed World (2025 National Book Award finalist)\\;\r\n  PhD candidate in cultural anthropology\\, UC Santa Barbara Fellow in the Sc\r\n ience and Technology Studies Program\\, Harvard Kennedy School)\\n\\nThis talk\r\n  draws on frontline experience from California's wildfires to examine the s\r\n tructural factors shaping the health impacts of climate change. Wildfires a\r\n re now among the United States' deadliest climate disasters\\, with smoke ex\r\n posure alone contributing\\, by conservative estimates\\, to more than ten th\r\n ousand deaths each year. Wildland firefighters work\\, live\\, and sleep on t\r\n he edges of these fires for months. Drawing on ethnographic fieldwork and t\r\n hree years of wildland firefighting experience\\, I trace the historical\\, p\r\n olitical\\, and sociocultural factors that shape climate impacts and concent\r\n rate them on some people and places with disproportionate violence.\\n\\nRSVP\r\n  FOR THE MEDICAL HUMANITIES EVENT HERE\\n\\nThe Medical Humanities Research W\r\n orkshop Series is made possible through the support of:\\n\\nStanford School \r\n of Medicine\\, Stanford Humanities Center\\, Stanford’s Division of Literatur\r\n es\\, Cultures & Languages\\, Stanford’s Department of Anthropology\r\nDTEND:20260219T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\r\nSEQUENCE:0\r\nSUMMARY:Medical Humanities: When It All Burns\r\nUID:tag:localist.com\\,2008:EventInstance_51578467908181\r\nURL:https://events.stanford.edu/event/medical-humanities-when-it-all-burns\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Students from Music 183C \"Interpretation of Musical Theater Rep\r\n ertoire\" perform a selection of musical theater favorites from the golden e\r\n ra of Broadway\\, featuring shows like Fiddler on the Roof\\, The Sound of Mu\r\n sic\\, Guys and Dolls\\, and more! \\n\\nAmission Information\\n\\nFree admission\r\nDTEND:20260219T030000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T013000Z\r\nGEO:37.424305;-122.170842\r\nLOCATION:Tresidder Union\\, CoHo\r\nSEQUENCE:0\r\nSUMMARY:That’s Entertainment! – MUSIC 183C\r\nUID:tag:localist.com\\,2008:EventInstance_52063729078063\r\nURL:https://events.stanford.edu/event/thats-entertainment\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Sign Up Now\\n\\nRomeo and Juliet find romance in a fiercely divi\r\n ded society\\, where loving may be the most dangerous act of all. Combining \r\n wild humor\\, breathtaking language\\, and an anarchy of the imagination\\, Sh\r\n akespeare’s classic tale hurdles at a feverish pace\\, as these star-crossed\r\n  lovers race to avoid their deadly fate. Setting the play in a cosmopolitan\r\n  world of Baroque excess\\, this production will immerse audiences in an exp\r\n losive exploration of the age-old potential for neighbors to be divided by \r\n hate\\, united by love\\, and driven by burning passion.\\n\\nStanford TAPS see\r\n ks to build a diverse cast for this production and encourages members of an\r\n y race\\, gender identity\\, and ability to audition. If any accessibility ac\r\n commodations are needed please email tapsinformation@stanford.edu for assis\r\n tance.\r\nDTEND:20260219T050000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T020000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, Lounge\r\nSEQUENCE:0\r\nSUMMARY:AUDITIONS | \"Romeo & Juliet\" (Spring 2026 Main Stage)\r\nUID:tag:localist.com\\,2008:EventInstance_51524299776603\r\nURL:https://events.stanford.edu/event/auditions-romeo-juliet\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Creative Writing Program is pleased to announce the next ev\r\n ent with the Stein Visiting Writer: A Reading with C Pam Zhang.\\n\\nThis eve\r\n nt is open to Stanford affiliates and the general public. Registration is e\r\n ncouraged but not required. Register here.\\n\\n____\\n\\nC Pam Zhang is the au\r\n thor of two novels\\, How Much of These Hills is Gold and Land of Milk and H\r\n oney. She is the winner of the Academy of Arts and Letters Rosenthal Award\\\r\n , the Asian/Pacific Award for Literature\\, the California Book Award\\, and \r\n a National Book Foundation 5 Under 35 Award. She has received fellowships f\r\n rom MacDowell\\, the New York Public Library's Cullman Center\\, and the Amer\r\n ican Library in Paris. Her writing appears in Best American Short Stories\\,\r\n  The Cut\\, The New Yorker\\, and The New York Times. Her work has been trans\r\n lated into twelve languages.\\n\\n____\\n\\nZhang is this year's Stein Visiting\r\n  Writer. Each year\\, the Creative Writing Program welcomes distinguished wr\r\n iters to host events and teach a Stanford writing seminar to undergraduates\r\n . These events and seminars are made possible with the generous support of \r\n Isaac and Madeline Stein.\r\nDTEND:20260219T053000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T040000Z\r\nGEO:37.423953;-122.171824\r\nLOCATION:Faculty Club\\, Cedar Room\r\nSEQUENCE:0\r\nSUMMARY:Reading with C Pam Zhang\\, the Stein Visiting Writer\r\nUID:tag:localist.com\\,2008:EventInstance_50721449759611\r\nURL:https://events.stanford.edu/event/reading-with-c-pam-zhang-the-stein-vi\r\n siting-writer\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Join us at On Call Café on Wednesday\\, February 18\\, from 9:00 \r\n to 10:30 p.m for Coffee Chats hosted by your ASSU Senators.\\n\\nShare your t\r\n houghts on health and safety at Stanford while enjoying a free drink! Visit\r\n  The Flourish\\, CAPS\\, and Well-Being Coaches to learn more about mental he\r\n alth and well-being resources and claim your exclusive \"Flourishing @ Stanf\r\n ord\" cap- a perfect way to showcase your commitment to student wellness!\\n\\\r\n n#FlourishTogether\r\nDTEND:20260219T063000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T050000Z\r\nGEO:37.425154;-122.170185\r\nLOCATION:On Call Café\r\nSEQUENCE:0\r\nSUMMARY:The Flourish & ASSU Senators @ On Call Café\r\nUID:tag:localist.com\\,2008:EventInstance_52063428205086\r\nURL:https://events.stanford.edu/event/the-flourish-assu-senators-on-call-ca\r\n fe\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260219\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264969454\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083907Z\r\nDTSTART;VALUE=DATE:20260219\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355493857\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Join the Japan Program of the Shorenstein Asia-Pacific Research\r\n  Center (APARC) at Stanford University for a full-day\\, in-person conferenc\r\n e on the sources of creation and innovation in the globally renowned conten\r\n t industries of Japan. \\n\\nBuilding on the success of last year’s conferenc\r\n e\\, we hear from the creative minds around live-action and animated films o\r\n f Japan that have garnered international accolades in recent years\\, and th\r\n e traditional cultural industries that continue to reinvent themselves afte\r\n r decades and even centuries since their foundation. The growing attention \r\n to Japanese culture and the increasing number of tourists visiting Japan en\r\n hanced the appeal of these cultural products\\, leading to global successes \r\n of Japanese films\\, music\\, food\\, clothes\\, and more. What are the reasons\r\n  for the immense appeal of Japanese content creations\\, and what drives Jap\r\n anese creators and innovators to produce and distribute them? \\n\\nThe morni\r\n ng sessions highlight Japanese film and animation\\, featuring creators and \r\n producers who share insights into creative processes\\, production decisions\r\n \\, and global distribution. The afternoon sessions turn to traditional cult\r\n ure and heritage-based industries\\, bringing together leaders from long-sta\r\n nding companies to explore how inherited values\\, craftsmanship\\, and organ\r\n izational philosophies are carried forward with constant reinterpretation t\r\n o adapt to the contemporary and international contexts.\\n\\nHeld at Stanford\r\n —where scholarship meets innovation—the conference reflects APARC Japan Pro\r\n gram’s mission to foster U.S.-Japan dialogue and connect academic insight w\r\n ith real-world cultural and creative transformation. Whether you are a film\r\n  enthusiast\\, a cultural practitioner\\, or a future creator\\, join us for e\r\n ngaging discussions about the drivers of Japanese creativity and its contin\r\n uing evolution.\\n\\n\\nNote: This event will be photographed and videotaped\\,\r\n  and by entering this venue\\, you consent to Stanford University and approv\r\n ed media using your image and likeness. Any photography and videography may\r\n  not be available for future viewing at a later date.\\n\\nMedia Advisory and\r\n  Press Contact\\n\\nJournalists interested in covering the conference should \r\n contact Shorenstein APARC’s Communications Manager\\, Michael Breger\\, at mb\r\n reger@stanford.edu by February 17 at 5 p.m. PT to register and receive accr\r\n editation. At the venue\\, they will be required to present a press credenti\r\n al from an established news organization. Freelance reporters should email \r\n a letter from the news organization for which they work to Michael Breger b\r\n y the February 17 deadline.\r\nDTEND:20260220T013000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T170000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, Bechtel Conference Center\\, 1st Floor\r\nSEQUENCE:0\r\nSUMMARY:Japan’s Global Content Industries: Innovations and Reinventions in \r\n Film\\, Animation\\, and Traditional Culture\r\nUID:tag:localist.com\\,2008:EventInstance_52021982546816\r\nURL:https://events.stanford.edu/event/japans-global-content-industries-inno\r\n vations-and-reinventions-in-film-animation-and-traditional-culture\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The Office of Academic Affairs (OAA) invites you to attend a Pr\r\n ofessoriate Lifecycle of Actions Overview meeting onThursday\\, February 19\\\r\n , from 9:00–10:00 a.m.\\n\\nThis session will include:\\n\\nDetailed Overview o\r\n f new OAA Lifecycle of Actions resource document\\n\\nBest practices for sear\r\n ch waiver\\, search report\\, and offer letter submissions and reviews\\n\\nTim\r\n e for questions and discussion with the OAA team \\n\\nPresented material\r\nDTEND:20260219T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Professoriate Lifecycle of Actions\r\nUID:tag:localist.com\\,2008:EventInstance_51314511654809\r\nURL:https://events.stanford.edu/event/professoriate-best-practices\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260219T180000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353483635\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260220T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382745764\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Unifying Principles of Membrane Adaptation to Pressure-Temperat\r\n ure Niches in the Ocean\\n\\nCell membranes are highly sensitive to changes i\r\n n pressure\\, temperature\\, and aqueous chemistry. This drives pronounced bi\r\n ochemical adaptation among marine life to protect membrane integrity and fu\r\n nction under diverse conditions. For fifty years\\, scientists have recogniz\r\n ed that organisms adjust the fatty (lipid) building blocks of their membran\r\n es to maintain optimal fluidity – a process called homeoviscosity. However\\\r\n , recent studies of comb jellies (ctenophores) from surface waters to 4 km \r\n depth have revealed a second\\, distinct mode of membrane adaptation: homeoc\r\n urvature. This process regulates the effective shape of lipid molecules in \r\n response to hydrostatic pressure\\, maintaining mechanical properties essent\r\n ial for membrane remodeling and embedded protein function. Pressure perturb\r\n s lipid shape more strongly than temperature does\\, making homeocurvature e\r\n specially important for deep-sea organisms and oceanic ecosystems. In addit\r\n ion to evidence for homeocurvature derived from ctenophores and engineered \r\n bacteria\\, I will share ongoing work assessing the generality of homeocurva\r\n ture and its interaction with homeoviscosity\\, which can involve evolutiona\r\n ry trade-offs. Shape-based lipid homeostasis is evident in yeast\\, marine b\r\n acteria\\, deep-sea fishes and diving mammals\\, suggesting widespread releva\r\n nce across marine ecological niches. As the abiotic factors defining these \r\n niches shift at unprecedented rates\\, it is increasingly urgent that we und\r\n erstand the unifying physical principles of membrane adaptation. Elucidatin\r\n g the underlying biochemistry and genetics across taxa will help predict ad\r\n aptive trajectories along the arc of global change.\r\nDTEND:20260219T181500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T171500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 292A (CIFE Classroom)\r\nSEQUENCE:0\r\nSUMMARY:Oceans Department Seminar - Jacob Winnikoff\r\nUID:tag:localist.com\\,2008:EventInstance_51825790370981\r\nURL:https://events.stanford.edu/event/oceans-department-faculty-search-semi\r\n nar-jacob-winnikoff\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Come celebrate Lunar New Year with us at our International Coff\r\n ee Social on Wednesday\\, February 18th\\, from 10:30 AM - 12:00 PM at the Be\r\n chtel International Center’s Assembly Room. Enjoy coffee\\, tea\\, and festiv\r\n e treats in a warm\\, welcoming space. Open to all students. Drop in anytime\r\n ! 🧧\r\nDTEND:20260219T203000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T183000Z\r\nGEO:37.423223;-122.172314\r\nLOCATION:Bechtel International Center\\, Assembly Room \r\nSEQUENCE:0\r\nSUMMARY:Lunar New Year Coffee Social \r\nUID:tag:localist.com\\,2008:EventInstance_52127320223646\r\nURL:https://events.stanford.edu/event/lunar-new-year-coffee-social\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:This class is co-sponsored by the Stanford WorkLife Office.\\n\\n\r\n Caring for ourselves and those we love as we age can bring about many quest\r\n ions about what to expect and hope for as time unfolds.\\n\\nIn this free web\r\n inar\\, we will provide guidance on forming long term care\\, health\\, legal\\\r\n , and financial goals for yourself or a care recipient\\, and how to build n\r\n etworks of support to meet your goals. We will discuss the spectrum of care\r\n \\, from non-skilled to skilled care\\, and the insurance and financial consi\r\n derations for each type of care. We will provide resources to guide you as \r\n you begin planning\\, with checklists and legal explainers to support you al\r\n ong the way.\\n\\nThis webinar is part of the Aging Wisely class series\\, pro\r\n viding a compassionate environment to explore your questions and concerns a\r\n nd help you gain a holistic perspective on how to approach long-term care p\r\n lanning for yourself or a loved one. Through presentations and online discu\r\n ssions\\, you will learn strategies and tools to help you assess your specif\r\n ic long-term care needs and explore solutions to common questions related t\r\n o care planning.\\n\\nWhether you are a caregiver to others or interested in \r\n your own future care\\, you will have the opportunity to develop a customize\r\n d long-term care roadmap supporting you to successfully plan for care\\, wit\r\n h the input\\, advice and support of an expert in gerontology.\\n\\nThis class\r\n  will be recorded and a one-week link to the recording will be shared with \r\n all registered participants. To receive incentive points\\, attend at least \r\n 80% of the live session or listen to the entire recording within one week. \r\n  Request disability accommodations and access info.\\n\\nInstructor: Paula Wo\r\n lfson\\, LCSW\\, ADSW\\, is a licensed clinical social worker on staff with Av\r\n enidas Senior Community Center in Palo Alto. She is an expert in navigating\r\n  health care transitions\\, facilitating caregiver support groups and worksh\r\n ops. Paula has supported the Stanford community for years\\, providing elder\r\n  care consultations and critical resources.\\n\\nClass details are subject to\r\n  change.\r\nDTEND:20260219T203000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Aging Wisely - Long Term Care Goals and Strategies\r\nUID:tag:localist.com\\,2008:EventInstance_51600833806788\r\nURL:https://events.stanford.edu/event/aging-wisely-long-term-care-goals-and\r\n -strategies-2948\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260220T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114939329\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260220T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561111900\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Earth’s mantle occupies most of its volume\\, connecting the dee\r\n p\\, inaccessible core to the surface. Its convection regulates the planet’s\r\n  temperature\\, magnetic field\\, chemical distribution\\, and habitability co\r\n nditions. Changes in convective regimes therefore have profound implication\r\n s for Earth’s evolution and our interpretation of the geologic record. In t\r\n his talk\\, I will focus on the relationship between Earth’s convective regi\r\n me and the long-lived geodynamo. I will show that Earth likely operated in \r\n a “sluggish-lid” tectonic mode for much of the Precambrian\\, characterized \r\n by partially decoupled mobile plates. This early regime\\, driven by higher \r\n mantle temperatures and the presence of an asthenosphere\\, moderated core-m\r\n antle boundary heat flow\\, sustaining the geodynamo. \\n\\n \\n\\nSpeaker-sugge\r\n sted reading: Coupled fates of Earth’s mantle and core: Early sluggish-lid \r\n tectonics and a long-lived geodynamo\\, Sci. Adv. 10\\, eadp1991 (2024) DOI: \r\n 10.1126/sciadv.adp1991\r\nDTEND:20260219T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Geophysics Seminar - Manar Al Asad\\, \"Transitions in Earth's Tecton\r\n ic Regimes: Causes and Consequences on the Core\"\r\nUID:tag:localist.com\\,2008:EventInstance_52021050774165\r\nURL:https://events.stanford.edu/event/geophysics-seminar-manar-al-asad-from\r\n -marine-tectonics-to-ocean-mixing-a-story-of-seafloor-fabrics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join the speaker for coffee\\, cookies\\, and conversation before\r\n  the talk\\, starting at 11:45am.\\n\\nLung-brain signaling in mental health o\r\n utcomesAbstract\\n\\nKnowledge linking connections between the lung and the b\r\n rain has been with us for millennia\\, spanning ancient (ayurvedic) breathin\r\n g practices aimed at breath awareness/control\\, to the prevailing recogniti\r\n on in recent years that respiratory insults (e.g.\\, infection\\, allergens) \r\n can have lasting impacts on mood\\, cognition\\, pain\\, and other aspects of \r\n brain function. Despite these links\\, we know little about the mechanisms b\r\n y which these two critical organs communicate. The lung has a small populat\r\n ion of specialized sensory epithelial cells called pulmonary neuroendocrine\r\n  cells (PNECs) that sit in clusters at the branch points of the major airwa\r\n ys. PNECs are the first lung epithelial cell to differentiate during early \r\n development and have key morphogenic roles during the transition to an air \r\n environment after birth. Whereas PNECs share redundant immune secretary fun\r\n ctions with several other lung cells\\, they are the only innervated cells o\r\n f the lung epithelium and were initially discovered based on hallmark secre\r\n tary vesicles\\, pointing to their neural signaling function. I hypothesize \r\n a primary function of PNECs is to communicate with the brain and are critic\r\n al for the behavioral consequences of lung (dys)function broadly. To begin \r\n to investigate these questions\\, we developed a model to efficiently ablate\r\n  PNECs in mice and determined the brain and lung response to a common respi\r\n ratory insult\\, influenza infection. Our preliminary data suggests that lun\r\n g activity detected via the PNECs is rapidly transduced to the CNS via vaga\r\n l afferents\\, which impacts brain function via the encoding of immune “engr\r\n ams” (memories) within select brain regions\\, which if reactivated\\, can pe\r\n rsistently impact behavior (e.g. anxiety). A primary goal of this research \r\n going forward is to comprehensively phenotype behavior (mood\\, cognition\\, \r\n pain) in the days and weeks after infection recovery and subsequent neural \r\n reactivation to determine the persistence of immune engrams within the brai\r\n n. Then\\, we will determine if we can modulate PNECs to impact immune engra\r\n m formation/maintenance and alleviate behavioral consequences such as anxie\r\n ty. A parallel goal is to examine these questions using a developmental len\r\n s. \\n\\n \\n\\nStaci Bilbo\\, PhDHaley Family Professor of Psychology & Neurosc\r\n ience Departments of Neurobiology\\, Integrative Immunobiology\\, and Cell Bi\r\n ology\\, Duke University | she/her\\n\\nDr. Staci Bilbo is a Professor of Neur\r\n oscience\\, Integrative Immunobiology\\, and Cell Biology at Duke University.\r\n  She was named Interim Chair of Neurobiology in Dec. 2025. Her research is \r\n broadly focused on the mechanisms by which the immune and endocrine systems\r\n  interact with the brain to impact health and behavior\\, particularly durin\r\n g critical developmental windows. Her research program is primarily aimed a\r\n t exploring the mechanisms by which innate central nervous system immune ce\r\n lls - microglia - and signaling molecules such as cytokines and chemokines\\\r\n , influence both normal and abnormal brain development\\, and the implicatio\r\n ns for (mal)adaptive behavioral outcomes later in life\\, including a focus \r\n on neurodevelopmental disorders such as autism spectrum disorder\\, but exte\r\n nding to later life neurodegeneration as well. Dr. Bilbo received her B.A. \r\n in Psychology and Biology from the University of Texas at Austin and her Ph\r\n D in Neuroendocrinology at Johns Hopkins University.  She was on the facult\r\n y at Duke University from 2007-2015 before she joined the faculty at Harvar\r\n d where she served as the Lurie Family Associate Professor of Pediatrics an\r\n d Neuroscience at Harvard Medical School and as the Director of Research fo\r\n r the Lurie Center for Autism at Massachusetts General Hospital for Childre\r\n n.  She returned to Duke in 2019 as the Haley Family Professor of Psycholog\r\n y and Neuroscience.  She is the recipient of  the 2025 Dean’s Award for Exc\r\n ellence in Mentoring from Duke University and cares deeply about mentoring \r\n at all levels.\\n\\nVisit lab website\\n\\nHosted by Karen Malacon (Monje Lab)\\\r\n n\\nThis seminar is co-presented by Psychiatry Grand Rounds | Department of \r\n Psychiatry and Behavioral Sciences\\n\\n \\n\\nSign up for Speaker Meet-upsEnga\r\n gement with our seminar speakers extends beyond the lecture. On seminar day\r\n s\\, invited speakers meet one-on-one with faculty members\\, have lunch with\r\n  a small group of trainees\\, and enjoy dinner with a small group of faculty\r\n  and the speaker's host.\\n\\nIf you’re a Stanford faculty member or trainee \r\n interested in participating in these Speaker Meet-up opportunities\\, click \r\n the button below to express your interest. Depending on availability\\, you \r\n may be invited to join the speaker for one of these enriching experiences.\\\r\n n\\nSpeaker Meet-ups Interest Form\\n\\n \\n\\nAbout the Wu Tsai Neurosciences S\r\n eminar SeriesThe Wu Tsai Neurosciences Institute seminar series brings toge\r\n ther the Stanford neuroscience community to discuss cutting-edge\\, cross-di\r\n sciplinary brain research\\, from biochemistry to behavior and beyond.\\n\\nTo\r\n pics include new discoveries in fundamental neurobiology\\; advances in huma\r\n n and translational neuroscience\\; insights from computational and theoreti\r\n cal neuroscience\\; and the development of novel research technologies and n\r\n euro-engineering breakthroughs.\\n\\nUnless otherwise noted\\, seminars are he\r\n ld Thursdays at 12:00 noon PT.\\n\\nSign up to learn about all our upcoming e\r\n vents\r\nDTEND:20260219T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: Staci Bilbo - Lung-brain signaling in mental\r\n  health outcomes\r\nUID:tag:localist.com\\,2008:EventInstance_50539424569389\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-staci-bilbo-tal\r\n k-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Economic reintegration is a critical part of peacebuilding\\, he\r\n lping former combatants transition into civilian life. Yet stigma from empl\r\n oyers may block access to formal jobs\\, threatening the success of reintegr\r\n ation programs. We implemented a résumé field experiment to test whether ex\r\n -combatants in Colombia face labor market discrimination\\, and whether sign\r\n als of rehabilitation reduce bias. Partnering with the Colombian government\r\n ’s Agency for Reincorporation and Normalization\\, we use real résumés from \r\n eight job-seeking ex-combatants. We randomly vary whether they disclose ex-\r\n combatant status\\, highlight education or reconciliation experience\\, signa\r\n l work experience\\, or mention tax incentives. We tracked employer response\r\n s to identify which signals increase interest and under what conditions dis\r\n crimination is most severe. This design provides unique causal evidence on \r\n employer behavior in post-conflict societies and will inform policies for h\r\n ow best to structure reintegration support so that those who leave violence\r\n  behind are not excluded from economic opportunities.\\n\\nABOUT THE SPEAKER\\\r\n n\\nOliver Kaplan is a CDDRL Visiting Scholar and an Associate Professor at \r\n the Josef Korbel School of International Studies at the University of Denve\r\n r. He is the author of the book\\, Resisting War: How Communities Protect Th\r\n emselves (Cambridge University Press\\, 2017)\\, which examines how civilian \r\n communities organize to protect themselves from wartime violence. He is a c\r\n o-editor and contributor to the book\\, Speaking Science to Power: Responsib\r\n le Researchers and Policymaking (Oxford University Press\\, 2024). Kaplan ha\r\n s also published articles on the conflict-related effects of land reforms a\r\n nd ex-combatant reintegration and recidivism. As part of his research\\, Kap\r\n lan has conducted fieldwork in Colombia and the Philippines.\\n\\nKaplan was \r\n a Jennings Randolph Senior Fellow at the U.S. Institute of Peace and previo\r\n usly a postdoctoral Research Associate at Princeton University and at Stanf\r\n ord University. His research has been funded by the Carnegie Corporation of\r\n  New York\\, the International Committee of the Red Cross\\, the Smith Richar\r\n dson Foundation\\, and other grants. His work has been published in The Jour\r\n nal of Conflict Resolution\\, Journal of Peace Research\\, Conflict Managemen\r\n t and Peace Science\\, Stability\\, The New York Times\\, Foreign Affairs\\, Fo\r\n reign Policy\\, CNN\\, and National Interest.\\n\\nAt the University of Denver\\\r\n , Kaplan is Director of the Korbel Asylum Project (KAP). He has taught M.A.\r\n -level courses on Human Rights and Foreign Policy\\, Peacebuilding in Civil \r\n Wars\\, Civilian Protection\\, and Human Rights Research Methods\\, and PhD-le\r\n vel courses on Social Science Research Methods. Kaplan received his Ph.D. i\r\n n political science from Stanford University and completed his B.A. at UC S\r\n an Diego.\r\nDTEND:20260219T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Oliver Kaplan — Assessing Labor Market Discrimination Against Ex-co\r\n mbatants\r\nUID:tag:localist.com\\,2008:EventInstance_51808841929270\r\nURL:https://events.stanford.edu/event/oliver-kaplan-assessing-labor-market-\r\n discrimination-against-ex-combatants\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260219T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nGEO:37.431942;-122.176463\r\nLOCATION:Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:ReMS - Mark Skylar-Scott\\, PhD \"Scaling Tissue Engineering Towards \r\n Whole Organ Manufacturing\" & Carla Shatz\\, PhD \"Surprise at the Synapse: In\r\n nate immune proteins\\, synapse pruning and Alzheimer's\"\r\nUID:tag:localist.com\\,2008:EventInstance_51518223679674\r\nURL:https://events.stanford.edu/event/rems-mark-skylar-scott-phd-scaling-ti\r\n ssue-engineering-towards-whole-organ-manufacturing-carla-shatz-phd-surprise\r\n -at-the-synapse-innate-immune-proteins-synapse-pruning-and-alzheimers\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260219T201500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762172715\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Jane Fraser is the Chief Executive Officer of Citi\\, the world'\r\n s most global bank\\, which serves clients in more than 180 countries and ju\r\n risdictions.\\n\\nSince becoming CEO in March 2021\\, Jane has launched a mult\r\n i-year strategy to transform\\, simplify and modernize the bank for the digi\r\n tal age. Jane is committed to making Citi the preeminent banking partner fo\r\n r institutions with cross-border needs\\, a global leader in wealth manageme\r\n nt and a valued personal bank in its home market of the U.S.\\n\\nDuring her \r\n 19-year career at Citi\\, Jane has held leadership roles across Citi’s consu\r\n mer and institutional businesses. Before becoming CEO\\, she was President o\r\n f Citi and CEO of the Global Consumer Bank. She also served as Global Head \r\n of Strategy and M&A\\, CEO of Citi’s Private Bank and CEO of Citigroup Latin\r\n  America\\, among other leadership roles. Jane joined Citi in 2004 in the Co\r\n rporate and Investment Banking division. Before joining Citi\\, Jane was a P\r\n artner at McKinsey & Company.\\n\\nJane serves on the Board of Directors of t\r\n he Business Roundtable and the Council on Foreign Relations. She is Vice Ch\r\n air of the Partnership for New York City as well as the Financial Services \r\n Forum and a member of the Monetary Authority of Singapore’s International A\r\n dvisory Panel\\, Harvard Business School’s Board of Dean’s Advisors\\, the St\r\n anford Global Advisory Board\\, and the Economic Club of New York.\r\nDTEND:20260219T210000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T200000Z\r\nGEO:22.770392;75.938693\r\nLOCATION:CEMEX Auditorium\\, CEMEX\r\nSEQUENCE:0\r\nSUMMARY:View From The Top: Jane Fraser\\, CEO of Citi\r\nUID:tag:localist.com\\,2008:EventInstance_52057864647257\r\nURL:https://events.stanford.edu/event/view-from-the-top-jane-fraser-ceo-of-\r\n citi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Charting the Ottoman Empire (COE) is a digital humanities proje\r\n ct that reconstructs the economic\\, political\\, and financial networks of t\r\n he Ottoman Empire in the eighteenth and nineteenth centuries by digitizing \r\n and analyzing previously untapped fiscal archives. Housed at Stanford Unive\r\n rsity’s Center for Spatial and Textual Analysis (CESTA) and developed in co\r\n llaboration with Bahçeşehir University’s Center for Ottoman Studies (BAU-OT\r\n AM)\\, COE brings together an interdisciplinary team of historians\\, economi\r\n sts\\, political scientists\\, digital humanists\\, archivists\\, and data scie\r\n ntists from institutions in the United States\\, Turkey\\, Italy\\, the United\r\n  Kingdom\\, and Greece. At the core of the project are Ottoman fiscal codice\r\n s—dense accounting registers that record chains of debt and credit\\, transf\r\n ers of wealth\\, and administrative decisions linking individuals\\, state of\r\n fices\\, and financial agents across Eastern Europe\\, the Middle East\\, and \r\n North Africa. A particular focus is fenn-i siyāqat: the Ottoman “fiscal sci\r\n ences” and specialized archival text technologies—scripts\\, formats\\, and i\r\n nformation-processing techniques—through which the fiscal administration ga\r\n thered\\, standardized\\, and mobilized financial knowledge. By decoding fenn\r\n -i siyāqat and converting unstructured archival entries into a relational S\r\n QL database\\, COE combines archival expertise with network analysis\\, visua\r\n lization\\, and AI-assisted text processing to map how wealth\\, debt\\, and s\r\n tate power moved through the empire on the eve of the Tanzimat. In doing so\r\n \\, the project also intervenes in broader debates about global economic cha\r\n nge between 1750 and 1850—shifting the comparative lens toward the Ottoman \r\n world—and is building an open-access digital platform that will allow schol\r\n ars and students to explore these fiscal networks through structured datase\r\n ts\\, interactive visualizations\\, and analytical tools.\\n\\nRegister to join\r\n  online\\n\\nLunch will begin at 11:45 a.m. for in-person attendees.\\n\\nAbout\r\n  the Speaker\\n\\nDr. Ali Yaycıoğlu is a historian of the Ottoman Empire and \r\n modern Turkey whose work explores political\\, economic\\, and legal institut\r\n ions\\, as well as the social and cultural dynamics of the Ottoman world fro\r\n m the sixteenth century to the present. He teaches widely on the Ottoman Em\r\n pire and modern Turkey\\, the Age of Revolutions\\, empires and markets\\, his\r\n tories of democracy and capitalism\\, and digital humanities\\, and he is esp\r\n ecially interested in how digital methods can help conceptualize and visual\r\n ize historical change. His first book\\, Partners of the Empire: Crisis of t\r\n he Ottoman Order in the Age of Revolutions (Stanford University Press\\, 201\r\n 6)\\, rethinks the eighteenth- and early nineteenth-century Ottoman world th\r\n rough the interactions of imperial reforms\\, regional politics\\, and popula\r\n r mobilization. He is currently completing The Order of Debt: Power\\, Wealt\r\n h\\, and Death in the Ottoman Empire\\, which examines property\\, finance\\, a\r\n nd statehood in the eighteenth and nineteenth centuries and is supported by\r\n  his CESTA-based digital initiative Charting the Empire (including work on \r\n Ottoman fiscal codices and accounting techniques). He has co-edited the Jou\r\n rnal of Ottoman and Turkish Studies special issue on Ottoman Digital Humani\r\n ties (2023) and Crafting History: Essays on the Ottoman World and Beyond in\r\n  Honor of Cemal Kafadar (2023)\\, and his essays on democracy\\, capitalism\\,\r\n  and populism in Turkey appear in Uncertain Past Time: Empire\\, Republic\\, \r\n and Politics (Istanbul\\, 2024\\, in Turkish). Born and raised in Ankara\\, he\r\n  earned degrees from METU and Bilkent\\, pursued further study at McGill\\, c\r\n ompleted his PhD at Harvard (2008)\\, held postdoctoral positions at Harvard\r\n  and Princeton\\, and joined Stanford’s History Department in 2011\\; he also\r\n  writes public commentary for Gazete Oksijen and maintains a parallel pract\r\n ice in visual arts under the name “Critical Imagination” through the Atölye\r\n 20 platform.\r\nDTEND:20260219T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T201500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 433A\r\nSEQUENCE:0\r\nSUMMARY:Charting the Ottoman Empire: Wealth\\,  Power and Death\\, 1750–1850 \r\nUID:tag:localist.com\\,2008:EventInstance_52125205629840\r\nURL:https://events.stanford.edu/event/charting-the-ottoman-empire-wealth-po\r\n wer-and-death-17501850\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join poet and Stanford Knight Family Professor of Creative Writ\r\n ing\\, Aracelis Girmay\\, for a reading and discussion of her latest poetry c\r\n ollection\\, GREEN OF ALL HEADS (BOA\\, 2025). Longlisted for the 2026 PEN Am\r\n erica Literary Awards\\, GREEN OF ALL HEADS examines the entangled temporali\r\n ties of an aging parent and newly born children. This vital work grapples w\r\n ith what it means to attend to life in the context of corporate industries \r\n of birth and death. Professor Girmay is also author of the black maria (BOA\r\n \\, 2016)\\, Kingdom Animalia (BOA\\, 2011)\\, and Teeth (Curbstone\\, 2007). Fo\r\n r her work she was named a finalist for the Neustadt International Prize fo\r\n r Literature in 2018. Her books have also been named finalists for the Nati\r\n onal Book Critics Circle Award and the Hurston/Wright Legacy Award. She has\r\n  received fellowships from the Whiting Foundation\\, Civitella Ranieri\\, the\r\n  National Endowment for the Arts\\, and the Cave Canem Foundation\\, among ot\r\n her foundations. Before joining Stanford's faculty\\, Professor Girmay has t\r\n aught in many programs\\, including Drew University's low-residency program\\\r\n , Columbia University's MFA program\\, Sarah Lawrence's MFA program\\, and sh\r\n e served as the writer in residence and assistant chairperson at Pratt Inst\r\n itute (Writing Program)\r\nDTEND:20260219T211500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T201500Z\r\nGEO:37.422316;-122.171203\r\nLOCATION:Florence Moore Hall\\, SLE Main Lounge\r\nSEQUENCE:0\r\nSUMMARY:SLE Salon: Aracelis Girmay: GREEN OF ALL HEADS \r\nUID:tag:localist.com\\,2008:EventInstance_52022625675255\r\nURL:https://events.stanford.edu/event/sle-salon-aracelis-girmay\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260219T204500Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794459923\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260219T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491605392\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Join Help Center clinicians Amy Friedman and Jaimie Lyons at a \r\n monthly drop-in group for parents of middle and high school students.  Thes\r\n e regular discussions are an opportunity to share parenting concerns while \r\n feeling supported by others experiencing this exciting\\, though challenging\r\n \\, time of rapid change and adjustment.  \\n\\n Meetings take place on the th\r\n ird Thursday of each month. All are welcome to attend once\\, twice\\, or as \r\n often as feels useful.\\n\\nFacilitators:\\n\\nJaimie Lyons\\, LCSW\\n\\nAmy Fried\r\n man\\, LMFT\r\nDTEND:20260219T230000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Parenting Teens: Drop-in Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51835492829173\r\nURL:https://events.stanford.edu/event/parenting-teens-drop-in-support-group\r\n -8400\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Offered by Counseling and Psychological Services (CAPS) and the\r\n  Graduate Life Office (GLO)\\, this is a six-session (virtual) group where y\r\n ou can vent\\, meet other graduate students like you\\, share goals and persp\r\n ectives on navigating common themes (isolation\\, motivation\\, relationships\r\n )\\, and learn some helpful coping skills to manage the stress of dissertati\r\n on writing.\\n\\nIf you’re enrolled this fall quarter\\, located inside the st\r\n ate of California\\, and in the process of writing (whether you are just sta\r\n rting\\, or approaching completion) please consider signing up.\\n\\nIdeal for\r\n  students who have already begun the dissertation writing process. All enro\r\n lled students are eligible to participate in CAPS groups and workshops. A g\r\n roup facilitator may contact you for a pre-group meeting prior to participa\r\n tion in Dissertation Support space.\\n\\nFacilitated by Cierra Whatley\\, PhD \r\n & Angela Estrella on Thursdays at 3pm-4pm\\; 2/5\\; 2/12\\; 2/19\\; 2/26\\; 3/5\\\r\n ; 3/12\\, virtualJoin at any point in the Quarter. Sign up on the Graduate L\r\n ife Office roster through this link.\r\nDTEND:20260220T000000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Dissertation Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51782991488957\r\nURL:https://events.stanford.edu/event/copy-of-dissertation-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260220T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764714081\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: Michael F. Joseph will present the theory and \r\n experimental chapter from his forthcoming book (Cambridge May\\, 2026)\\, The\r\n  Origins of Great Power Rivalries. In it\\, he advances a comprehensive rati\r\n onalist theory of how great powers assess emerging threats\\; why enduring g\r\n reat power rivalries unfold through either delayed competition\\, or delayed\r\n  peace\\; and how diplomacy functions when rising powers emerge on the scene\r\n . In an important departure from traditional realist theory\\, Joseph argues\r\n  that countries are motivated by distinct principles - normative values tha\r\n t shape foreign policy beyond simple security concerns. He then integrates \r\n these complex motives into a formal model of great power rivalry to explain\r\n  how rational states draw qualitative inferences about rivals' intentions b\r\n y examining the historical context of their demands\\, not just military cap\r\n abilities. Empirically\\, he shows that his predictions about the instances \r\n and timing of competition better fit great power rivalry cases than leading\r\n  rationalist and psychological alternatives via a medium-n analysis of grea\r\n t power rivalries since 1850. He illuminates British reactions to Stalin at\r\n  the beginning of the Cold War via an in depth historical analysis. He anim\r\n ates a theoretically sophisticated defense of America's approach to China i\r\n n the post-Cold War era with 100s of Washington-insider interviews and a no\r\n vel analysis of recently declassified estimates. He demonstrates that real \r\n life intelligence analysts integrate diplomacy\\, historical context and an \r\n appreciation of strategic incentives as his theory expects\\, by embedding a\r\n  survey experiment into an intelligence simulation given to 100s of real-li\r\n fe intelligence analysts and national security professionals from the CIA\\,\r\n  State Department\\, DOD and elsewhere. Michael is known for \"hot takes\\,\" a\r\n nd all information he presents is his personal opinion and does not reflect\r\n  the position of any government and should not be taken seriously be anyone\r\n .\\n\\nAbout the speaker: Michael F. Joseph is an Assistant Professor at UCSD\r\n . He harnesses a decade of foreign policy experience and sophisticated rese\r\n arch skills to resolve modern national security problems of great power com\r\n petition\\, and technology in the intelligence community. His research was r\r\n ecognized with APSA's 2021 Formal Theory Section Award\\, the 2023 Palmer Pr\r\n ize\\, and a $450\\,000 NSF Grant for National Security Preparedness\\, among \r\n other accolades. His book is forthcoming with Cambridge University Press. H\r\n is articles are published or forthcoming in the APSR (x3)\\, JOP (x2)\\, IO\\,\r\n  and other journals. Policy insights from this research have attracted poli\r\n cy-maker attention in DC\\, and appear in the Washington Post\\, War on the R\r\n ocks\\, and other leading outlets.\r\nDTEND:20260220T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260219T233000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:The Origins of Great Power Rivalries: A Rational Theory of Principl\r\n ed Motivations and Historical Context\r\nUID:tag:localist.com\\,2008:EventInstance_51951772461492\r\nURL:https://events.stanford.edu/event/the-origins-of-great-power-rivalries-\r\n a-rational-theory-of-principled-motivations-and-historical-context\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Welcome to QTrees\\, a supportive and inclusive space designed s\r\n pecifically for queer Stanford students navigating their unique journeys.\\n\r\n \\nThis group during Winter quarter provides a safe\\, affirming environment \r\n where members can explore their LGBTQ+ identities\\, share experiences\\, and\r\n  find solidarity with others who understand their struggles and triumphs.\\n\r\n \\nQTrees will meet for 60 mins\\, weekly for 5 weeks\\, with the same people \r\n each week.Facilitated by Christine Catipon\\, PsyDAll enrolled students are \r\n eligible to participate in CAPS groups and workshops.Meeting with a facilit\r\n ator is required to join this group. You can sign up on the INTEREST LIST_Q\r\n Trees_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in the \"Groups and Works\r\n hops\" section. The location of the group will be provided upon completion o\r\n f the pre-group meeting with the facilitator.\r\nDTEND:20260220T010000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260220T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:QTrees\r\nUID:tag:localist.com\\,2008:EventInstance_51101143948363\r\nURL:https://events.stanford.edu/event/qtrees-4683\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Exhibition\r\nDESCRIPTION:This 14th annual event will be conducted on-campus in-classroom\r\n  and will provide an opportunity for students to get an up-close look at a \r\n variety of devices and learn about available programs from product vendors \r\n and service agencies.\\n\\n\\n\\nTikkun Olam Makers\\nTOM at Stanford - TOM Comm\r\n unity Managers - Lucy Caroline Hiller & Temple Dahla Landry\\nTikkun Olam Ma\r\n kers (TOM) is a Stanford student club whose members design and build person\r\n alized prototype devices that address everyday challenges experienced by in\r\n dividuals with disabilities and older adults. Rooted in the value of Tikkun\r\n  Olam - repairing the world - TOM turns empathy into action and ensures tha\r\n t no one is left behind by the lack of an assistive technology device.\\n\\n\\\r\n n\\nPocketDot\\nPocketDot\\, Inc. - Adil Jussupov\\nPocketDot is a Braille disp\r\n lay that provides visually impaired and blind individuals with private and \r\n convenient access to texting\\, web browsing\\, and other textual communicati\r\n on with their mobile phones.\\n\\n\\n\\nSilicon Valley Independent Living Cente\r\n r\\nSVILC Assistive Technology Specialist - Joe Escalante\\nSilicon Valley In\r\n dependent Living Center (SVILC) is a cross-disability\\, intergenerational\\,\r\n  and multicultural disability justice organization that creates fully inclu\r\n sive communities that value the dignity\\, equality\\, freedom and worth of e\r\n very human being. SVILC maintains a lending library of assistive technology\r\n  so consumers may borrow a device free of charge and try it before buying i\r\n t\\, use it to compare similar devices\\, or to use while a personal device i\r\n s being repaired.\\n\\n\\n\\nBeeLine Reader\\nBeeLine Reader\\, Inc - Nick Lum\\n\"\r\n BeeLine Reader is a software tool that improves reading ability by displayi\r\n ng text using a color gradient that wraps from the end of one line to the b\r\n eginning of the next. (Example) This gradient pulls the reader’s eyes throu\r\n gh the text\\, making reading easier. This approach is especially helpful fo\r\n r readers with dyslexia\\, ADHD\\, and various vision impairments. Thanks to \r\n the Schwab Learning Center\\, BeeLine Reader’s tools are available for free \r\n to all Stanford students.\"\\n\\n\\n\\nJeeves\\nHarmony Robotics - Sandeep Dutta\\\r\n n\"Jeeves is an assistive robot that carries up to 80 lbs. with ease\\, auton\r\n omously navigates the user's home - including scheduled trips to specific s\r\n pots - follows the user around through gesture-driven operation\\, features \r\n a touchscreen-responsive controller\\, and offers many more capabilities. Th\r\n is everyday helper transports belongings - including laundry\\, groceries\\, \r\n and dishes - helps locate items at home\\, serves as a mobile storage unit\\,\r\n  learns and adapts to the user's routine movements\\, and offers much more. \r\n Jeeves supports a more self-sufficient and independent lifestyle for indivi\r\n duals with special needs\\, wheelchair users\\, older adults\\, and many other\r\n s. In care facilities\\, Jeeves facilitates round-the-clock resident monitor\r\n ing and assists with the transport of food and essential care items to resi\r\n dents.\"\\n\\n\\n\\nStretch 3 Mobile Manipulator Robot\\nHello Robot\\, Inc. - Vy \r\n Nguyen\\, Occupational Therapist\\n\"Hello Robot’s Stretch 3 is an inclusive m\r\n obile robot empowering people of all ages and abilities to live independent\r\n ly and thrive in daily life. Our open-source model ensures we build a robot\r\n  for good in collaboration with a global community of researchers and indus\r\n try partners. Hello Robot has been co-designing Stretch 3 with persons livi\r\n ng with severe motor impairments as they use the robot to enable their func\r\n tional independence and performance in their everyday activities while redu\r\n cing caregiving demands. With Stretch 3\\, individuals can interact with the\r\n ir environment\\, such as turning on light switches\\, opening doors\\, pickin\r\n g up items from surfaces or off the ground\\, self-feeding\\, socializing wit\r\n h friends and family\\, and even visit museums. Operating the robot is made \r\n accessible by having the individual use their assistive input devices to in\r\n teract with a web-based interface launched on either their computer\\, table\r\n t\\, or mobile device.\"\\n\\n\\n\\nEchoVision Smart Glasses\\nAGIGA - Huasong Cao\r\n \\, Andy Pan\\, Stanley Cao\\nEchoVision by AGIGA is a purpose-built wearable \r\n designed to foster independence for the blind and visually impaired by tran\r\n sforming visual data into real-time audio. By moving beyond the handheld ph\r\n one\\, users can engage with their surroundings hands-free to perform daily \r\n tasks like reading printed materials\\, identifying people\\, and navigating \r\n public transit. The device provides continuous environmental awareness thro\r\n ugh its \"Live AI\" mode and\\, for more complex situations\\, offers a seamles\r\n s connection to human-in-the-loop services for immediate remote assistance.\r\n \\n\\n\\n\\nBrava Smart Oven\\nBrava Home\\, Inc. - Travis Rea\\, VP Sales & Marke\r\n ting and Zac Selmon\\, Head of Product\\n\"Brava's Smart Oven enables safe\\, i\r\n ndependent cooking with a fast\\, light-based technology. With new and evolv\r\n ing features designed specifically for assistive technology users\\, Brava i\r\n s ideal for the blind/low vision\\, intellectual and developmental disabilit\r\n y and/or limited mobility communities. It simplifies meal prep with automat\r\n ed features\\, guided recipes\\, and a comprehensive mobile app. Continuous s\r\n oftware updates enhance functionality and accessibility\\, ensuring Brava me\r\n ets diverse needs and constantly improves the cooking experience for indivi\r\n duals seeking culinary self-reliance.\"\\n\\n\\n\\nMO/GO\\nSkip - Claire Stewart\\\r\n n\"Skip is a small start up company developing powered wearable technology t\r\n hey call movewear\\, dedicated to enhancing human movement and accessibility\r\n . With a focus on innovation and real-world impact\\, Skip aims to transform\r\n  how people interact with their environments through advanced technology. T\r\n heir first product\\, MO/GO\\, is one part robot\\, one part technical pants -\r\n  a motor-powered movement assist exoskeleton embedded in lightweight hiking\r\n  pants. Think of it as an e-bike for hiking: enabling users to tackle eleva\r\n tion like never before by providing a boost to the leg muscles on the way u\r\n p and supporting the knees on the way down.\"\\n\\n\\n\\nLotus Ring\\nLotus - Dha\r\n val Patel (Founder and CEO)\\nFor people with disabilities\\, Lotus' wearable\r\n  ring controls objects pointing. With Lotus\\, control anything a wall switc\r\n h controls\\, like lights and fans - and even the TV - from wherever you are\r\n  in the room. Unlike Alexa\\, there is no rewiring\\, no apps\\, and no intern\r\n et.\\n\\n\\n\\nYahoo!\\nYahoo Inclusive Design - Betty Troy\\, MS\\, CPACC - Inclu\r\n sive Designer / Accessibility Specilaist / UX Researcher\\n\"At Yahoo\\, we be\r\n lieve digital experiences should be accessible\\, usable\\, and enjoyable for\r\n  everyone. That’s why we incorporate feedback from people with a wide range\r\n  of access needs\\, including users of screen readers\\, magnification tools\\\r\n , refreshable Braille displays\\, switches\\, and those with cognitive access\r\n ibility needs. Partnering with real users helps us learn\\, innovate\\, and e\r\n nsure our products are both inclusive and delightful to use. Visit Yahoo’s \r\n table to explore our products hands-on. Try navigating the Yahoo Homepage u\r\n sing your voice\\, switches\\, or a screen reader. Browse articles in the Yah\r\n oo News app with screen magnification\\, or compose an email on Yahoo Mail u\r\n sing a Braille keyboard..\"\r\nDTEND:20260220T015000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260220T003000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, Classroom 282\r\nSEQUENCE:0\r\nSUMMARY:Assistive Technology Faire\r\nUID:tag:localist.com\\,2008:EventInstance_52118932753363\r\nURL:https://events.stanford.edu/event/assistive-technology-faire-4540\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Analyzing narratives of women’s cancer in Korea from the 1930s \r\n to the 1970s\\, this talk traces how radiation therapy acquired shifting\\, g\r\n endered meanings. It asks how emerging medical professionals and patients c\r\n onceptualized the contested status of X-rays\\, and how an expanding medical\r\n  marketplace sought to domesticate new knowledge and practices of radiation\r\n . It also examines how radiotherapy’s military origins became entangled wit\r\n h nationalist portrayals of women’s health in South Korea. Drawing on newsp\r\n apers\\, medical journals\\, and women’s magazines\\, the talk analyzes the th\r\n erapeutic uses of X-rays\\, radium\\, and cobalt-60 on female bodies. By fore\r\n grounding persistent ambiguity in medical reasoning and treatment\\, it comp\r\n licates narratives that cast medical progress for women as linear or unprob\r\n lematic.\\n\\nThis event is free and open to the public. Please RSVP here.\\n\\\r\n nAbout the speaker:\\n\\nSoyoung Suh is an Associate Professor of History at \r\n Dartmouth College. Her first book\\, Naming the Local: Medicine\\, Language\\,\r\n  and Identity in Korea since the Fifteenth Century (Harvard University Asia\r\n  Center\\, 2017)\\, explores the evolving concept of locality in medical know\r\n ledge-making\\, focusing on the geo-cultural specificities of herbs\\, soil\\,\r\n  and human constitutions. Her research has been published in Culture\\, Medi\r\n cine\\, and Psychiatry\\; Asian Medicine: Tradition and Modernity\\; Asia Paci\r\n fic Perspectives\\; Korean Journal of Medical History\\; Journal of Korean Hi\r\n story of Science Society\\; and the Journal of Korean Academic Society of Nu\r\n rsing Education. She is a co-researcher on a comparative history of illness\r\n es project at Ewha Women’s University (2020–2026). Her current project\\, a \r\n second monograph tentatively titled Sudden Transition and Enduring Past: Br\r\n east Cancer in Korea\\, 1800–2010\\, explores the origins of gendered medical\r\n  culture in modern Korea.\r\nDTEND:20260220T020000Z\r\nDTSTAMP:20260308T083907Z\r\nDTSTART:20260220T003000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, 224\r\nSEQUENCE:0\r\nSUMMARY:Indeterminable Therapy: Women\\, Cancer\\, and Radiation in Korea\\, 1\r\n 930s-1970s\r\nUID:tag:localist.com\\,2008:EventInstance_51535091303740\r\nURL:https://events.stanford.edu/event/indeterminable-therapy-women-cancer-a\r\n nd-radiation-in-korea-1930s-1970s\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In what Politico has called a “stirring intellectual defense of\r\n  liberalism from its critics across the political spectrum\\,” former adviso\r\n r to Presidents Obama and Biden and New York Times–bestselling author Cass \r\n Sunstein offers a timely and clear understanding of liberalism—of its core \r\n commitments\\, of its breadth\\, of its internal debates\\, of its evolving ch\r\n aracter\\, of its promise—and why we need it more than ever. He also shows h\r\n ow and why liberalism has been\\, and should be\\, appealing to both the left\r\n  and the right.\\n\\nThe book begins with a manifesto on behalf of liberalism\r\n  and goes on to explore the central idea of “experiments of living\\,” to wh\r\n ich a liberal constitutional order gives pride of place. From there\\, it di\r\n scusses John Stuart Mill and Friedrich Hayek\\, defining liberal thinkers\\; \r\n the rule of law as liberals understand it\\; freedom of speech (including th\r\n e place of lies and falsehoods within that freedom)\\; free markets\\, econom\r\n ic liberty\\, and regulation\\; Franklin Delano Roosevelt’s Second Bill of Ri\r\n ghts\\, with its social and economic guarantees\\; and finally\\, the concept \r\n of opportunity.\\n\\nNever more urgently needed\\, On Liberalism moves the con\r\n versation well beyond the reductive and inflammatory political sound bites \r\n of our moment and advances a compelling argument on behalf of liberalism as\r\n  the foundation of freedom and self-government.\\n\\nJoin us for a conversati\r\n on with Professor Sunstein about his essential new book. Professors Josh Ob\r\n er and Russell Berman will offer commentary\\, with Professor Michael McConn\r\n ell (SLS) moderating.\\n\\nThe lecture will begin at 5:00 PM\\, followed by a \r\n reception at 6:30 PM. A book sale will be available from 4:30–7:00 PM.\r\nDTEND:20260220T033000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T010000Z\r\nGEO:37.423105;-122.166932\r\nLOCATION:Munger Complex\\, Paul Brest Hall \r\nSEQUENCE:0\r\nSUMMARY:Publius Symposium with Professor Cass Sunstein: On Liberalism: In D\r\n efense of Freedom\r\nUID:tag:localist.com\\,2008:EventInstance_51905208174695\r\nURL:https://events.stanford.edu/event/publius-symposium-with-professor-cass\r\n -sunstein-on-liberalism-in-defense-of-freedom\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:For the 2026 Galarza-Camarillo Lecture\\, Chicana/o-Latina/o Stu\r\n dies is pleased to welcome Dr. Leisy Abrego\\, Professor of Chicana/o and Ce\r\n ntral American Studies at UCLA. In her lecture\\, Storytelling as Sanctuary:\r\n  On Salvadoran Displacement and Defiance\\, Dr. Abrego asks:\\n\\nWhat does it\r\n  mean to transmit histories of resistance and struggle to the generations t\r\n hat follow? Central American Studies is a budding field in the United State\r\n s where increasingly\\, members of the diaspora are using research to better\r\n  understand the experiences of war\\, displacement\\, migration\\, and denial \r\n of legal protections. This talk will consider the ethics of having these co\r\n nversations with people made vulnerable and harmed by the state. Do they ow\r\n e us their stories? Should we risk retraumatizing them? Who is the audience\r\n  for those projects? How can we honor them and their stories?\r\nDTEND:20260220T030000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:'Storytelling as Sanctuary: On Salvadoran Displacement and Defiance\r\n '\\, 2026 Galarza Lecture with Leisy Abrego\r\nUID:tag:localist.com\\,2008:EventInstance_51454651592786\r\nURL:https://events.stanford.edu/event/storytelling-as-sanctuary-on-salvador\r\n an-displacement-and-defiance-2026-galarza-lecture-with-leisy-abrego\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change in Winter Quarter.\\n\\nEvening G\r\n uided Meditation is designed to offer basic meditation skills\\, to encourag\r\n e regular meditation practice\\, to help deepen self-reflection\\, and to off\r\n er instructions on how meditation can be useful during stressful and uncert\r\n ain times.  All sessions are led by Andy Acker.\\n\\nOpen to Stanford Affilia\r\n tes. Free\\, no pre-registration is required.\r\nDTEND:20260220T023000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Room 302)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932607151871\r\nURL:https://events.stanford.edu/event/meditation-thursdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:From the protests catalyzed by the murder of George Floyd in Mi\r\n nneapolis to present-day ICE deployment in the same city\\, the shifts in mo\r\n mentum of rivaling campaigns for “justice” have been staged publicly for al\r\n l to witness. In this talk\\, Harvey Young looks back on the rise of #BLM an\r\n d the popular embrace of antiracist ideas in society—with an emphasis on co\r\n llege campuses and arts institutions—and accounts for their subsequent loss\r\n  of momentum and enforced retirement in the face of resurgent nationalism.\\\r\n n\\nABOUT | 2026 CARL WEBER MEMORIAL SPEAKER HARVEY YOUNG\\nHarvey Young is t\r\n he inaugural Vice President for the Arts\\, Dean of the College of Fine Arts\r\n \\, and Professor of English\\, Theatre\\, and African American & Black Diaspo\r\n ra Studies at Boston University. A historian and cultural critic\\, he is th\r\n e author/editor of eleven books including Embodying Black Experience\\, Thea\r\n tre & Race\\, and most recently Theater and Human Flourishing. He has appear\r\n ed on CNN and Good Morning America and within the pages of the New York Tim\r\n es\\, Washington Post\\, Chicago Tribune\\, Boston Globe among other major new\r\n s outlets.\\n\\nThe annual Carl Weber Memorial Lecture and Seminar are made p\r\n ossible through a generous gift by TAPS PROFESSOR CARL WEBER (1925-2016).\r\nDTEND:20260220T033000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T020000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, Harry J. Elam\\, Jr\\, Theater\r\nSEQUENCE:0\r\nSUMMARY:GUEST LECTURE | Harvey Young —  How Anti-racism Lost the Popular Vo\r\n te: Race\\, Performance and the Idea of America\r\nUID:tag:localist.com\\,2008:EventInstance_51959525636316\r\nURL:https://events.stanford.edu/event/Carl-Weber-Lecture-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Maha Justi\\, HICAP Counselor\\, for an informative session \r\n on how Medicare supports your health and independence through free preventi\r\n ve services. She will explain the value of early detection\\, the difference\r\n  between routine physicals and Annual Wellness Visits (AWVs)\\, and how to m\r\n ake the most of screenings\\, immunizations\\, and mental health coverage. Le\r\n arn how to use your benefits for healthy aging\\, fall prevention\\, and emot\r\n ional well-being — plus practical tips and tools to stay on track year-roun\r\n d. Perfect for Medicare beneficiaries\\, caregivers\\, and wellness professio\r\n nals. Let’s make prevention a priority!\\n\\nMaha Justi\\, HICAP Counselor of \r\n San Mateo County\\, provides free and objective information and counseling a\r\n bout Medicare.\r\nDTEND:20260220T040000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T030000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Unlocking Your Medicare Preventive Health Benefits\r\nUID:tag:localist.com\\,2008:EventInstance_51942754663752\r\nURL:https://events.stanford.edu/event/unlocking-your-medicare-preventive-he\r\n alth-benefits\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Violinist and composer Mari Kimura presents an hour-long intern\r\n ational program featuring works written for violin and her MUGIC® motion se\r\n nsor. The program includes compositions by Dai Fujikura (Japan)\\, Páll Páls\r\n son (Iceland) and Ileana Perez Velazquez (Cuba). Kimura will give the world\r\n  premiere of a game-based new work submitted! by Nolan Miranda (USA)\\, a CC\r\n RMA alum currently pursuing his PhD at UC Irvine. She also revised Variants\r\n  by Jean-Claude Risset (France)\\, originally composed in 1993 for her\\, to \r\n incorporate interactive elements using the MUGIC sensor. The program includ\r\n es Kimura's recent works: the premiere of the violin version of Sasakawa (o\r\n riginally composed for clarinet trio with MUGICs) and SOMAXMOBILE\\, which u\r\n tilizes IRCAM's SOMAX technology.\\n\\nViolinist/Composer Mari Kimura\\, haile\r\n d by The New York Times as a \"virtuoso playing at the edge\\,\" captivates au\r\n diences with performances that seamlessly blend virtuosity and innovation. \r\n A master of subharmonics—a revolutionary technique producing pitches an oct\r\n ave below the violin's lowest string—she expands the instrument's sonic pos\r\n sibilities in breathtaking ways. Learn more about Mari here.\\n\\nAdmission I\r\n nformation\\n\\nFree admission.Livestream\r\nDTEND:20260220T043000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T033000Z\r\nGEO:37.421012;-122.172383\r\nLOCATION:The Knoll\\, CCRMA Stage\r\nSEQUENCE:0\r\nSUMMARY:CCRMA Presents: MUGIC® Magic! – Music for Violin and Motion Sensor \r\n MUGIC®\r\nUID:tag:localist.com\\,2008:EventInstance_52019601805052\r\nURL:https://events.stanford.edu/event/ccrma-mugic-magic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Stanford Democrats & Stanford Speakers Bureau for a privat\r\n e townhall with Senator Bernie Sanders and Representative Ro Khanna on Who \r\n Controls the Future of Al: THE OLIGARCHS or THE PEOPLE.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nGEO:37.429162;-122.166431\r\nLOCATION:Memorial Auditorium\r\nSEQUENCE:0\r\nSUMMARY:A Townhall w/ Sen. Bernie Sanders and Rep. Ro Khanna on Who Control\r\n s the Future of AI: THE OLIGARCHS or THE PEOPLE?\r\nUID:tag:localist.com\\,2008:EventInstance_52068005387670\r\nURL:https://events.stanford.edu/event/who-controls-the-future-of-ai\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264971503\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355495906\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019656106\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Deadline for departments to update course grading basis\\, unit\\, an\r\n d/or component configuration for classes offered in Spring.\r\nUID:tag:localist.com\\,2008:EventInstance_49464186507550\r\nURL:https://events.stanford.edu/event/deadline-for-departments-to-update-co\r\n urse-grading-basis-unit-andor-component-configuration-for-classes-offered-i\r\n n-spring-6685\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – INDE 297 session for clinical students (Period 8).\r\nUID:tag:localist.com\\,2008:EventInstance_49463446869196\r\nURL:https://events.stanford.edu/event/md-inde-297-session-for-clinical-stud\r\n ents-period-8-3373\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353959985\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to update grading basis\\, unit\\, and/or co\r\n mponent configuration for Spring classes\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Deadline to Update Course Configuration\r\nUID:tag:localist.com\\,2008:EventInstance_50472522021658\r\nURL:https://events.stanford.edu/event/spring-quarter-deadline-to-update-cou\r\n rse-configuration\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The third of three winter quarter bills is due for graduate stu\r\n dents. Any new student charges posted since the last bill will be shown on \r\n this bill.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Third Winter Quarter Bill Due for Graduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720035520\r\nURL:https://events.stanford.edu/event/third-winter-quarter-bill-due-for-gra\r\n duate-students-4434\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The third of three bills generated for the winter quarter is du\r\n e for all undergraduate students. This includes tuition\\, mandatory and cou\r\n rse fees\\, updates or changes to housing and dining\\, and other student fee\r\n s.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260220\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Third Winter Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720154315\r\nURL:https://events.stanford.edu/event/third-winter-quarter-bill-due-for-und\r\n ergraduate-students-628\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260220T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353484660\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260221T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382747813\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260221T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114940354\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260220T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802448126\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260220T203000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699821236\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Title: Who Is at Risk? Building A Sociotechnical Approach to Di\r\n saster Risk Assessment\\n\\nAbstract: Since its original development for engi\r\n neering and insurance applications\\, the adoption of disaster risk assessme\r\n nt has grown\\, inspiring innovations in modeling\\, modern data collection m\r\n ethods such as crowdsourcing and remote sensing\\, and\\, importantly\\, a mor\r\n e diverse set of stakeholders. While promising\\, this growth necessitates n\r\n ew approaches that meet the distinct needs of stakeholders with expanded pr\r\n iorities—those who center vulnerable populations throughout the disaster li\r\n fecycle. In this talk\\, I present a sociotechnical approach to disaster ris\r\n k assessment that meets these priorities through three requirements: (1) id\r\n entifying who is affected\\, (2) determining how to support them\\, and (3) i\r\n ntegrating the context of place and use. I demonstrate this approach throug\r\n h case studies spanning earthquake recovery planning in Nepal\\, recurrent f\r\n looding impacts in Michigan\\, hurricane preparedness in the Southern U.S.\\,\r\n  and landslide risk across multiple geographies. These applications leverag\r\n e human-centered design\\, data fusion\\, and risk modeling to produce action\r\n able information for stakeholders working to reduce disaster impacts on vul\r\n nerable communities as well as inform future risk modeling. Advancing this \r\n sociotechnical practice for disaster risk modeling requires the current and\r\n  next generations of disaster researchers and practitioners to work across \r\n disciplinary and sectoral boundaries\\, integrating engineering methods with\r\n  social science frameworks and community needs. Ultimately\\, this sociotech\r\n nical approach ensures vulnerable populations remain at the center of how w\r\n e assess disaster impacts\\, ideally transforming disaster risk assessment f\r\n rom a technical exercise into a collaborative practice that reduces rather \r\n than exacerbates inequities exposed by disasters.\\n\\nSabine Loos is an Assi\r\n stant Professor in Civil and Environmental Engineering at the University of\r\n  Michigan\\, where she leads the Actionable Information for Disasters and De\r\n velopment (AIDD) Labs—a transdisciplinary group spanning engineering\\, urba\r\n n planning\\, geography\\, and data science—and co-founded the Hazards\\, Risk\r\n \\, and Resilience graduate specialization. Her research applies data fusion\r\n \\, human-centered design\\, and risk analysis techniques to produce disaster\r\n  risk information that supports equity-focused interventions both in the U.\r\n S. and internationally. She holds a PhD from Stanford University (with rese\r\n arch at the Earth Observatory of Singapore)\\, an MS from Stanford\\, and a B\r\n S from Ohio State University.\r\nDTEND:20260220T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T200000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 111\r\nSEQUENCE:0\r\nSUMMARY:Civil & Environmental Engineering Seminar Series\r\nUID:tag:localist.com\\,2008:EventInstance_52134517196763\r\nURL:https://events.stanford.edu/event/civil-environmental-engineering-semin\r\n ar-series-9382\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:We are delighted to host Radhika Koul (Literature\\, Claremont M\r\n cKenna). We can also look forward to a response from Shu-han Luo (English\\,\r\n  UC Berkeley).\\n\\nKoul argues that literature's capacity to reproduce emoti\r\n on across time\\, space\\, and culture—an anachronistic phenomenon underackno\r\n wledged in literary criticism—must be embraced as a methodologically produc\r\n tive foundation for comparative literary critique. She contends that this s\r\n hared experiential subjectivity\\, in which thought and feeling are insepara\r\n ble\\, justifies conversation as a critical comparative methodology: one tha\r\n t is creatively anachronistic\\, affectively sensitive\\, and\\, in Eric Hayot\r\n 's phrase\\, \"open to the world.\" Such a methodology circumvents two of the \r\n most naturalized organizing principles of Anglophone literary study—nationa\r\n l literary history as the primary horizon of analysis and periodization as \r\n the container of literary production. In their place\\, these conversations \r\n constitute what Rocco Rubini\\, invoking the hermeneutist Emilio Betti\\, cal\r\n ls the \"communion of the living and the dead\": humanism enacted as ongoing \r\n practice rather than static doctrine\\, generating unstable but generative s\r\n paces of discovery that are irreducibly present and personal to the critic \r\n mediating them. Like the best conversations\\, they produce a remainder—cons\r\n ider the estrangement that arises when Abhinavagupta is brought to bear on \r\n Hamlet\\, a reading briefly demonstrated here. Both the exchange and its est\r\n rangement constitute a leveling of the playing field\\, which is precisely w\r\n here the postcolonial payoff of such a praxis lies. By treating this shared\r\n  subjectivity as legitimate ground for conversation\\, we create conditions \r\n for a more equitable\\, more human\\, and more humanistic literary criticism—\r\n one that cannot relegate non-Western traditions to the margins and makes pr\r\n eviously unthinkable exchanges not only licit but productive. The article p\r\n roceeds in three movements: first\\, distinguishing empathic from hegemonic \r\n universals\\; second\\, recovering historical precedents in critics working b\r\n efore the \"temporalization of history\"\\; and third\\, outlining conversation\r\n 's defining characteristics as critical practice.\\n\\nThis event is hosted b\r\n y Comparative Methodologies\\, a research group in the DLCL Research Unit. P\r\n lease write to Harry (harrycar@stanford.edu) with any questions. We hope to\r\n  see you there! \\n\\nRSVP HERE for Comparative Methodologies Event\r\nDTEND:20260220T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Room 216\r\nSEQUENCE:0\r\nSUMMARY:Comparative Methodologies: On Conversation as Method\r\nUID:tag:localist.com\\,2008:EventInstance_52075406388586\r\nURL:https://events.stanford.edu/event/comparative-methodologies-on-conversa\r\n tion-as-method\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260221T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561112925\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:A healthy approach to sexuality involves understanding your own\r\n  needs\\, respecting the needs of others\\, and making informed decisions. It\r\n  also means recognizing that sexual health evolves over time and requires o\r\n ngoing attention\\, just like any other aspect of health. Sexuality changes\\\r\n , deepens\\, and continues to play an important role in our lives when enter\r\n ing middle age and beyond.\\n\\nJoin us for a noontime webinar that offers a \r\n compassionate space to explore what intimacy and sexual wellness can look l\r\n ike in your life today. We’ll unpack common myths\\, explore how aging impac\r\n ts desire and intimacy\\, and learn why sexual wellness is an important part\r\n  of overall health. We’ll also explore how communication can foster deeper \r\n connection and how mindfulness can enhance pleasure—providing inspiration t\r\n o re-engage your sexual self. Together\\, we’ll reframe sexuality as a lifel\r\n ong journey—uniquely yours and always evolving.\\n\\nThis class will be recor\r\n ded and a one-week link to the recording will be shared with all registered\r\n  participants. To receive incentive points\\, attend at least 80% of the liv\r\n e session or listen to the entire recording within one week.  Request disab\r\n ility accommodations and access info.\\n\\nInstructor: Melissa Fritchle\\, LMF\r\n T\\, is a writer\\, workshop leader\\, certified mindfulness meditation teache\r\n r\\, and licensed marriage and family therapist. An award-winning educator\\,\r\n  she has a vibrant private practice and travels internationally to speak an\r\n d teach about positive self-awareness and body love.\\n\\nClass details are s\r\n ubject to change.\r\nDTEND:20260220T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Intimacy and Aging\r\nUID:tag:localist.com\\,2008:EventInstance_51388530759381\r\nURL:https://events.stanford.edu/event/intimacy-and-aging-2748\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260220T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T203000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Flute Students of Alexandra Hawley\r\nUID:tag:localist.com\\,2008:EventInstance_51463195796197\r\nURL:https://events.stanford.edu/event/noon-hawley-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260220T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682821518\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Google Earth Engine Python API Quickstart\\n\\nExpanding Your Ear\r\n th Engine Skills with Google Cloud Platform\\n\\nOverview\\n\\nThis workshop in\r\n troduces the Google Earth Engine Python API as the next step for Stanford r\r\n esearchers and instructors who want to move beyond the JavaScript Code Edit\r\n or and work with Earth Engine in Python\\, Jupyter notebooks\\, and cloud-bas\r\n ed analysis environments.\\n\\nA central focus of the session is understandin\r\n g how Earth Engine integrates with Google Cloud Platform (GCP)\\, including \r\n the use of user-managed cloud projects that enable Python API access\\, scal\r\n able computation\\, and reproducible workflows.\\n\\nWorkshop Description\\n\\nT\r\n his session walks participants through the full setup and use of the Earth \r\n Engine Python API\\, starting with cloud project configuration and ending wi\r\n th a complete\\, working analytical example in a Jupyter Notebook.\\n\\nPartic\r\n ipants will be guided through:\\n\\nLogging into the Earth EngineCreating a G\r\n oogle Cloud ProjectRegistering the project as non-commercialEnabling the Ea\r\n rth Engine API within the projectAttaching the project to an existing Earth\r\n  Engine accountOnce this process is complete\\, participants will be able to\r\n  use the Earth Engine Python API\\, which was previously unavailable to stud\r\n ent users.\\n\\nExample Notebook and Workflow\\n\\nThe workshop is built around\r\n  a hands-on walkthrough of an example Jupyter Notebook that demonstrates an\r\n  end-to-end Earth Engine Python workflow. The notebook illustrates how to:\\\r\n n\\nAuthenticate Earth Engine within a notebook environmentQuery and filter \r\n Earth Engine image collectionsPerform server-side analysis from PythonRetur\r\n n and visualize results interactivelyIntroducing geemap\\n\\nThe workshop als\r\n o introduces geemap\\, a Python package that simplifies interactive mapping\\\r\n , visualization\\, and export of Earth Engine data in Jupyter and Colab envi\r\n ronments. geemap bridges Earth Engine’s server-side model with familiar Pyt\r\n hon-based exploratory and presentation workflows.\\n\\nTopics Covered\\n\\nEart\r\n h Engine Python API fundamentalsEarth Engine and Google Cloud project integ\r\n rationAuthentication and project selectionClient-side vs. server-side execu\r\n tion in PythonInteractive mapping and visualization with geemapPatterns for\r\n  reproducible\\, notebook-based workflowsPrerequisites\\n\\nBasic familiarity \r\n with Google Earth Engine conceptsWorking knowledge of PythonSome exposure t\r\n o GIS or remote sensing conceptsThis workshop is not an introduction to Ear\r\n th Engine or Python\\, but it is designed to be accessible to users who are \r\n still early in their Python-based geospatial work.\\n\\nTesting/Getting Acces\r\n s\\n\\nTo determine whether you currently have access to the Stanford Google \r\n Earth Engine Org\\, as well as the ability to create GCP Projects for Google\r\n  Earth Engine\\, you can do the following:\\n\\nIf you are a member of the Sta\r\n nford Doerr School of Sustainability\\, you may already be a member of the G\r\n IS Users Workgroup\\, which gives you login access to Google Earth Engine\\, \r\n as well as Google Cloud Project creation\\, when using Earth Engine.\\n\\nYou \r\n can test your access to Google Earth Engine by logging in with your SUNetID\r\n  Credentials\\, at the Earth Engine Code Editor: https://code.earthengine.go\r\n ogle.com/\\n\\nYou will be guided through a process to create a GCP Project\\,\r\n  register your project as a non-commercial project\\, as well as enabling th\r\n e Google Earth Engine API\\, before you can then select the project for use \r\n in Google Earth Engine. Once you have gone through the process and attached\r\n  the project to your Google Earth Engine account\\, you should be able to ac\r\n cess the Earth Engine Python API.\\n\\nUse the following to authenticate and \r\n see basic usage of the Python API: https://colab.research.google.com/github\r\n /google/earthengine-community/blob/master/guides/linked/ee-api-colab-setup.\r\n ipynb\\n\\nIf you find that your Stanford credentials do not allow you access\r\n  to the Earth Engine platform\\, email Stace maples@stanford.edu\r\nDTEND:20260221T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T220000Z\r\nGEO:37.426413;-122.172471\r\nLOCATION:Branner Earth Sciences Library\\, Stanford Geospatial Center\r\nSEQUENCE:0\r\nSUMMARY:Google Earth Engine Python API Quickstart\r\nUID:tag:localist.com\\,2008:EventInstance_51808885816245\r\nURL:https://events.stanford.edu/event/google-earth-engine-101-python_api\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:On February 20th\\, Mark Down\\, artistic director and co-founder\r\n  of Blind Summit Theatre\\, will be hosting a Puppetry Masterclass with Stan\r\n ford students. All ability levels are welcome. RSVP Encouraged.\\n\\nABOUT BL\r\n IND SUMMIT | Blind Summit is home for anyone with a love-hate relationship \r\n with puppetry and puppets. Love 'em when they're great\\, hate 'em when they\r\n 're not so much... I mean puppets can really get up your nose. And everyone\r\n  else's. And yet\\, for some reason\\, we keep coming back. keep trying again\r\n . Doomed to try\\, doomed to fail\\, doomed to succeed. Anyway\\, this is our \r\n website\\, and if that hasn't put you off then you are welcome here\\, whoeve\r\n r you are\\, whenever you want: blindsummit.com\r\nDTEND:20260220T230000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T220000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Studio\r\nSEQUENCE:0\r\nSUMMARY:WORKSHOP | Puppetry Masterclass with Blind Summit Theatre’s Mark Do\r\n wn\r\nUID:tag:localist.com\\,2008:EventInstance_52003635614049\r\nURL:https://events.stanford.edu/event/blind-summit-puppetry-masterclass\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The experience of OCD (Obsessive Compulsive Disorder) can be is\r\n olating and stressful.\\n\\nThis is an open and ongoing group for students wh\r\n o live with OCD to support each other and have a safe space to connect. The\r\n  group will focus on providing mutual support\\, sharing wisdom\\, increasing\r\n  self-compassion\\, and enhancing overall coping and wellness.\\n\\nMeeting wi\r\n th a facilitator is required to join this group. You can sign up on the INT\r\n EREST LIST_LIVING_WITH_OCD_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in \r\n the \"Groups and Workshops\" section. This group will take place in-person on\r\n  Fridays from 3-4pm on 1/23\\; 1/30\\; 2/6\\; 2/13\\; 2/20\\; 2/27\\; 3/6\\; 3/13.\r\n Facilitated by Jennifer Maldonado\\, LCSWAll enrolled students are eligible \r\n to participate in CAPS groups and workshops. A pre-group meeting is require\r\n d prior to participation in this group. Please contact CAPS at (650) 723-37\r\n 85 to schedule a pre-group meeting with the facilitators\\, or sign up on th\r\n e portal as instructed above.\r\nDTEND:20260221T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260220T230000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Living with OCD\r\nUID:tag:localist.com\\,2008:EventInstance_51782951094569\r\nURL:https://events.stanford.edu/event/copy-of-living-with-ocd-3482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Stanford students and alumni come together to perform a selecti\r\n on of chamber music works by Felix Mendelssohn including his Piano Trio in \r\n D Minor\\, String Quartet in D Major\\, and Octet\\, Op. 20.\\n\\nPerformers:\\n\\\r\n nMaya BenyasAldís ElfarsdóttirJulia HernandezJessica LeePeyton LeeAudrey Li\r\n nBradley MoonSean MoriRyan NguyenAdam ZhaoAdmission Information\\n\\nFree adm\r\n ission\r\nDTEND:20260221T050000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T033000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Braun Rehearsal Hall\r\nSEQUENCE:0\r\nSUMMARY:The Joy of Mendelssohn\r\nUID:tag:localist.com\\,2008:EventInstance_51773737167934\r\nURL:https://events.stanford.edu/event/chamber-mendelssohn\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260221\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264972528\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260221\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355496931\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260221\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353961010\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThe Steven Coutre Review of the 67th Annual American So\r\n ciety of Hematology Meeting offers an in-depth exploration of the groundbre\r\n aking research and emerging data on hematologic disorders presented at the \r\n 67th ASH conference. Participants will gain access to the latest treatment \r\n algorithms and strategies to optimize patient care. The review will utilize\r\n  a variety of learning modalities\\, including case studies\\, panel discussi\r\n ons\\, and interactive audience response questions\\, fostering dynamic excha\r\n nges between expert faculty and attendees. This event will highlight signif\r\n icant advances in hematology\\, showcasing innovations in diagnosis and trea\r\n tment that can be directly applied in clinical practice.\\n\\nRegistrationEar\r\n ly Bird RatesPhysicians/Nurses: $199Allied Health Professionals: $199Indust\r\n ry: $599Residents/Fellows/Trainees - email Amanda Harrison (amanda.harrison\r\n @stanford.edu)Regular Rates as of 12/1/25:\\n\\nPhysician/Nurses: $249Allied \r\n Health Professionals: $249Industry: $699 \\n\\n\\n\\nCreditsAMA PRA Category 1 \r\n Credits™ (8.00 hours)\\, Non-Physician Participation Credit (8.00 hours)\\n\\n\r\n Target AudienceSpecialties - HematologyProfessions - Fellow/Resident\\, Non-\r\n Physician\\, Physician ObjectivesAt the conclusion of this activity\\, learne\r\n rs should be able to:\\n1. Implement the use of new chemotherapeutics and bi\r\n ologics in subpopulations of acute myeloid leukemia patients based on patie\r\n nt clinical and genetic profiles\\n2. Review new drug approvals and practica\r\n l considerations for their safe and optimal use\\n3. Evaluate optimal sequen\r\n cing and combinations of novel agents for CLL and lymphomas\\n4. Asses the r\r\n ole of new therapies in classical (non-malignant) hematology indications\\n5\r\n . Discuss available therapeutic options for patients with low- or high-risk\r\n  myelodysplastic syndromes\\n\\nAccreditationIn support of improving patient \r\n care\\, Stanford Medicine is jointly accredited by the Accreditation Council\r\n  for Continuing Medical Education (ACCME)\\, the Accreditation Council for P\r\n harmacy Education (ACPE)\\, and the American Nurses Credentialing Center (AN\r\n CC)\\, to provide continuing education for the healthcare team. \\n\\nCredit D\r\n esignation \\nAmerican Medical Association (AMA) \\nStanford Medicine designa\r\n tes this Live Activity for a maximum of 8.00 AMA PRA Category 1 CreditsTM. \r\n  Physicians should claim only the credit commensurate with the extent of th\r\n eir participation in the activity. \\n\\nAmerican Board of Internal Medicine \r\n MOC Credit \\nSuccessful completion of this CME activity\\, which includes pa\r\n rticipation in the evaluation component\\, enables the participant to earn u\r\n p to 8.00 MOC points in the American Board of Internal Medicine’s (ABIM) Ma\r\n intenance of Certification (MOC) program. It is the CME activity provider’s\r\n  responsibility to submit participant completion information to ACCME for t\r\n he purpose of granting ABIM MOC credit.\r\nDTEND:20260222T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T160000Z\r\nGEO:37.433929;-122.441246\r\nLOCATION:Ritz-Carlton\\, Half Moon Bay\\, CA \r\nSEQUENCE:0\r\nSUMMARY:The Steven Coutre Review of the 67th Annual American Society of Hem\r\n atology Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50974620814330\r\nURL:https://events.stanford.edu/event/the-steven-coutre-review-of-the-67th-\r\n annual-american-society-of-hematology-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260221T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353485685\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260221T193000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T173000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078568371\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Ring in the Lunar New Year\\, and welcome the Year of the Horse\\\r\n , at our Lunar New Year Workshop on Saturday\\, February 21st\\, from 10:00 A\r\n M – 12:00 PM in the Bechtel International Center’s Assembly Room! Enjoy han\r\n ds-on activities like calligraphy\\, paper-cutting\\, and lacquer fan art\\, p\r\n lus snacks and drinks (available on a first-come basis). All students are w\r\n elcome so RSVP here! 🐎🎆\r\nDTEND:20260221T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T180000Z\r\nGEO:37.423223;-122.172314\r\nLOCATION:Bechtel International Center\\, Assembly Room \r\nSEQUENCE:0\r\nSUMMARY:Lunar New Year Workshop \r\nUID:tag:localist.com\\,2008:EventInstance_52127342967868\r\nURL:https://events.stanford.edu/event/lunar-new-year-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260222T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114942403\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260221T203000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699823285\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260221T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691944730\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260221T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682823567\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260221T233000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708313869\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260222T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260221T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668833777\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Analiese Bancroft presents her capstone composition concert fro\r\n m CCRMA Stage in The Knoll.\\n\\nAdmission Information\\n\\nFree admission\r\nDTEND:20260222T050000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T033000Z\r\nGEO:37.421012;-122.172383\r\nLOCATION:The Knoll\\, CCRMA Stage\r\nSEQUENCE:0\r\nSUMMARY:Capstone Concert: Analiese Bancroft\r\nUID:tag:localist.com\\,2008:EventInstance_51463479606745\r\nURL:https://events.stanford.edu/event/capstone-analiese-bancroft\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Get ready for an enchanting night of music at the Singer's Choi\r\n ce Cabaret\\, featuring students from all four Stanford vocal studios perfor\r\n ming selections they've personally chosen from the worlds of opera and musi\r\n cal theater. Don't miss out on this fantastic celebration of music and cama\r\n raderie!\\n\\nAmission Information\\n\\nFree admission\r\nDTEND:20260222T050000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T033000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Singer’s Choice Cabaret\r\nUID:tag:localist.com\\,2008:EventInstance_51463288863963\r\nURL:https://events.stanford.edu/event/singers-choice-cabaret-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260222\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605264974577\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260222\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355498980\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260222\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353962035\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260222T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353486710\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260222T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T190000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809521518\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Cunning Folk considers magical practice\\, practitioners\\, and t\r\n heir persecution in early modern European artwork and material culture (c.1\r\n 500–1750). The term “cunning folk” typically describes wise people who knew\r\n  traditional spells and remedies believed to cure and protect. The works on\r\n  paper\\, painting\\, and personal items on view in this intimate\\, single ga\r\n llery exhibition more broadly explore the historical concept of “cunning” i\r\n n connection to many forms of secret magical rites and knowledge\\, from fol\r\n k charms to occult natural philosophy to diabolic witchcraft. Early modern \r\n artists also helped construct the idea of magical figures as a threat to th\r\n e prevailing social order–particularly through the rise of print culture–an\r\n d here\\, a selection of American contemporary artworks reconjure these hist\r\n ories.\\n\\nThis exhibition is organized by the Cantor Arts Center and curate\r\n d by Sara Lent Frier\\, Burton and Deedee McMurtry Assistant Curator\\, Print\r\n s\\, Drawings\\, and Academic Engagement. We gratefully acknowledge sustained\r\n  support for Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge provid\r\n ed by The Halperin Exhibitions Fund.\\n\\nIMAGE: Dominique Viviant Denon (Fre\r\n nch\\, 1747–1825)\\, A Coven of Witches (detail)\\, 18th century. Etching. Can\r\n tor Arts Center\\, Stanford University\\, gift of William Drummond\\, 2019. Va\r\n riable channel video installation (color\\, sound)\\; 2:50 min. Cantor Arts C\r\n enter\\, Stanford University\\, The Anonymous B Acquisitions Fund © Jeffrey G\r\n ibson\\n\\nMUSEUM HOURS\\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun:\r\n  10 AM–5 PM\\nCLOSED: Mon and Tues\\nWe’re always free! Come visit us\\, https\r\n ://museum.stanford.edu/visit\r\nDTEND:20260223T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Ruth Levison Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Cunning Folk: Witchcraft\\, Magic\\, and Occult Knowledge\r\nUID:tag:localist.com\\,2008:EventInstance_50605114943428\r\nURL:https://events.stanford.edu/event/cunning-folk-witchcraft-magic-and-occ\r\n ult-knowledge\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Season of Lent: Lent is the forty-day period (excluding Sundays\r\n ) of prayer\\, repentance and self-denial that precedes Easter.\\n\\nUniversit\r\n y Public Worship gathers weekly for the religious\\, spiritual\\, ethical\\, a\r\n nd moral formation of the Stanford community. Rooted in the history and pro\r\n gressive Christian tradition of Stanford’s historic Memorial Church\\, we cu\r\n ltivate a community of compassion and belonging through ecumenical Christia\r\n n worship and occasional multifaith celebrations.\r\nDTEND:20260222T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Season of Lent Ecumenical Christian Serv\r\n ice \r\nUID:tag:localist.com\\,2008:EventInstance_51958449962437\r\nURL:https://events.stanford.edu/event/upw-lent-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260222T203000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T193000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543404067\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260222T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691947803\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260222T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682824592\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260222T233000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708315918\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260223T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260222T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668834802\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260223T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T013000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52134425823291\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260223\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019658155\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Department of African and African American Studies (DAAAS) \r\n invites students to the 2026 Opportunity Summit!  \\n\\nOur theme this year i\r\n s African and African American Studies in Technology and Media: Pathways fo\r\n r Change!\\n\\nYou will be part of an interactive workshop where you'll learn\r\n  how to create application materials that get noticed by employers. We'll c\r\n over:\\n\\nWhat employers really want and how to respond to their needsEssent\r\n ial resume components and effective formatting (including applicant trackin\r\n g system compatibility)How to showcase your experience using strong action \r\n verbs and a proven method for writing impactful bullet point descriptionsTa\r\n iloring strategies that make your application stand outUsing Gen AI respons\r\n ibly when crafting application materialsCover letter essentials that comple\r\n ment your resumeThereafter\\, you will hear firsthand experiences\\, learn ab\r\n out internships\\, jobs and post-graduate pathways and connect with peers an\r\n d professionals navigating careers in media and technology.\\n\\nDate: Monday\r\n  February 23\\, 6-8pm\\n\\nDinner and dessert will be provided. \\n\\nPlease RSV\r\n P by 12noon Monday February 23.\\n\\nDon't miss this exciting opportunity to \r\n learn more about opportunities in media and technology.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260223\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 80\\, 114\r\nSEQUENCE:0\r\nSUMMARY:DAAAS Opportunity Summit 2026: AAAS in Technology and Media\r\nUID:tag:localist.com\\,2008:EventInstance_52138095920269\r\nURL:https://events.stanford.edu/event/daaas-undergraduate-opportunity-week\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260223\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353963060\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport\r\nDESCRIPTION:Stanford Redwood City Recreation and Wellness invites you to jo\r\n in our Team training sessions with a personal trainer and a group of 3-4 pe\r\n ople. Participants will meet once a week for 5 weeks based on the timeslot \r\n you sign up for. Open to all abilities\\, must have an active membership to \r\n the facility.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260223\r\nGEO:37.483753;-122.204314\r\nLOCATION:Stanford Redwood City Recreation and Wellness Center\\, Upstairs Co\r\n urt\r\nSEQUENCE:0\r\nSUMMARY:Team Training Session 2 (Redwood City)\r\nUID:tag:localist.com\\,2008:EventInstance_52002436711763\r\nURL:https://events.stanford.edu/event/team-training-session-2-redwood-city\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Please note: SLAC onsite appointments are for SLAC Active Staff\r\n  only due to security access reasons.\\n\\nDid you know that advisors from Fi\r\n delity Investments and TIAA provide free individual financial counseling on\r\n  campus at your convenience? They can offer guidance on the best strategy t\r\n o meet your retirement goals through Stanford's retirement savings plans.\\n\r\n \\nContact Fidelity directly to schedule an appointment with a representativ\r\n e to review your current and future retirement savings options:\\n\\nFidelity\r\n  appointment scheduler(800) 642-7131\r\nDTEND:20260224T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T163000Z\r\nGEO:37.419892;-122.205244\r\nLOCATION:SLAC National Accelerator Laboratory\\, Bldg 53\\, Conference Room 4\r\n 050 (Room 053-4050\\, Yosemite Conf Room)\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (SLAC Campus\\, Bldg 53\\, Room 40\r\n 50) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51887162345157\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-slac-campus-bldg-53-room-4050-by-appointment-only-2151\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260223T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353487735\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260224T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382749862\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Lecturers and Academic Teaching Staff (LATS) Event Series\\n\\nTh\r\n e Academic Integrity Working Group (AIWG) wants to hear your voice on acade\r\n mic integrity culture. Join this roundtable discussion to share experiences\r\n  and perspectives on topics such as academic integrity\\, the evolving role \r\n of generative AI in learning\\, proctoring on campus\\, and ways to strengthe\r\n n trust and collaboration in the classroom.\\n\\nYour participation will help\r\n  AIWG to better understand campus sentiment\\, and gather insights to inform\r\n  future academic integrity initiatives. AIWG is preparing to make recommend\r\n ations to the Faculty Senate and institutional leaders in the spring\\, so y\r\n our input is especially timely.\\n\\nLunch will be provided. Come join the co\r\n nversation*. The room is reserved between 11:30 am and 1:30 pm for extra di\r\n scussion and small group conversations.\\n\\n*To facilitate discussion and co\r\n nnection among colleagues\\, this event is in-person only. If you are unable\r\n  to attend\\, we will send out a survey to capture your voice later. If you \r\n would like to receive that survey\\, please indicate so in the RSVP.\r\nDTEND:20260223T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T200000Z\r\nLOCATION:408 Panama Mall\\, CTL Meeting Space (116)\r\nSEQUENCE:0\r\nSUMMARY:Brewing Integrity: A roundtable discussion with the Academic Integr\r\n ity Working Group on academic integrity culture at Stanford\r\nUID:tag:localist.com\\,2008:EventInstance_51994296140943\r\nURL:https://events.stanford.edu/event/brewing-integrity-a-roundtable-discus\r\n sion-with-the-academic-integrity-working-group-on-academic-integrity-cultur\r\n e-at-stanford\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260224T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561113950\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Your eyes are an integral part of your health. While most peopl\r\n e understand the importance of this precious organ\\, many are still missing\r\n  key information that could help protect their eyes from potential health i\r\n ssues and vision impairment.\\n\\nDiscover the science behind healthy eyes an\r\n d sharper vision through this interactive webinar. We will discuss the cond\r\n itions and diseases that can affect the eyes\\, including cataracts\\, glauco\r\n ma\\, and macular degeneration\\, and recommendations for screening for these\r\n  conditions. We will also cover techniques for restoring vision\\, including\r\n  LASIK and intraocular lenses\\, as well as new treatments for dry eyes and \r\n allergies. Bring your curiosity and leave with practical insights for ensur\r\n ing your eyes' health and longevity.\\n\\nThis class will be recorded and a o\r\n ne-week link to the recording will be shared with all registered participan\r\n ts. To receive incentive points\\, attend at least 80% of the live session o\r\n r listen to the entire recording within one week.  Request disability accom\r\n modations and access info.\\n\\nInstructor: Barbara Erny\\, MD\\, is a board-ce\r\n rtified ophthalmologist and adjunct clinical associate professor at Stanfor\r\n d University School of Medicine.  After 26 years of practicing at Sutter He\r\n alth\\, she is now working to integrate climate change and health education \r\n into Stanford’s medical curriculum and is a faculty fellow at the Stanford \r\n Center for Innovation in Global Health\\, focusing on global ophthalmology. \r\n \\n\\nClass details are subject to change.\r\nDTEND:20260223T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Insights into Eye Care\r\nUID:tag:localist.com\\,2008:EventInstance_51388530867937\r\nURL:https://events.stanford.edu/event/insights-into-eye-care-5740\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the Center for the Study of the Novel (CSN) for an \r\n exciting lunchtime lecture by Mariana Dimópulos: “The Novel as Philosophy: \r\n Iris Murdoch\\, Simone de Beauvoir\\, and a Century of Women Thinkers.”\\n\\nIn\r\n  her talk\\, Dimópulos engages with the novel of ideas as a problem both for\r\n  narrative form and for the emplotment of truth. \\n\\nMariana Dimópulos (PhD\r\n  Philosophy\\, Bonn Universität) is Berlin-based Argentine intellectual. Her\r\n  latest book is a collaboration with J.M. Coetzee.\r\nDTEND:20260223T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 460\\, Margaret Jacks Hall\\, 426 (Terrace Room)\r\nSEQUENCE:0\r\nSUMMARY:Lecture with Mariana Dimópulos: “The Novel as Philosophy: Iris Murd\r\n och\\, Simone de Beauvoir\\, and a Century of Women Thinkers.”\r\nUID:tag:localist.com\\,2008:EventInstance_52004924116707\r\nURL:https://events.stanford.edu/event/lecture-with-mariana-dimopulos-the-no\r\n vel-as-philosophy-iris-murdoch-simone-de-beauvoir-and-a-century-of-women-th\r\n inkers\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us as we welcome David Palumbo-Liu to the SLE Salon.  Zong\r\n ! is NourbeSe Philip’s book length poem published by Weslyan University Pre\r\n ss\\, and by The Mercury Press in Canada. This extended 182 page poetry cycl\r\n e is composed entirely from the words of the case report\\, Gregson vs. Gilb\r\n ert\\, related to the murder of Africans on board a slave ship at the end of\r\n  the eighteenth century. Professor David Palumbo Liu will introduce the poe\r\n m and lead a discussion on it.\\n\\nThe case report Gregson vs. Gilbert\\, rec\r\n ounts the massacre by drowning of some 130 enslaved Africans over the cours\r\n e of ten days beginning on November 29th\\, 1781. The captain of the eponymo\r\n us slave ship\\, Zong\\, having made many navigational errors resulting in ex\r\n tending the length of the voyage from West Africa to Jamaica ordered the Af\r\n ricans be thrown overboard so as to allow the owners of the ship\\, the Greg\r\n sons\\, to claim indemnity from their insurers\\, the Gilberts. When the insu\r\n rers refused to honour the contract of insurance\\, the ship’s owners initia\r\n ted legal action against them\\, which proved to be successful. Upon appeal\\\r\n , however\\, the insurers\\, the Gilberts were granted a new trial. The repor\r\n t of that hearing\\, Gregson vs Gilbert constitutes the only extant\\, public\r\n  document related to the massacre. Through fugal and counterpointed strateg\r\n ies\\, Zong! explodes the coded\\, documented silence of the historical text \r\n to become an anti-narrative lament that tells the story of this haunting an\r\n d tragic massacre: it cannot be told yet must be told\\; it can only be told\r\n  by not telling.\\n\\nFunding for SLE Salons is provided by VPUE's Academic-R\r\n esidential Co-Curriculum (ARC).\r\nDTEND:20260223T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T201500Z\r\nGEO:37.422316;-122.171203\r\nLOCATION:Florence Moore Hall\\, SLE Main Lounge\r\nSEQUENCE:0\r\nSUMMARY:SLE Salon: David Palumbo-Liu on Zong!: a haunting lifeline between \r\n archive and memory\\, law and poetry.\r\nUID:tag:localist.com\\,2008:EventInstance_51954161181993\r\nURL:https://events.stanford.edu/event/david-palumbo-liu\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Abstract\\n\\nThe Earth’s subsurface is fractured and highly hete\r\n rogeneous\\, and fractures often act as preferential pathways that dominate \r\n fluid flow and solute transport. This fracture-controlled behavior strongly\r\n  influences a variety of subsurface technologies including carbon and hydro\r\n gen storage\\, natural or stimulated hydrogen production\\, geothermal energy\r\n \\, enhanced hydrocarbon recovery\\, and long-term geologic disposal of spent\r\n  nuclear fuel. These technologies are critical for a sustainable energy tra\r\n nsition\\, but predicting flow and transport in fractured media remains diff\r\n icult because attributes such as fracture geometry\\, roughness\\, and connec\r\n tivity are highly variable and are hard to measure and control.\\n\\nIn this \r\n talk\\, I connect processes from the single-fracture- to the reservoir-scale\r\n  using complementary experiments and modeling. At the fracture-scale\\, I pr\r\n esent controlled studies in rough fractures enabled by synthetic fracture g\r\n eneration and repeatable 3D-printed geometries\\, paired with high-fidelity \r\n pore-scale simulations. These results quantify how roughness\\, wettability\\\r\n , capillary number\\, and viscosity ratio govern invasion dynamics\\, breakth\r\n rough\\, and transitions between stable displacement and fingering regimes\\,\r\n  extending classic porous media displacement phase diagrams for fractures. \r\n At the reservoir-scale\\, I discuss examples of reservoir heterogeneity and \r\n its impact on inter-well communication\\, along with ongoing work on natural\r\n  hydrogen\\, describing its impact as a clean energy resource and a modeling\r\n  approach for its generation via radiolysis as the key governing mechanism.\r\n \\n\\n\\n\\nBio\\n\\nDr. Prakash Purswani is a Director’s Postdoctoral Fellow in \r\n the Earth and Environmental Sciences Division at Los Alamos National Labora\r\n tory (LANL). He integrates experimental and computational frameworks to und\r\n erstand and predict multiphase flow and reactive transport processes in por\r\n ous and fractured subsurface systems\\, with applications to geologic carbon\r\n  and hydrogen storage and natural hydrogen systems as energy transition tec\r\n hnologies. His research combines high-pressure microfluidics\\, additive man\r\n ufacturing\\, non-destructive imaging\\, and advanced numerical approaches\\, \r\n including lattice Boltzmann and reservoir modeling to investigate flow\\, tr\r\n apping\\, and recovery mechanisms across pore- to field-scales. His work emp\r\n hasizes the integration of experiments with physics-based and data-driven m\r\n odeling to improve understanding of complex subsurface systems.\\n\\nPrakash \r\n earned his Ph.D. and M.S. in Energy and Mineral Engineering from The Pennsy\r\n lvania State University and his B.E. in Chemical Engineering from BITS Pila\r\n ni\\, Hyderabad Campus. He has co-authored 20 peer-reviewed publications in \r\n leading journals including Environmental Science & Technology Letters\\, Geo\r\n physical Research Letters\\, and Lab on a Chip\\, and is the recipient of sev\r\n eral honors\\, including the prestigious Director’s Postdoctoral Fellowship \r\n at LANL and the Gordon Research Seminar Best Poster Award.\\n\\nResearch/Rela\r\n ted Papers\\n\\nApplication of Tracer-Based Workflow for Calibrating Reservoi\r\n r Heterogeneity\\nhttps://onepetro.org/REE/article-abstract/24/03/603/449774\r\n /Application-of-Tracer-Based-Workflow-for?redirectedFrom=fulltext\\n\\npySimF\r\n rac: A Python library for synthetic fracture generation and analysis\\nhttps\r\n ://www.sciencedirect.com/science/article/pii/S0098300424001481\\n\\nNumerical\r\n  investigation of multiphase flow through self-affine rough fractures\\nhttp\r\n s://www.sciencedirect.com/science/article/pii/S0309170824002392\r\nDTEND:20260223T212000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T203000Z\r\nGEO:37.426823;-122.174006\r\nLOCATION:Green Earth Sciences Building\\, 104\r\nSEQUENCE:0\r\nSUMMARY:ESE Seminar - Prakash Purswani: \"Cracks\\, Fluids\\, and Reactions: F\r\n low and Transport in Fractured Media\"\r\nUID:tag:localist.com\\,2008:EventInstance_52137602666259\r\nURL:https://events.stanford.edu/event/ese-seminar-prakash-purswani-cracks-f\r\n luids-and-reactions-flow-and-transport-in-fractured-media\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:“Wearable ultrasound technology”\\n\\nSpeaker: Sheng Xu\\, Profess\r\n or of Anesthesiology\\, Perioperative & Pain Medicine and\\, by courtesy\\, of\r\n  Electrical Engineering\\, Stanford University\\n\\nAbstract: The use of weara\r\n ble electronic devices that can acquire vital signs from the human body non\r\n invasively and continuously is a significant trend for healthcare. The comb\r\n ination of materials design and advanced microfabrication techniques enable\r\n s the integration of various components and devices onto a wearable platfor\r\n m\\, resulting in functional systems with minimal limitations on the human b\r\n ody. Physiological signals from deep tissues are particularly valuable as t\r\n hey have a stronger and faster correlation with the internal events within \r\n the body compared to signals obtained from the surface of the skin. In this\r\n  presentation\\, I will demonstrate a soft ultrasonic technology that can no\r\n ninvasively and continuously acquire dynamic information about deep tissues\r\n  and central organs. I will also showcase examples of this technology’s use\r\n  in recording blood pressure and flow waveforms in central vessels\\, monito\r\n ring cardiac chamber activities\\, and measuring core body temperatures. The\r\n  soft ultrasonic technology presented represents a platform with vast poten\r\n tial for applications in consumer electronics\\, defense medicine\\, and clin\r\n ical practices.\\n\\nBio: Dr. Sheng Xu is a tenured professor and the inaugur\r\n al Director of Emerging Technologies in the Department of Anesthesiology\\, \r\n Perioperative and Pain Medicine at Stanford University\\, with a courtesy ap\r\n pointment in Electrical Engineering. He earned his B.S. degree in Chemistry\r\n  from Peking University and his Ph.D. in Materials Science and Engineering \r\n from the Georgia Institute of Technology. Subsequently\\, he pursued postdoc\r\n toral studies at the Materials Research Laboratory at the University of Ill\r\n inois at Urbana-Champaign. His research group is interested in developing n\r\n ew materials and fabrication methods for soft electronics. His research has\r\n  been presented to the United States Congress as a testimony to the importa\r\n nce and impact of NIH funding.\r\nDTEND:20260223T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T203000Z\r\nGEO:37.429246;-122.173847\r\nLOCATION:David Packard Electrical Engineering\\, 202\r\nSEQUENCE:0\r\nSUMMARY:eWEAR Seminar: Wearable ultrasound technology\r\nUID:tag:localist.com\\,2008:EventInstance_51816084154001\r\nURL:https://events.stanford.edu/event/ewear-seminar-wearable-ultrasound-tec\r\n hnology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for an in-depth conversation with Emily Galvin-Almanza \r\n (SLS ’10) as she discusses her powerful new book\\, The Price of Mercy\\, whi\r\n ch Michelle Alexander calls “searing\\, compassionate\\, and utterly necessar\r\n y.”\\n\\nIn The Price of Mercy\\, Emily Galvin Almanza weaves hard data and un\r\n forgettable stories\\, dark humor and compelling evidence to tell us the tru\r\n th about what’s really going on behind the closed doors of America’s crimin\r\n al courts. She shows us how jails actually increase future crime\\, the dirt\r\n y tricks police use to make millions in overtime pay\\, how a man could spen\r\n d decades in prison because scientists mistook dog hair for his own\\, the p\r\n erverse incentives that push prosecutors to seek convictions even when they\r\n  themselves don’t want to\\, and how judges may decide cases differently aft\r\n er lunch.\\n\\nEmily will be joined by Matthew Clair\\, Assistant Professor of\r\n  Sociology\\, in a discussion moderated by Mike Romano\\, Director of the Thr\r\n ee Strikes Project. Together\\, they’ll explore the human cost of the dysfun\r\n ctional system and illuminate a path toward a more equitable future.\r\nDTEND:20260223T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T204500Z\r\nGEO:37.423877;-122.167441\r\nLOCATION:Law School\\, Room 190\r\nSEQUENCE:0\r\nSUMMARY:The Price of Mercy: A Conversation with author Emily Galvin-Almanza\r\n  (SLS '10)\r\nUID:tag:localist.com\\,2008:EventInstance_52013906222189\r\nURL:https://events.stanford.edu/event/the-price-of-mercy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour,Lecture/Presentation/Talk\r\nDESCRIPTION:Join Trisha Lagaso Goldberg\\, Director of Programs and Engageme\r\n nt at the Anderson Collection\\, on this special tour of Alteronce Gumby. \\n\r\n \\nThe Anderson Collection presents the first West Coast museum exhibition o\r\n f New York–based artist Alteronce Gumby. Featuring nine recent works\\, the \r\n show celebrates Gumby’s ongoing investigation of color\\, the cosmos\\, and a\r\n bstraction. Drawing inspiration from artists represented in the Anderson Co\r\n llection\\, such as Mark Rothko and Joan Mitchell\\, Gumby’s luminous\\, textu\r\n red surfaces extend the legacies of 20th-century American painting while fo\r\n rging a distinctly contemporary path. The exhibition is on view in the Wisc\r\n h Family Gallery from September 24\\, 2025-March 1\\, 2026.\\n\\nAlteronce Gumb\r\n y is a contemporary abstract painter interested in the history of monochrom\r\n atic painting\\, color theory\\, cosmology\\, astrophysics\\, and interstellar \r\n photography. Gumby’s process is the fulcrum of his work. It begins with the\r\n  examination of light and its properties\\, and media including resin\\, glas\r\n s and gemstones. This unorthodox blend of materials results in works Gumby \r\n calls “tonal paintings”\\, each producing unique hues\\, values and energies.\r\n  Dynamic and vibrant\\, Gumby’s paintings propose an expanded understanding \r\n of abstraction\\, color\\, life and the origins of the universe. Gumby gradua\r\n ted from the Yale School of Art with an MFA in Painting and Printmaking in \r\n 2016. He has won notable awards such as the Austrian American Foundation/ S\r\n eebacher Prize for Fine Arts and the Robert Reed Memorial Scholarship. Gumb\r\n y has also participated in numerous international artist residencies such a\r\n s the Rauschenberg Residency (2019)\\, London Summer Intensive (2016)\\, Summ\r\n er Academy in Salzburg\\, Austria (2015)\\, 6Base (2016)\\, Harriet Hale Wooll\r\n ey Scholarship at the Fondation des Étas-Unis in Paris (2016) and is the 20\r\n 24-2025 recipient of the prestigious Pollock-Krasner Foundation grant for a\r\n rtists.\\n\\nRSVP here.\r\nDTEND:20260223T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T210000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, Wisch Gallery\r\nSEQUENCE:0\r\nSUMMARY:Curator Talk | Alteronce Gumby with Trisha Lagaso Goldberg\r\nUID:tag:localist.com\\,2008:EventInstance_51305125574505\r\nURL:https://events.stanford.edu/event/February-curator-talk-alteronce-gumby\r\n -with-trisha-lagaso-goldberg\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Tanbūr and Iran’s Sonic Heritage: The Yarsan Ritual Tradition\\,\r\n  Myth\\, and Spirituality\\n\\nFebruary 23\\, 24\\, 25\\, and 26\\n\\nAcclaimed Ira\r\n nian musician Ali Akbar Moradi will teach four music workshops in Persian\\,\r\n  sponsored by the Iranian Studies Program and the Department of Music. Plea\r\n se RSVP to attend. Space is limited\\, priority is given to Stanford affilia\r\n tes. An instrument is not required to attend and learn but you may bring yo\r\n ur tanbūr if you have one. Guests will receive a confirmation email if they\r\n  are added to the workshop or have been added to the waitlist. Please only \r\n RSVP if you are sure you can attend. \\n\\nAli Akbar Moradi began playing the\r\n  tanbūr at the age of seven and learned not only the music but the Kurdish \r\n maqam repertoire. He has won awards\\, recorded several albums\\, and perform\r\n ed in Europe\\, the United States\\, and Canada with singers like Shahram Naz\r\n eri and at the Royal Festival Hall in London. In addition to teaching the t\r\n anbūr in Tehran and his hometown of Kermanshah\\, Ali Akbar is a dedicated s\r\n cholar of the tanbūr and continues to develop the legacy of the instrument \r\n and the regional Kurdish music.\\n\\nWorkshops coordinated by Ashkan Nazari\\,\r\n  a Stanford PhD student in ethnomusicology. \\n\\nSession One: Monday\\, Febru\r\n ary 23\\, 2:00-4:00\\n\\nA general introduction to the tanbūr\\, including:\\n\\n\r\n Its historical development\\, the etymology and meaning of the term tanbūr.M\r\n ajor categories of tanbūr maqāms\\; the tanbūr’s presence in Iran and in bro\r\n ader global contexts.The instrument’s range and the number of frets\\, the p\r\n rincipal structural components of the instrument.Plectra (mezrāb) and core \r\n performance techniques. The session concludes with instruction in one maqām\r\n .Session Two: Tuesday\\, February 24\\, 12:00-2:00\\n\\nThe tanbūr in relation \r\n to Yārsān religious tradition including:\\n\\nRitual narratives and accounts \r\n associated with specific tanbūr maqāmsRhythmic organization and ancient cyc\r\n lical patterns (adwār) within the tanbūr maqām repertoire.The session concl\r\n udes with instruction in one maqām.Session Three: Wednesday\\, February 25\\,\r\n  2:00-4:00\\n\\nThe tanbūr and the Shāhnāmeh\\, with attention to maqāms assoc\r\n iated with the epic tradition.The session concludes with instruction in one\r\n  maqām.Session Four: Thursday\\, February 26\\, 12:00-2:00\\n\\nA brief overvie\r\n w of Iran’s classical radīf tradition\\, with comparative attention to affin\r\n ities between selected tanbūr maqāms and particular gūsheh-s in the radīf r\r\n epertoire.Part of the Stanford Festival of Iranian Arts\\n\\nStanford is comm\r\n itted to ensuring its facilities\\, programs and services are accessible to \r\n everyone. To request access information and/or accommodations for this even\r\n t\\, please complete https://tinyurl.com/AccessStanford at the latest one we\r\n ek before the event.\r\nDTEND:20260224T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Iranian Music Workshops with Ali Akbar Moradi\r\nUID:tag:localist.com\\,2008:EventInstance_51995410183517\r\nURL:https://events.stanford.edu/event/iranian-music-workshops-with-ali-akba\r\n r-moradi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:\"Joy is not for just the lucky few – it’s a choice anyone can m\r\n ake.\" - James Baraz\\, creator of the Awakening Joy course.\\n\\nAwakening Joy\r\n  is an internationally recognized course designed to awaken joy through exc\r\n iting themes and practices that incline the mind toward well-being and deep\r\n er insight.\\n\\nIn this four-session online class series\\, you will learn th\r\n e science behind generating real happiness\\, build healthy habits and belie\r\n fs through powerful awareness practices\\, develop a solid mindfulness pract\r\n ice\\, and become part of a community through class support and practice par\r\n tners.\\n\\nThis is not a “feel good” program\\, but rather a “feel everything\r\n ” program\\, leading to authentic appreciation of your life\\, just as it is.\r\n  Class experience includes hands-on skill-building activities\\, lecture\\, s\r\n mall group interactive exercises\\, a book discussion\\, videos\\, guided medi\r\n tation recordings\\, written material\\, experiential practices\\, singing\\, a\r\n nd joyful movement. As students\\, you will receive the opportunity to selec\r\n t the modes for learning that best suit you. To get the most out of the cla\r\n ss experience\\, please be prepared to actively participate in breakout room\r\n s\\, class discussions\\, and activities. By the end of the class\\, you will \r\n have the tools and skills you need to start living a more fulfilling\\, joyf\r\n ul life.\\n\\nThis class will not be recorded. Attendance requirement for inc\r\n entive points - at least 80% of 3 of the 4 sessions.  Request disability ac\r\n commodations and access info.\\n\\nInstructor: Patty McLucas is a Somatic Exp\r\n eriencing Practitioner (SEP) and Mindfulness Based Stress Reduction (MBSR) \r\n instructor who uses mindfulness practices\\, sleep strategies\\, and body-bas\r\n ed techniques. Patty has led programs for Apple and Google\\, and currently \r\n teaches mindfulness meditation classes for Stanford’s Cancer and Neuroscien\r\n ce Wellness programs.\\n\\nClass details are subject to change.\r\nDTEND:20260223T234500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T223000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:CANCELED:(Canceled) Awakening Joy  (February 23 - March 16)\r\nUID:tag:localist.com\\,2008:EventInstance_51388530812635\r\nURL:https://events.stanford.edu/event/awakening-joy-february-23-march-16\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This discussion examines why women—particularly mothers—struggl\r\n e to sustain paid work even after skills training\\, and what enables long-t\r\n erm labor market participation. Drawing on evidence from India\\, including \r\n insights from Pratham's Second Chance program\\, the panel explores what mus\r\n t accompany skills development for employment to \"stick.\"\\n\\nLeaders from P\r\n ratham and Stanford University\\, including Rukmini Banerji\\, Chief Executiv\r\n e Officer of Pratham Education Foundation\\; Alessandra Voena\\, professor of\r\n  economics at Stanford\\; and Suhani Jalota of the Hoover Institution\\, will\r\n  bring together research and practice to examine critical interventions: co\r\n ntinued education\\, access to childcare and daycare\\, household- and parent\r\n ing-level support\\, and spousal engagement.\\n\\nAbout the speakers:\\n\\nDr. R\r\n ukmini Banerji is the Chief Executive Officer of Pratham Education Foundati\r\n on. Rukmini Banerji was trained as an economist at St. Stephen’s College (D\r\n elhi) and the Delhi School of Economics. She was a Rhodes Scholar at Oxford\r\n  University (1981-83) and completed her PhD at the University of Chicago in\r\n  1991. Rukmini returned to India in 1996 and joined Pratham. Over the years\r\n \\, she has worked extensively in Pratham’s education programs in rural and \r\n urban areas. Along with her teams\\, she has played a major role in designin\r\n g and supporting large scale partnerships with state governments in India\\,\r\n  for improving children’s learning outcomes. Since 2015\\, she has been the \r\n CEO of Pratham.\\n\\nAlessandra Voena is an empirical microeconomist who stud\r\n ies primarily the economics of the family and the economics of science and \r\n innovation. She is currently a Professor of Economics at Stanford Universit\r\n y\\, and an Editor of the Journal of Labor Economics. She has previously tau\r\n ght at the University of Chicago and has been a Visiting Assistant Professo\r\n r at Yale University and a postdoctoral fellow at the Kennedy School of Gov\r\n ernment at Harvard University. In 2017\\, she was awarded the Sloan Research\r\n  Fellowship and the Carlo Alberto Medal from the Collegio Carlo Alberto. Sh\r\n e holds a PhD and an MA in Economics from Stanford University and a Laurea \r\n in Economia e Commercio from the Università degli Studi di Torino.\\n\\nSuhan\r\n i Jalota is an applied microeconomist and entrepreneur with a focus on labo\r\n r markets\\, healthcare access\\, and AI adoption in emerging economies. She \r\n is a Hoover Fellow at Stanford University’s Hoover Institution\\, where her \r\n field experiments explore barriers to workforce participation and health sy\r\n stem access\\, and test AI-enabled interventions to increase productivity at\r\n  scale. She leads Stanford’s Future of Work for Women Initiative with the H\r\n oover Institution\\, a cross-sector program that turns evidence into partner\r\n ships to accelerate workforce entry and firm productivity. She is also the \r\n Founder of Myna Mahila Foundation\\, a research-driven social enterprise tha\r\n t now reaches 1.5 million women with a team of 70 in India\\; Myna Research\\\r\n , which runs field experiments in urban slums\\; and Rani Work\\, a platform \r\n enabling smartphone-based digital employment.  She holds a BS from Duke and\r\n  a PhD and MBA from Stanford as a Knight-Hennessy Scholar.\r\nDTEND:20260224T003000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T230000Z\r\nGEO:37.429251;-122.165344\r\nLOCATION:Gunn Building (SIEPR)\\, Koret-Taube Conference Center\r\nSEQUENCE:0\r\nSUMMARY:Bridging Gaps\\, Building Futures: A Dialogue on Gender\\, Education\\\r\n , and Work \r\nUID:tag:localist.com\\,2008:EventInstance_52030088967740\r\nURL:https://events.stanford.edu/event/bridging-gaps-building-futures-dialog\r\n ue-on-gender-education-work\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the Race and Gender in the Global Hispanophone rese\r\n arch group for a talk entitled \"Gender Trouble: Fifteenth-Century Iberia\" b\r\n y E. Michael Gerli (Adjunct Professor\\, Iberian and Latin American Cultures\r\n \\, Stanford University). \\n\\nRSVP for the Race and Gender talk by E. Michae\r\n l Gerli\r\nDTEND:20260224T003000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260223T230000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 216\r\nSEQUENCE:0\r\nSUMMARY:Race and Gender in the Global Hispanophone: \"Gender Trouble: Fiftee\r\n nth-Century Iberia\" by E. Michael Gerli (Adjunct Professor\\, Iberian and La\r\n tin American Cultures\\, Stanford University) \r\nUID:tag:localist.com\\,2008:EventInstance_52021085740185\r\nURL:https://events.stanford.edu/event/race-and-gender-in-the-global-hispano\r\n phone-gender-trouble-fifteenth-century-iberia-by-e-michael-gerli-adjunct-pr\r\n ofessor-iberian-and-latin-american-cultures-stanford-university\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260224T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T000000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, Clark Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Biology Seminar Series: James Gagnon “A genome-edited wrinkle in bi\r\n ological time”\r\nUID:tag:localist.com\\,2008:EventInstance_51596274369832\r\nURL:https://events.stanford.edu/event/biology-seminar-series-james-gagnon-a\r\n -genome-edited-wrinkle-in-biological-time\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Due to unforeseen circumstances\\, today's Ron Alexander Memoria\r\n l Lecture in Musicology with Brian Kane has been rescheduled for a later da\r\n te.\\n\\nWe apologize for the inconvenience. If you have any questions\\, plea\r\n se contact musicinfo@stanford.edu. Thank you for your patronage\\, and we lo\r\n ok forward to seeing you at another upcoming Department of Music event.\r\nDTEND:20260224T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T003000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Room 103\r\nSEQUENCE:0\r\nSUMMARY:RESCHEDULED: Ron Alexander Memorial Lectures in Musicology – Brian \r\n Kane\\, Yale University\r\nUID:tag:localist.com\\,2008:EventInstance_51879956085233\r\nURL:https://events.stanford.edu/event/alexander-lecture-brian-kane\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Stanford Energy Seminar has been a mainstay of energy engag\r\n ement at Stanford for nearly 20 years and is one of the flagship programs o\r\n f the Precourt Institute for Energy. We aim to bring a wide variety of pers\r\n pectives to the Stanford community – academics\\, entrepreneurs\\, utilities\\\r\n , non-profits\\, and more. \\n\\n \\n\\nAbout the talk\\n\\nThe global energy tran\r\n sition will only succeed with the active participation of the private secto\r\n r. Corporates are central to this effort: they are major sources of greenho\r\n use gas emissions\\, among the largest consumers of electricity\\, critical d\r\n rivers of innovation and scale in climate technologies\\, and—crucially—key \r\n providers of capital. Today\\, a substantial share of global energy investme\r\n nt is financed by private capital\\, and as fiscal constraints for governmen\r\n ts intensify\\, the role of corporates is set to become even more decisive.\\\r\n nYet corporate action on climate is neither automatic nor uniform. Publicly\r\n  listed companies operate within a governance framework shaped by sharehold\r\n er expectations\\, board oversight\\, executive incentives\\, regulation\\, and\r\n  societal pressure. Boards are ultimately responsible for setting strategy \r\n and allocating capital\\, and their decisions reflect how value is defined a\r\n nd measured across different industries and business models. As a result\\, \r\n well-intentioned climate goals often encounter a hard constraint at the cap\r\n ital allocation stage—where projects must compete for funding against alter\r\n native uses of capital on risk\\, return\\, and strategic relevance.\\nThis se\r\n minar aims to demystify how corporate boards think about the energy transit\r\n ion. Drawing on real-world boardroom experience\\, we will explore the key d\r\n rivers that shape decision-making—investor priorities\\, return thresholds\\,\r\n  compensation structures\\, regulatory signals\\, and competitive dynamics—an\r\n d how these have evolved over time.  \\nThrough selected case studies from p\r\n ublic companies\\, the session will illustrate how these forces have influen\r\n ced capital allocation and strategic choices related to decarbonization\\, c\r\n limate technologies\\, and long-term transition pathways. Finally\\, we will \r\n synthesize these insights to identify the conditions required to catalyze w\r\n idespread and durable corporate action in support of the energy transition.\r\n \\nThis perspective matters now because the next phase of the energy transit\r\n ion will be determined less by ambition-setting and more by execution at sc\r\n ale. With public finances under pressure\\, investor scrutiny rising\\, and p\r\n olicy incentives evolving unevenly across regions\\, understanding how board\r\n s actually make capital allocation decisions is essential to closing the ga\r\n p between climate goals and real-world outcomes.\\n\\n \\n\\nRahul Dhir has had\r\n  a diverse and impactful career as a business leader\\, entrepreneur\\, and i\r\n nvestment banker. Most recently\\, he served as CEO of Tullow plc\\, where he\r\n  led a comprehensive turnaround and strategic reset\\, significantly enhanci\r\n ng both operational and financial performance\\, reducing debt\\, and positio\r\n ning the company for sustainable future growth.\\nEarlier in his career\\, Ra\r\n hul founded Delonex Energy\\, an Africa-focused oil and gas company. Prior t\r\n o that\\, he served as CEO of Cairn India\\, leading the company from its inc\r\n eption through its IPO and a successful exit valued at over $13 billion.\\nB\r\n efore transitioning to business leadership roles\\, Rahul was co-head of ene\r\n rgy banking at Merrill Lynch in London\\, advising clients on mergers\\, acqu\r\n isitions\\, and capital market strategies.\\nRahul’s leadership is characteri\r\n zed by the ability to deliver business value while maintaining a strong com\r\n mitment to community engagement and sustainability. He is also passionate a\r\n bout mentoring young professionals and students and has supported numerous \r\n educational initiatives and community development projects\\, particularly i\r\n n Africa and India\\, where his work has had a lasting impact. Born and rais\r\n ed in India\\, Rahul holds degrees from the Indian Institute of Technology\\,\r\n  the University of Texas\\, and the Wharton School.\\n\\n \\n\\nAnyone with an i\r\n nterest in energy is welcome to join! You can enjoy seminars in the followi\r\n ng ways:\\n\\nAttend live. The auditorium may change quarter by quarter\\, so \r\n check each seminar event to confirm the location. Explore the current quart\r\n er's schedule.Watch live in a browser livestream if available. Check each s\r\n eminar event for its unique livestream URL.Watch recordings of past seminar\r\n s Available on the Past Energy Seminars page and the Energy Seminars playli\r\n st of the Stanford Energy YouTube channel(For students) Take the seminar as\r\n  a 1-unit class (CEE 301/ENERGY 301/MS&E 494) \\n\\nIf you'd like to join the\r\n  Stanford Energy Seminar mailing list to hear about upcoming talks\\, sign u\r\n p here.\r\nDTEND:20260224T012000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 370\\, 370\r\nSEQUENCE:0\r\nSUMMARY:Stanford Energy Seminar | Energy Transition: A Boardroom Perspectiv\r\n e | Rahul Dhir\\, Distinguished Careers Institute\\, Stanford University\r\nUID:tag:localist.com\\,2008:EventInstance_51489822887529\r\nURL:https://events.stanford.edu/event/stanford-energy-seminar-rahul-dhir-dc\r\n i\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for an artist panel featuring participants from EXTRA/P\r\n HENOMENALITIES\\, on view at Stanford Art Gallery from January 22-March 13\\,\r\n  2026. Bringing together artists whose work explores the limits of experien\r\n ce\\, this program offers a special opportunity to hear directly from those \r\n behind the exhibition.\\n\\nEach participating artist will give a brief talk \r\n reflecting on their work in the exhibition\\, followed by a moderated conver\r\n sation led by Alexander Nemerov\\, Carl and Marilynn Thoma Provostial Profes\r\n sor in the Arts and Humanities at Stanford\\, and audience Q&A. \\n\\nParticip\r\n ating artists include Morehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & C\r\n had Mossholder\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernso\r\n n\\, Daniel Brickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank \r\n Floyd\\, Gabriel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Mig\r\n uel Novelo\\, Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kr\r\n isten Wong.\\n\\nThe exhibition is curated by Brett Amory\\, Karin Denson\\, an\r\n d Shane Denson.\\n\\nVISITOR INFORMATION: Oshman Hall is located within the M\r\n cMurtry Building on Stanford campus at 355 Roth Way. Visitor parking is ava\r\n ilable in designated areas and is free after 4pm on weekdays. Alternatively\r\n \\, take the Caltrain to Palo Alto Transit Center and hop on the free Stanfo\r\n rd Marguerite Shuttle. If you need a disability-related accommodation or wh\r\n eelchair access information\\, please contact Julianne White at jgwhite@stan\r\n ford.edu. This event is open to Stanford affiliates and the general public.\r\n  Admission is free.\\n\\nConnect with the Department of Art & Art History! Su\r\n bscribe to our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260224T030000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T010000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:Artist Panel: EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_52054982471300\r\nURL:https://events.stanford.edu/event/artist-panel-extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260224T023000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T013000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430653294\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Environmental Justice Panel 2026: \\n\\n🌱Spotlight on California🌱\r\n \\n\\nJoin us for an insightful panel on California’s role in promoting envir\r\n onmental justice. Dinner provided!🌎\\n\\nWhen: Monday\\, February 23rd\\, 6-7pm\r\n \\n\\nWhere: 300-305\\n\\nRSVP:\\n\\nhttps://docs.google.com/forms/d/e/1FAIpQLScw\r\n 1JpUQre2OjeMVttVqdB0odJvRJsoyDItLKRqx_md0p-RlA/viewform?usp=header\\n\\n \\n\\n\r\n Featuring:\\n\\nProfessor Maxine Burkett\\, Faculty Director of the Stanford C\r\n enter for Just Environmental Futures\\n\\nJulio Garcia\\, Executive Director a\r\n t Rise South City\\n\\nDr. Dena Montague\\, Environmental Justice Lecturer and\r\n  Executive Director of ÉnergieRich\\n\\nDr. Sibyl Diver\\, Earth Systems Lectu\r\n rer and Co-Director for the Stanford Environmental Justice Working Group\r\nDTEND:20260224T030000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T020000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 300\\, 305\r\nSEQUENCE:0\r\nSUMMARY:Environmental Justice Panel 2026: Spotlight on California\r\nUID:tag:localist.com\\,2008:EventInstance_52154850778353\r\nURL:https://events.stanford.edu/event/environmental-justice-panel-2026-spot\r\n light-on-california\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260224\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353964085\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260224\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring course planning opens in Axess for undergraduate and graduat\r\n e students.\r\nUID:tag:localist.com\\,2008:EventInstance_49464196328144\r\nURL:https://events.stanford.edu/event/spring-course-planning-opens-in-axess\r\n -for-undergraduate-and-graduate-students-8962\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Lucile Packard Children's Hospital Pediatric Patient Safety Lec\r\n ture\\nHuman Factors Engineering and Patient Safety: From Pit Stops to Parad\r\n igm Shifts\\n\\nSPEAKER\\nKenneth Catchpole\\, PhD\\nEndowed Chair\\, S.C. SmartS\r\n tate Endowed Chair in Clinical Practice and Human Factors\\, Medical Univers\r\n ity of South Carolina\\n\\nSESSION DESCRIPTION\\nUtilizing the science\\, stori\r\n es and experiences of more than 20 years of applying human factors engineer\r\n ing in healthcare\\, this session will introduce some basic concepts\\, discu\r\n ss how they have been applied\\, and how this way of thinking leads to fasci\r\n nating new perspectives on clinical work and patient safety. This will incl\r\n ude learning from motor-racing pit stops in congenital heart surgery\\; why \r\n checklists and teamwork training help but can also miss the mark\\; why diag\r\n nostic error might not be quite as it seems\\; why it's easy to forget how a\r\n mazing people really are\\; and how that could change how we think about cli\r\n nical performance.\\n\\nEDUCATION GOALS\\n\\nUnderstand foundational concepts i\r\n n human factors engineering and how they apply to patient safety.Explore ho\r\n w applying these techniques can lead to a huge range of safety and performa\r\n nce improvements in healthcare.Consider how this way of thinking can lead t\r\n o fundamental reappraisal of how we think about safety\\, expertise\\, and cl\r\n inical performance.ZOOM INFORMATION\\n\\n[Register for Webinar]\\n\\nSubscribe \r\n to receive weekly email announcements and Zoom webinar information for each\r\n  session.\\nSubscribe to mailing list\\n\\n\\nCME ACCREDITATION\\nThis session i\r\n s eligible for CME credit. To claim CME credit\\, text code to (844) 560-190\r\n 4 to confirm attendance. A new code will be provided at beginning of the se\r\n ssion.\r\nDTEND:20260224T170000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T160000Z\r\nGEO:37.437255;-122.171767\r\nLOCATION:Center for Academic Medicine \\, Grand Rounds Room \r\nSEQUENCE:0\r\nSUMMARY:Pediatric Grand Rounds (CME): Human Factors Engineering and Patient\r\n  Safety: From Pit Stops to Paradigm Shifts\r\nUID:tag:localist.com\\,2008:EventInstance_52144049175290\r\nURL:https://events.stanford.edu/event/pediatric-grand-rounds-cme-human-fact\r\n ors-engineering-and-patient-safety-from-pit-stops-to-paradigm-shifts\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:PhD Defense\r\nDESCRIPTION:Abstract: \\n\\nIn the field of volcanology\\, one significant hur\r\n dle to understanding volcanic systems is that we are limited to observation\r\n s made at the literal surface level during a blink of geologic time\\, in or\r\n der to interrogate processes that stretch deep into the earth and into the \r\n past. Despite relatively few opportunities to directly observe eruptions\\, \r\n we want to answer questions such as\\, \"How much magma is there? Where will \r\n magma reach the surface? When will the next eruption be?” To complement dir\r\n ect observations\\, volcanologists model volcanic processes using known phys\r\n ics\\, in order to make predictions about the architecture and behavior of r\r\n eal volcanoes. However\\, model-based predictions are limited by the assumpt\r\n ions used to construct them. My dissertation seeks to use physics-based mod\r\n els of magma on the move to better constrain real-world magma systems. \\n\\n\r\n  \\n\\nIn the first chapter\\, I model magma traveling through a conduit and e\r\n rupting as a lava fountain. I use lava fountain heights observed at Sierra \r\n Negra Volcano\\, Galapagos\\, to constrain H2O and CO2 content\\, which in tur\r\n n better constrains the total volume of magma within the shallow chamber at\r\n  Sierra Negra in concert with more conventional prediction methods\\, which \r\n assume gasless basalt in the chamber. In the second chapter\\, I challenge t\r\n he assumption that magma pressure within a dike (a magma-filled crack) has \r\n an insignificant effect on the direction in which the dike will propagate. \r\n I use a finite element model\\, which fully couples magma in a reservoir and\r\n  dike to a hydraulically-fracturing elastic host rock\\, to quantify the ext\r\n ent to which the dike influences its own path. In the third chapter\\, I stu\r\n dy how melt moves through a vertically extensive mush (crystal matrix with \r\n interstitial melt) to recharge shallow reservoirs with application to Axial\r\n  Seamount\\, an underwater volcano. I investigate the extent to which depth-\r\n variable permeability within the mush is capable of predicting observed int\r\n er-eruption uplift at Axial and compare with existing\\, mush-less interpret\r\n ations of the system. Taken together\\, my work uses physics-based models of\r\n  magma in motion to reinterpret existing predictions made by conventional m\r\n odels\\, through challenging conventional assumptions.\r\nDTEND:20260224T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T170000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Center\r\nSEQUENCE:0\r\nSUMMARY:Geophysics PhD Defense\\, Laura Blackstone: \"How magma moves: Physic\r\n s-based models with applications to lava fountains\\, dikes\\, and magma mush\r\n es\"\r\nUID:tag:localist.com\\,2008:EventInstance_52074320489512\r\nURL:https://events.stanford.edu/event/geophysics-phd-defense-laura-blacksto\r\n ne-how-magma-moves-physics-based-models-with-applications-to-lava-fountains\r\n -dikes-and-magma-mushes\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260224T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353487736\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260225T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382752935\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This student-run monthly series spotlights the latest research \r\n from Stanford\\, presented by PhD candidates and postdocs. Registration is r\r\n equired\\, and is free and open to the public.\\n\\nThis month's speakers:\\n\\n\r\n Huayue Ai\\, Ph.D. Candidate\\, Stanford University\\n\"Homogeneous 3D Porous C\r\n onductive Electrodes for High-Energy Battery Fast Charging\"\\n\\nTalk Abstrac\r\n t: Fast charging in high-energy-density lithium-ion batteries (LIBs) is hin\r\n dered by increased impedance and sluggish kinetics associated with thicker \r\n electrode coatings. In conventional batteries\\, the topmost active layer of\r\n  the electrodes often experiences the highest electrical resistance due to \r\n its distance from the current collector. This\\, along with variations in pl\r\n anar electrical conductivity\\, creates localized charge flux imbalances tha\r\n t promote electrode reaction heterogeneity and ultimately lithium plating. \r\n Thicker electrodes also extend ionic pathways\\, further limiting the rate p\r\n erformance. Here\\, we develop three-dimensional porous electrodes—integrati\r\n ng current collectors and active materials—with homogenous electrical condu\r\n ctivity and doubled ionic transfer efficiency of traditional electrodes. Th\r\n ese electrodes demonstrate thickness-independent electrical conductivity in\r\n  both in-plane and out-of-plane directions. At areal capacity of 3mAh/cm2\\,\r\n  pouch cells with the designed electrodes exhibit excellent performance and\r\n  stability\\, achieving 79.2%\\, 72.5% and 62.3% state-of-charge (SOC) at 5C\\\r\n , 7C and 10C\\, respectively. The straightforward fabrication process expand\r\n s potential route toward large-scale manufacturing.\\n\\nSpeaker's Bio: \\n\\nH\r\n uayue (Alice) Ai is a 5th-year Ph.D. candidate in Prof. Yi Cui’s group in M\r\n aterials Science & Engineering at Stanford University. Her research focuses\r\n  on improving the fast-charging performance of lithium-ion batteries throug\r\n h current collector and electrode engineering\\, as well as developing solid\r\n -state-electrolyte for lithium-metal batteries. She received her B.S. from \r\n Trinity College in Hartford\\, Connecticut in 2021\\, graduating with a doubl\r\n e major in Chemistry and Mathematics. During her undergraduate studies\\, sh\r\n e worked in Prof. Lindsey Hanson’s lab in the Chemistry department\\, focusi\r\n ng on designing and characterizing nanoparticle-based ptomechanical sensors\r\n .\r\nDTEND:20260224T190000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY: StorageX Tech Talk - February 2026\r\nUID:tag:localist.com\\,2008:EventInstance_52153360031283\r\nURL:https://events.stanford.edu/event/copy-of-storagex-tech-talk-2649\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:This event is co-sponsored by the Sohaib and Sara Abbasi Progra\r\n m in Islamic Studies at Stanford Global Studies\\n\\n \\n\\nAre references to r\r\n eligion in this time of climate crisis always cast in nostalgic or apocalyp\r\n tic terms? This talk turns instead to everyday Islamic practices in Southea\r\n st Asia\\, asking how Muslims\\, and non‑Muslims in Islamic Southeast Asian c\r\n ontexts\\, have understood\\, experienced\\, and narrated their own times of e\r\n cological crisis\\, resource extraction\\, and rapid developmental change. It\r\n  focuses on Islamic environmental sciences and on narratives about communit\r\n ies’ relationships with environments and more‑than‑human beings\\, relations\r\n hips marked by care and reverence as well as violence and extraction. I con\r\n sider how Islamic traditions in Southeast Asia have historically promoted b\r\n oth human‑centeredness and interspecies relatedness\\, and how these tension\r\n s have shaped environmental responses. In doing so\\, the paper asks how we \r\n might learn from Southeast Asian communities about environmental and multis\r\n pecies responsibility\\, engaging their ethical grammars and local knowledge\r\n \\, while recognizing that Muslim communities—also implicated in ongoing env\r\n ironmental destruction—are important producers of concepts and practices fo\r\n r living responsibly with a damaged planet.\\n\\n \\n\\n\\n\\nTeren Sevea joins t\r\n he Walter H. Shorenstein Asia-Pacific Research Center (APARC) as visiting s\r\n cholar and Lee Kong Chian NUS-Stanford Fellow on Southeast Asia for the win\r\n ter quarter of 2026. He currently serves as Prince Alwaleed bin Talal Assoc\r\n iate Professor of Islamic Studies at Harvard Divinity School.\\n\\nHe is a sc\r\n holar of Islam and Muslim societies in South and Southeast Asia\\, and recei\r\n ved his PhD in History from the University of California\\, Los Angeles. Bef\r\n ore joining HDS\\, he served as Assistant Professor of South Asia Studies at\r\n  the University of Pennsylvania. Sevea is the author of Miracles and Materi\r\n al Life: Rice\\, Ore\\, Traps and Guns in Islamic Malaya (Cambridge Universit\r\n y Press\\, 2020)\\, which received the 2022 Harry J.Benda Prize\\, awarded by \r\n the Association of Asian Studies. Sevea also co-edited Islamic Connections:\r\n  Muslim Societies in South and Southeast Asia (ISEAS\\, 2009). He is current\r\n ly completing his second book entitled Singapore Islam: The Prophet's Port \r\n and Sufism across the Oceans\\, and is working on his third monograph\\, prov\r\n isionally entitled Animal Saints and Sinners: Lessons on Islam and Multispe\r\n ciesism from the East.\\n\\nSevea is the author of book chapters and journal \r\n articles pertaining to Indian Ocean networks\\, Sufi textual traditions\\, Is\r\n lamic erotology\\, Islamic third worldism\\, and the socioeconomic significan\r\n ce of spirits\\, that have been published in journals such as Third World Qu\r\n arterly\\, Modern Asian Studies\\, The Indian Economic and Social History Rev\r\n iew and Journal of Sufi Studies. In addition to this\\, he is a coordinator \r\n of a multimedia project entitled “The Lighthouses of God: Mapping Sanctity \r\n Across the Indian Ocean\\,” which investigates the evolving landscapes of In\r\n dian Ocean Islam through photography\\, film\\, and GIS technology.\r\nDTEND:20260224T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, Philippines Conference Room\\, 3rd Floor\r\nSEQUENCE:0\r\nSUMMARY: Islamic Environmental Ethics and Multispecies Responsibility in So\r\n utheast Asia\r\nUID:tag:localist.com\\,2008:EventInstance_52075298860763\r\nURL:https://events.stanford.edu/event/islamic-environmental-ethics-and-mult\r\n ispecies-responsibility-in-southeast-asia-2797\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Eric Horvitz\\, MD\\, PhD\\, is Chief Scientific Officer at Micros\r\n oft where he leads initiatives at the intersection of science\\, technology\\\r\n , and society\\, with emphasis on artificial intelligence\\, biosciences\\, an\r\n d healthcare. His research contributions have advanced AI through innovatio\r\n ns in perception\\, reasoning\\, and decision-making under uncertainty.\\n\\nDr\r\n . Horvitz is known for his contributions to AI theory and practice\\, with a\r\n  focus on principles and applications of AI amidst the complexities of the \r\n open world. His direction-setting research efforts include harnessing proba\r\n bility and utility in machine learning and reasoning\\, developing models of\r\n  bounded rationality\\, constructing systems that perceive and act via inter\r\n preting multisensory streams of information\\, and pioneering principles and\r\n  mechanisms for supporting human-AI collaboration and complementarity. His \r\n efforts and collaborations have led to fielded systems in healthcare\\, tran\r\n sportation\\, ecommerce\\, operating systems\\, and aerospace.\r\nDTEND:20260224T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:22.770392;75.938693\r\nLOCATION:CEMEX Auditorium\\, CEMEX\r\nSEQUENCE:0\r\nSUMMARY:A Conversation with Eric Horvitz\\, Chief Scientific Officer at Micr\r\n osoft and Sarah Soule\\, Dean of Stanford GSB\r\nUID:tag:localist.com\\,2008:EventInstance_52058012873788\r\nURL:https://events.stanford.edu/event/a-conversation-with-eric-horvitz-chie\r\n f-scientific-officer-at-microsoft-and-sarah-soule-dean-of-stanford-gsb\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260224T212000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nLOCATION:Turing Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Atmosphere & Energy Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_52011065147729\r\nURL:https://events.stanford.edu/event/atmosphere-energy-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Tech Impact and Policy Center on February 24th from 12\r\n PM–1PM Pacific for a seminar with Tom Schnaubelt.\\n\\nStanford affiliates ar\r\n e invited to join us at 11:40 AM for lunch\\, prior to the seminar.  The Win\r\n ter Seminar Series continues through March\\; see our Winter Seminar Series \r\n page for speakers and topics. Sign up for our newsletter for announcements.\r\n  \\n\\nAbout the Seminar:\\n\\nWhat does it mean to become a citizen in an age \r\n of polarization\\, platforms\\, and declining trust in institutions? This 60-\r\n minute seminar explores how civic identity is formed\\, why American civic e\r\n ducation is struggling to keep pace with social and technological change\\, \r\n and what that means for democracy. Drawing on research and hands-on experie\r\n nce in civic education\\, the session examines how colleges\\, communities\\, \r\n and digital environments shape civic habits\\, beliefs\\, and participation—o\r\n ften in unintended ways. The seminar will describe a variety of innovative \r\n approaches to civic learning and asks how technology can move from fragment\r\n ing civic life to playing a role in revitalizing democratic knowledge\\, ski\r\n lls\\, and behaviors.\\n\\nAbout the Speaker:\\n\\nPrior to assuming the role of\r\n  Executive Director of the Center for Revitalizing American Institutions at\r\n  the Hoover Institution in 2023\\, Tom served as a Lecturer and Senior Advis\r\n or on Civic Education at the Deliberative Democracy Lab\\, within the Center\r\n  for Democracy\\, Development\\, and the Rule of Law at the Freeman Spogli In\r\n stitute for International Studies. Tom came to Stanford in 2009 and has ser\r\n ved as the Associate Vice Provost for Education\\, the Executive Director of\r\n  the Haas Center for Public Service\\, and a Resident Fellow in Branner Hall\r\n \\, where he and his wife oversaw the development and implementation of a li\r\n ving-learning community focused on public service and civic engagement. In \r\n 2015\\, Tom coordinated the launch of Cardinal Service\\, a university wide e\r\n ffort to elevate and expand public service as a distinctive feature of the \r\n Stanford experience\\, and he has launched and led several national initiati\r\n ves focused on democratic engagement and social change education.\\n\\nPrior \r\n to coming to Stanford in 2009\\, Tom served as the Dean for Community Engage\r\n ment and Civic Learning at the University of Wisconsin-Parkside and was the\r\n  founding Executive Director of Wisconsin Campus Compact. Tom began his car\r\n eer as the first service-learning coordinator at the University of Southern\r\n  Mississippi. During his eight years in Mississippi\\, Tom coordinated state\r\n wide academic-community partnerships\\, including several large AmeriCorps p\r\n rograms focused on educational equity and environmental sustainability\\, an\r\n d launched the Mississippi Center for Community and Civic Engagement.\\n\\nTo\r\n m’s personal vision is to connect people with themselves\\, each other\\, and\r\n  the earth in ways that contribute to the common good and build a more perf\r\n ect union. His work in higher education focuses on democratic engagement\\, \r\n and place-based and experiential learning that fosters civic identity and t\r\n he capacity to engage constructively across differences. He has extensive e\r\n xperience creating university-community partnerships and his experiences sp\r\n an geographic\\, disciplinary\\, and institutional boundaries. Tom received a\r\n  Ph.D. in Educational Leadership from the University of Mississippi\\, a Mas\r\n ter of Arts in Education from the University of Michigan\\, and Bachelor of \r\n Science in Physics from the University of Wisconsin-Stevens Point.\r\nDTEND:20260224T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, Studio S40 - bring you\r\n r Stanford ID card/mobile ID to enter the building\r\nSEQUENCE:0\r\nSUMMARY:Becoming a Citizen in the Age of Algorithms\r\nUID:tag:localist.com\\,2008:EventInstance_51933740714586\r\nURL:https://events.stanford.edu/event/becoming-a-citizen-in-the-age-of-algo\r\n rithms\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260225T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561114975\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Abstract: Right after it cooled off in the Hadean\\, Earth is th\r\n ought to have been mostly an ocean planet. The first substantial record of \r\n emerging land dates to the early Archean\\, with the recognition of sediment\r\n ary rocks laid down in subaerial environments. Deciphering that record is p\r\n aramount to our understanding of how plate tectonics and life came to be. H\r\n owever\\, it is minuscule and fragmentary: only 3% of Earth’s sedimentary ar\r\n chive formed in the first 90% of Earth’s history. So how do we even begin t\r\n o read that archive? In this presentation\\, I will illustrate how understan\r\n ding the mechanics of sedimentary processes through modern and planetary an\r\n alogs can help us fill some fundamental knowledge gaps. First\\, I will demo\r\n nstrate that meandering rivers—which have long been hypothesized to have fi\r\n rst evolved with the rise of land plants on Earth—have likely gone unnotice\r\n d in the pre-vegetation archive because their deposits resemble those of sa\r\n ndy braided rivers. Second\\, I will apply a lesson learned from exploring o\r\n ur planet’s neighbor—Mars—to windblown bedform mechanics\\, and leverage thi\r\n s new knowledge to estimate the density of Earth’s atmosphere 2.64 Gy ago f\r\n rom observations of aeolian strata of the Vryburg Formation (Schmidtsdrift \r\n Subgroup) in South Africa. These two vignettes highlight how much sedimenta\r\n ry processes have evolved throughout Earth’s history\\, but they have always\r\n  followed the laws of physics. Together\\, modern environments and other pla\r\n nets can be used as analog experiments to better grasp the mechanics of sed\r\n imentary processes and decipher the highly fragmentary archive of Earth’s e\r\n arly environments.\\n\\nBio: Dr. Lapôtre is an Assistant Professor in Earth &\r\n  Planetary Sciences at Stanford. His research focuses on the mechanics of s\r\n edimentary and geomorphic processes that shape planetary surfaces\\, and aim\r\n s to unravel what landforms and rocks tell us about past hydrology\\, climat\r\n e\\, and habitability. He earned a BS in Geophysics\\, MS in Environmental Sc\r\n ience & Engineering\\, and MS in Geophysical Engineering from the U. Strasbo\r\n urg\\, France\\, and a MS in Planetary Science and PhD in Geology from Caltec\r\n h. During his PhD\\, he was part of the NASA Curiosity rover team. Before jo\r\n ining Stanford\\, he was a John Harvard Distinguished Science Fellow at Harv\r\n ard. He was the 2021 recipient of the American Geophysical Union Luna B. Le\r\n opold Early Career Award.\r\nDTEND:20260224T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Planetary Science Seminar - Professor Mathieu Lapotre \"Recons\r\n tructing Earth’s early subaerial environments via process-informed comparat\r\n ive sedimentology\".\r\nUID:tag:localist.com\\,2008:EventInstance_52135067011693\r\nURL:https://events.stanford.edu/event/earth-planetary-science-seminar-profe\r\n ssor-mathieu-lapotre-reconstructing-earths-early-subaerial-environments-via\r\n -process-informed-comparative-sedimentology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Tanbūr and Iran’s Sonic Heritage: The Yarsan Ritual Tradition\\,\r\n  Myth\\, and Spirituality\\n\\nFebruary 23\\, 24\\, 25\\, and 26\\n\\nAcclaimed Ira\r\n nian musician Ali Akbar Moradi will teach four music workshops in Persian\\,\r\n  sponsored by the Iranian Studies Program and the Department of Music. Plea\r\n se RSVP to attend. Space is limited\\, priority is given to Stanford affilia\r\n tes. An instrument is not required to attend and learn but you may bring yo\r\n ur tanbūr if you have one. Guests will receive a confirmation email if they\r\n  are added to the workshop or have been added to the waitlist. Please only \r\n RSVP if you are sure you can attend. \\n\\nAli Akbar Moradi began playing the\r\n  tanbūr at the age of seven and learned not only the music but the Kurdish \r\n maqam repertoire. He has won awards\\, recorded several albums\\, and perform\r\n ed in Europe\\, the United States\\, and Canada with singers like Shahram Naz\r\n eri and at the Royal Festival Hall in London. In addition to teaching the t\r\n anbūr in Tehran and his hometown of Kermanshah\\, Ali Akbar is a dedicated s\r\n cholar of the tanbūr and continues to develop the legacy of the instrument \r\n and the regional Kurdish music.\\n\\nWorkshops coordinated by Ashkan Nazari\\,\r\n  a Stanford PhD student in ethnomusicology. \\n\\nSession One: Monday\\, Febru\r\n ary 23\\, 2:00-4:00\\n\\nA general introduction to the tanbūr\\, including:\\n\\n\r\n Its historical development\\, the etymology and meaning of the term tanbūr.M\r\n ajor categories of tanbūr maqāms\\; the tanbūr’s presence in Iran and in bro\r\n ader global contexts.The instrument’s range and the number of frets\\, the p\r\n rincipal structural components of the instrument.Plectra (mezrāb) and core \r\n performance techniques. The session concludes with instruction in one maqām\r\n .Session Two: Tuesday\\, February 24\\, 12:00-2:00\\n\\nThe tanbūr in relation \r\n to Yārsān religious tradition including:\\n\\nRitual narratives and accounts \r\n associated with specific tanbūr maqāmsRhythmic organization and ancient cyc\r\n lical patterns (adwār) within the tanbūr maqām repertoire.The session concl\r\n udes with instruction in one maqām.Session Three: Wednesday\\, February 25\\,\r\n  2:00-4:00\\n\\nThe tanbūr and the Shāhnāmeh\\, with attention to maqāms assoc\r\n iated with the epic tradition.The session concludes with instruction in one\r\n  maqām.Session Four: Thursday\\, February 26\\, 12:00-2:00\\n\\nA brief overvie\r\n w of Iran’s classical radīf tradition\\, with comparative attention to affin\r\n ities between selected tanbūr maqāms and particular gūsheh-s in the radīf r\r\n epertoire.Part of the Stanford Festival of Iranian Arts\\n\\nStanford is comm\r\n itted to ensuring its facilities\\, programs and services are accessible to \r\n everyone. To request access information and/or accommodations for this even\r\n t\\, please complete https://tinyurl.com/AccessStanford at the latest one we\r\n ek before the event.\r\nDTEND:20260224T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Iranian Music Workshops with Ali Akbar Moradi\r\nUID:tag:localist.com\\,2008:EventInstance_51995410183518\r\nURL:https://events.stanford.edu/event/iranian-music-workshops-with-ali-akba\r\n r-moradi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:For generations\\, water and sanitation systems have quietly sus\r\n tained daily life\\, yet aging infrastructure\\, rising costs\\, and climate p\r\n ressures now expose deep inequities in who bears the burden of system failu\r\n res. These burdens fall disproportionately on lower-income and communities \r\n of color\\, who face higher costs\\, poorer quality\\, and entrenched distrust\r\n  shaped by histories of disinvestment. In this talk\\, Dr. Osman examines ho\r\n w race\\, power\\, and policy intersect with technical systems to produce une\r\n qual access to a basic human right. Drawing on community-engaged research a\r\n nd case studies across the U.S.\\, he outlines pathways for centering justic\r\n e in decisions that shape water and sanitation futures.\\n\\n\\nSponsored by t\r\n he Research Institute of CCSRE.\r\nDTEND:20260224T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, CCSRE Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Khalid Osman\\, “Water\\, Race\\, and Infrastructure: Unequal Access t\r\n o a Basic Human Right\\,” in conversation with Sibyl Diver\r\nUID:tag:localist.com\\,2008:EventInstance_51436922964681\r\nURL:https://events.stanford.edu/event/khalid-osman-water-race-and-infrastru\r\n cture-unequal-access-to-a-basic-human-right-in-conversation-with-sibyl-dive\r\n r\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Co-Sponsored by the Stanford CIO Council Neurodiversity in IT P\r\n rogram\\n\\nNeurodiversity is the range of common differences in thinking and\r\n  behavior which we now understand to be normal variations in humans. This i\r\n ncludes conditions such as autism\\, dyslexia\\, ADHD\\, and others. Neurodive\r\n rse variations have played a central role in the development of human socie\r\n ty\\, yet neurodiverse people have been historically misunderstood and margi\r\n nalized as individuals.\\n\\nJoin us for this free 90-minute online lunch-and\r\n -learn educational webinar to gain a better understanding of neurodiversity\r\n  and its role in society and within the workplace. In this session\\, you wi\r\n ll gain a basic awareness of neurodiversity\\, an understanding of autistic \r\n traits with workplace relevance\\, and tips for enabling neurodiverse collea\r\n gues to be effective in the workplace.\\n\\nWe will discuss how leading compa\r\n nies foster neurodiversity to their advantage\\, how increasing understandin\r\n g and acceptance of neuro differences is allowing more people to enter the \r\n workplace\\, and what concrete steps each of us can take to better understan\r\n d and support neurodiverse colleagues.\\n\\nThis class will not be recorded. \r\n Attendance requirement for incentive points - at least 80% of the live sess\r\n ion.  Request disability accommodations and access info.\\n\\nInstructors: Ra\r\n nga Jayaraman is the director of Neurodiversity Pathways\\, a group of profe\r\n ssionals bound by the common passion to make a difference in the employment\r\n  outcomes for neurodiverse adults.\\n\\nJohn Marble is the founder of Pivot N\r\n eurodiversity and is a writer and speaker on innovation\\, autism\\, and neur\r\n odiversity. Whether he’s working in warehouses or inside the White House\\, \r\n he explores how we can improve systems in order to create better products\\,\r\n  policies\\, and outcomes.\\n\\nKhushboo Chabria is a program manager at Neuro\r\n diversity Pathways. She is a neurodiversity specialist and aims to make a m\r\n eaningful impact in the world through education\\, empowerment\\, authentic e\r\n ngagement\\, and unbridled compassion.\\n\\nThe three instructors are coauthor\r\n s of the books Neurodiversity for Dummies and Autism for Dummies.\\n\\nClass \r\n details are subject to change.\r\nDTEND:20260224T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Neurodiversity in the Workplace\r\nUID:tag:localist.com\\,2008:EventInstance_51388530921191\r\nURL:https://events.stanford.edu/event/neurodiversity-in-the-workplace-3675\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Professor Darlène Dubuisson (Anthropology\\, UC Berkeley) will g\r\n ive a talk on her book\\, Reclaiming Haiti's Futures: Returned Intellectuals\r\n \\, Placemaking\\, and Radical Imagination. Haiti was once a beacon of Black \r\n liberatory futures\\, but now it is often depicted as a place with no future\r\n  where emigration is the only way out for most of its population.\\n\\nDubuis\r\n son's book tells a different story. It is a story about two generations of \r\n Haitian scholars who returned home after particular crises to partake in so\r\n cial change. The first generation\\, called jenerasyon 86\\, were intellectua\r\n ls who fled Haiti during the Duvalier dictatorship (1957-1986). They return\r\n ed after the regime fell to participate in the democratic transition throug\r\n h their political leadership and activism. The younger generation\\, dubbed \r\n the jenn doktè\\, returned after the 2010 earthquake to partake in national \r\n reconstruction through public higher education reform. An ethnography of th\r\n e future\\, the book explores how these returned scholars resisted coloniali\r\n ty's fractures and displacements by working toward and creating inhabitabil\r\n ity or future-oriented places of belonging through improvisation\\, rasanbla\r\n j (assembly)\\, and radical imagination.\\n\\nThis event is part of the \"Haiti\r\n : Past\\, Present\\, and Futures\" event series organized by Professor Rachel \r\n Jean-Baptiste (History and African & African American Studies).\r\nDTEND:20260224T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 200\\, History Corner\\, Room 307\r\nSEQUENCE:0\r\nSUMMARY:Reclaiming Haiti's Futures: Returned Intellectuals\\, Placemaking\\, \r\n and Radical Imagination\r\nUID:tag:localist.com\\,2008:EventInstance_52081799290308\r\nURL:https://events.stanford.edu/event/reclaiming-haitis-futures-returned-in\r\n tellectuals-placemaking-and-radical-imagination\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: Nuclear weapons have long been considered as o\r\n ne of international society’s most preeminent status symbols. That is\\, nuc\r\n lear weapons have long been viewed as signaling a state’s military strength\r\n \\, technological prowess\\, and their association with the highest status ac\r\n tors in the world. This idea of “nuclear prestige” has shaped how academics\r\n  and policymakers think about the causes of proliferation\\, nonproliferatio\r\n n strategies\\, and the utility of nuclear modernization. In this article\\, \r\n I argue that nuclear weapons have never been collectively recognized by the\r\n  international community as a status symbol. Drawing on the sociology of fa\r\n shion\\, I offer a theory of status symbol emergence and collapse. I demonst\r\n rate that nuclear weapons failed to emerge as a status symbol because of gl\r\n obal opposition and divided superpower messaging over the meaning of the bo\r\n mb. I test my argument with a case study of contestation over the meaning o\r\n f the bomb between 1945 and 1968 and pair it with a sentiment text analysis\r\n  of how the international community has spoken about the bomb in United Nat\r\n ions General Debate speeches (1946 – 2020). This article has implications f\r\n or how we think about the effectiveness of the nonproliferation regime\\, ra\r\n cialized dynamics in international politics\\, and the nature of status symb\r\n ols.\\n\\nAbout the speaker: Kevin Bustamante is the Macarthur Hennessey Post\r\n doctoral Fellow at Stanford University's Center for International Security \r\n and Cooperation. He was previously a postdoctoral fellow at the University \r\n of Notre Dame where he earned his PhD in August 2024. His research agenda c\r\n enters around questions of international security and racism\\, with a focus\r\n  on nuclear politics. His work has been published in Security Studies and h\r\n is book project examines the transformation of dominant racial ideas over t\r\n he last two centuries.\r\nDTEND:20260224T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:The Myth of Nuclear Prestige\r\nUID:tag:localist.com\\,2008:EventInstance_51588941519198\r\nURL:https://events.stanford.edu/event/the-myth-of-nuclear-prestige\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please join us for a special Research as Praxis Speaker Series \r\n event on Tuesday\\, February 24 from 12:30–2:00pm. We will gather in the Haa\r\n s Center DK Room at noon for a talk by Gina Hernandez (lunch will be served\r\n )\\, followed by a short walk to Casa Zapata for a guided tour of the murals\r\n !\\n\\nPlease RSVP to attend. This event is open to students\\, staff and facu\r\n lty.\\n\\nIn this talk and tour\\, Gina Hernandez\\, '89\\, MLA '23\\, reflects o\r\n n her research on an extensive collection of murals and large-scale wall pa\r\n intings produced between 1975 and 1989 at Casa Zapata—an undergraduate\\, et\r\n hnic-themed residence at Stanford University. These works\\, created in rapi\r\n d succession over a 15-year period coincided with the height of the Chicano\r\n  Movement\\, a cultural and political mobilization determined to advance the\r\n  equality\\, civil rights\\, and education for Mexican and Latino populations\r\n  in the United States. Central to the movement was an identity formation th\r\n at forwarded the indigenous origins of Mexico and the Southwest United Stat\r\n es. The concept of survivance\\, introduced by scholar Gerald Vizenor\\, refe\r\n rs to the stance\\, posture\\, and means through which agency in Native peopl\r\n es’ stories is advanced. Visual survivance identifies elements of Chicano p\r\n olitical activism\\, collective creation\\, and self-determination as closely\r\n  aligned with these notions of survivance.\\n\\n--\\n\\nBio \\n\\nGina Hernandez \r\n has served in a variety of roles at Stanford University––as founding Execut\r\n ive Director of the Institute for Diversity in the Arts\\, Director of Arts \r\n in Undergraduate Education\\, and Director of Community Engaged Learning fro\r\n m 2001-2025. In such roles she contributed to the launch of a variety of pr\r\n ograms in the Arts including the Stanford Arts Intensive\\; Creative Express\r\n ion Undergraduate Requirement and Cartographies of Race: Mapping Race & Spa\r\n ce in California. Hernandez is an alumna of Stanford with both bachelor's a\r\n nd master's degrees and also holds a master’s in fine arts from U.C.L.A’s S\r\n chool of Theater\\, Film & Television. Hernandez currently serves on the boa\r\n rds of Craft in America and the Stanford Historical Society\r\nDTEND:20260224T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T203000Z\r\nGEO:37.422506;-122.167404\r\nLOCATION:Haas Center for Public Service\\, DK Room\r\nSEQUENCE:0\r\nSUMMARY:Research as Praxis Speaker Series: Visual Survivance: Chicano Mural\r\n s at Casa Zapata\\, Stanford University (1975-1989)\r\nUID:tag:localist.com\\,2008:EventInstance_52153333100528\r\nURL:https://events.stanford.edu/event/research-as-praxis-visual-survivance\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Date and Time: 1:00PM–3:00PM\\, Tuesday\\, February 24\\, 2026\\n\\n\r\n Location: Teaching Corner\\, Branner Earth Sciences Library\\n\\nLead Instruct\r\n or: Dr. Alma Parada (Head Librarian\\, Branner Earth Sciences Library)\\n\\nTh\r\n is workshop is an introduction to working with data visualization in R for \r\n those who have moderate programming experience in R. If you know how to wor\r\n k with datasets (variables\\, matrices\\, dataframes) and functions in R\\, bu\r\n t you have never created figures beyond maybe a few base R visualizations (\r\n using the plot\\, hist\\, barplot functions)\\, then this class is a good fit \r\n for you! By the end of this workshop\\, you will have learned the syntax of \r\n ggplot2\\, how to modify and customize graph aesthetics\\, how to generate co\r\n mmon plots (e.g.\\, scatter \\, and how to save your figures to your computer\r\n . Time permitting\\, we will explore a few extra features such as faceting\\,\r\n  custom colors\\, and themes!\\n\\nPlease ensure R and RStudio are installed o\r\n n your computer before the workshop. You can download both here: https://po\r\n sit.co/download/rstudio-desktop/ \\n\\nRegistration is exclusively open to cu\r\n rrent Stanford Affiliates and will be offered on a first-come\\, first-serve\r\n d basis. Given the limited space\\, a waitlist will be available once all sp\r\n ots are filled.\\n\\nPlease bring your Stanford ID to enter the library.\r\nDTEND:20260224T230000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T210000Z\r\nGEO:37.426413;-122.172471\r\nLOCATION: Branner Earth Sciences Library\\, Teaching Corner\r\nSEQUENCE:0\r\nSUMMARY:Data Visualization in R\r\nUID:tag:localist.com\\,2008:EventInstance_51773387651946\r\nURL:https://events.stanford.edu/event/data-visualization-in-r-4829\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260224T230000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491606417\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Meeting\r\nDESCRIPTION:This month we are joined by Ayako Kawano\\, a PhD candidate in t\r\n he Emmett Interdisciplinary Program in Environment and Resources at Stanfor\r\n d. Ayako’s research examines the impact of air pollution on population heal\r\n th and climate change in low- and middle-income countries using remote sens\r\n ing data and machine learning methods. Ayako recently won the Stanford Univ\r\n ersity Libraries Data Sharing Prize for her work publishing a long-term dat\r\n aset of fine particulate matter concentrations in India\\, which has been us\r\n ed to inform public health programs and policy as well as used in further r\r\n esearch projects.\\n\\nAbout the Bay Area Open Science Group\\nThe Bay Area Op\r\n en Science Group is a growing community for Bay Area academics and research\r\n ers interested in incorporating open science into their research\\, teaching\r\n \\, and learning. Targeting students\\, faculty\\, and staff at UCSF\\, Berkele\r\n y\\, and Stanford\\, the goal of the community is to increase awareness of an\r\n d engagement with all things open science\\, including open access articles\\\r\n , open research data\\, open source software\\, and open educational resource\r\n s. Through this work the group hopes to connect researchers with tools they\r\n  can use to make the products and process of science more equitable and rep\r\n roducible.\r\nDTEND:20260224T230000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Developing open source air quality datasets for public health polic\r\n y action (Bay Area Open Science Group Meeting)\r\nUID:tag:localist.com\\,2008:EventInstance_52004809324414\r\nURL:https://events.stanford.edu/event/air-quality-datasets\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:What shape does antisemitism take in China and the Chinese dias\r\n pora? What is it like to teach Jewish Studies\\, Yiddish language\\, and anti\r\n semitism at a Chinese University? Join Meng Yang\\, Assistant Professor at P\r\n eking University in conversation with Stanford Professor of Anthropology\\, \r\n Matthew Kohrman\\, to explore these questions.\\n\\nThis event is co-sponsored\r\n  with the Center for East Asian Studies\\, the Center for Comparative Studie\r\n s in Race and Ethnicity\\, and the Department of Anthropology.\r\nDTEND:20260225T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T230000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Antisemitism in China and the Chinese Diaspora\r\nUID:tag:localist.com\\,2008:EventInstance_51959912030264\r\nURL:https://events.stanford.edu/event/antisemitism-in-china-and-the-chinese\r\n -diaspora\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Bruce Cain\\, the Charles Louis Ducommun Professor in the School\r\n  of Humanities and Sciences and professor of political science at Stanford\\\r\n , and Lee Drutman\\, a senior fellow in the Political Reform program at New \r\n America\\, discuss whether the United States Congress should pass legislatio\r\n n requiring proportional (as distinguished from winner-take-all) elections \r\n to the U.S. House of Representatives. \\n\\nDeep disagreement pervades our de\r\n mocracy\\, from arguments over immigration\\, gun control\\, abortion\\, and th\r\n e Middle East crisis\\, to the function of elite higher education and the va\r\n lue of free speech itself. Loud voices drown out discussion. Open-mindednes\r\n s and humility seem in short supply among politicians and citizens alike. Y\r\n et constructive disagreement is an essential feature of a democratic societ\r\n y. This class explores and models respectful civic disagreement. Each week \r\n features scholars who disagree — sometimes quite strongly — about major pol\r\n icy issues. Each class will be focused on a different topic and have guest \r\n speakers. Students will have the opportunity to probe those disagreements\\,\r\n  to understand why they persist even in the light of shared evidence\\, and \r\n to improve their own understanding of the facts and values that underlie th\r\n em.\\n\\nThis course is offered in the spirit of the observation by Hanna Hol\r\n born Gray\\, former president of the University of Chicago\\, that “education\r\n  should not be intended to make people comfortable\\, it is meant to make th\r\n em think. Universities should be expected to provide the conditions within \r\n which hard thought\\, and therefore strong disagreement\\, independent judgme\r\n nt\\, and the questioning of stubborn assumptions\\, can flourish in an envir\r\n onment of the greatest freedom.”\\n\\nThe speakers in this course are the gue\r\n sts of the faculty and students alike and should be treated as such. They a\r\n re aware that their views will be subject to criticism in a manner consiste\r\n nt with our commitment to respectful critical discourse. We will provide as\r\n  much room for students’ questions and comments as is possible for a class \r\n of several hundred. For anyone who feels motivated to engage in a protest a\r\n gainst particular speakers\\, there are spaces outside the classroom for doi\r\n ng so.\\n\\nWhen/Where?: Tuesdays 3:00-4:50PM in Cemex Auditorium\\n\\nWho?: Th\r\n is class will be open to students\\, faculty and staff to attend and will al\r\n so be recorded.\\n\\n1/6 Administrative State: https://events.stanford.edu/ev\r\n ent/the-administrative-state-with-brian-fletcher-and-saikrishna-prakash\\n\\n\r\n 1/13 Israel-Palestine: https://events.stanford.edu/event/democracy-and-disa\r\n greement-israel-palestine-the-future-of-palestine\\n\\n1/20 COVID Policies in\r\n  Retrospect: https://events.stanford.edu/event/democracy-and-disagreement-c\r\n ovid-policies-in-retrospect-with-sara-cody-and-stephen-macedo\\n\\n1/27 Gende\r\n r-Affirming Care: https://events.stanford.edu/event/democracy-and-disagreem\r\n ent-gender-affirming-care-with-alex-byrne-and-amy-tishelman\\n\\n2/3 Fetal Pe\r\n rsonhood: https://events.stanford.edu/event/democracy-and-disagreement-feta\r\n l-personhood-with-rachel-rebouche-and-chris-tollefsen\\n\\n2/10 Internet Regu\r\n lation: https://events.stanford.edu/event/democracy-and-disagreement-intern\r\n et-regulation-the-take-it-down-act-with-eric-goldman-and-jim-steyer\\n\\n2/17\r\n  Restrictions on College Protests: https://events.stanford.edu/event/democr\r\n acy-and-disagreement-restrictions-on-college-protests-with-richard-shweder-\r\n and-shirin-sinnar\\n\\n3/3 AI and Jobs: https://events.stanford.edu/event/dem\r\n ocracy-and-disagreement-ai-and-jobs-with-bharat-chander-and-rob-reich\\n\\n3/\r\n 10 Ending the Russia-Ukraine War: https://events.stanford.edu/event/democra\r\n cy-and-disagreement-ending-the-russiaukraine-war-with-samuel-charap-and-gab\r\n rielius-landsbergis\r\nDTEND:20260225T005000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T230000Z\r\nGEO:37.428584;-122.162763\r\nLOCATION:GSB Knight - Arbuckle / Cemex\r\nSEQUENCE:0\r\nSUMMARY:Democracy and Disagreement: Proportional Representation with Bruce \r\n Cain and Lee Drutman\r\nUID:tag:localist.com\\,2008:EventInstance_51569314202730\r\nURL:https://events.stanford.edu/event/democracy-and-disagreement-proportion\r\n al-representation-with-bruce-cain-and-lee-drutman\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This group is designed to support students who wish to have a s\r\n afe healing space through utilization of art. Sessions will include hand bu\r\n ilding clay\\, doodling\\, watercolor painting\\, Turkish lump making\\, Chines\r\n e calligraphy\\, rock painting\\, washi tape art\\, terrarium making\\, origami\r\n  and matcha tea. \\n\\nPre-screening is required. Mari or Marisa will reach o\r\n ut to schedule a confidential pre-screening phone or zoom call. \\n\\nWHEN: E\r\n very Tuesday from 3:00 PM - 4:30 PM in Fall Quarter for 7-8 sessions (start\r\n ing on Tuesday in the beginning of Feb\\, 2026) \\n\\nWHERE: In person @ Room \r\n 306 in Kingscote Gardens (419 Lagunita Drive\\, 3rd floor)\\n\\nWHO: Stanford \r\n undergrad and grad students Facilitators: Mari Evers\\, LCSW & Marisa Pereir\r\n a\\, LCSW from Stanford Confidential Support Team\r\nDTEND:20260225T003000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden \r\nSEQUENCE:0\r\nSUMMARY:Healing with Art group \r\nUID:tag:localist.com\\,2008:EventInstance_51827321267562\r\nURL:https://events.stanford.edu/event/healing-with-art-group-6772\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Abstract: The discovery of quantum materials\\, from unconventio\r\n nal superconductors to topological and correlated systems\\, has traditional\r\n ly relied on a slow and fragmented loop between theory\\, computation\\, and \r\n experiment. Serendipity and brute force trial-and-error have played an impo\r\n rtant role in many important discoveries. In this talk\\, I will describe ho\r\n w Periodic Labs is rethinking this loop by integrating experiments\\, large \r\n language models (LLMs)\\, and physical theory into a unified discovery engin\r\n e. Our approach aims to accelerate experimental iteration by automating cha\r\n racterization and analysis. I will discuss how LLMs can be used as reasonin\r\n g interfaces over physical constraints\\, experimental data\\, and scientific\r\n  literature. \\n\\nEkin Dogus Cubuk is Co-Founder of Periodic Labs. Previousl\r\n y\\, he was a researcher at Google DeepMind where he works on deep learning \r\n and its applications to solid state physics and materials science. He recei\r\n ved his Ph.D. from Harvard University where he studied the physics of disor\r\n dered solids and battery materials using density functional theory and mach\r\n ine learning. After a brief postdoc at the Materials Science Department of \r\n Stanford University\\, he joined Google Brain in 2017. Since then\\, he has b\r\n een studying the scaling and out-of-domain generalization properties of lar\r\n ge neural networks\\, and their applications to materials discovery for appl\r\n ications including clean energy and information processing.\r\nDTEND:20260225T003000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260224T233000Z\r\nGEO:37.428953;-122.172839\r\nLOCATION:Hewlett Teaching Center\\, 201\r\nSEQUENCE:0\r\nSUMMARY:Applied Physics/Physics Colloquium: Ekin Dogus Cubuk- Combining Exp\r\n eriments\\, Large Language Models\\, and Theory to Discover Quantum Materials\r\nUID:tag:localist.com\\,2008:EventInstance_52125981841499\r\nURL:https://events.stanford.edu/event/applied-physicsphysics-colloquium-eki\r\n n-dogus-cubuk-combining-experiments-large-language-models-and-theory-to-dis\r\n cover-quantum-materials\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260225T001500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T000000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52144080569666\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Counseling & Psychological Services is happy to offer Rooted! T\r\n his is a support group for Black-identified Stanford graduate students that\r\n  is designed to be a confidential space for students to speak their minds\\,\r\n  build community\\, rest\\, connect with themselves\\, and learn coping skills\r\n  for managing graduate life at Stanford.\\n\\nFacilitated by Cierra Whatley\\,\r\n  PhD & Katie Ohene-Gambill\\, PsyDThis group meets in-person on Tuesdays fro\r\n m 4-5pm on 1/27\\; 2/3\\; 2/10\\; 2/17\\; 2/24\\; 3/3\\; 3/10All enrolled student\r\n s are eligible to participate in CAPS groups and workshops. A pre-group mee\r\n ting is required prior to participation in this group. Please contact CAPS \r\n at (650) 723-3785 to schedule a pre-group meeting with the facilitators.\r\nDTEND:20260225T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T000000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Rooted! Black Graduate Student Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51579799615519\r\nURL:https://events.stanford.edu/event/copy-of-rooted-black-graduate-student\r\n -support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:This lecture-recital by Dr. Maryam Farshadfar\\, features piano \r\n works from Azerbaijan\\, Russia\\, Armenia\\, Georgia\\, and Iran. The program \r\n explores how traditional melodies and cultural heritage shape classical pia\r\n no music across the region through both lecture and solo piano performance \r\n consisting of:\\n\\nDüşüncə — Vaqif Mustafazadeh\\nÉtude-Tableau\\, Op. 39\\, No\r\n . 5 — Sergei Rachmaninoff\\nNocturne — Arno Babajanian\\nWhen Almonds Blossom\r\n ed — Giya Kancheli\\nRhapsody in Isfahan — Javad Maroufi\\, arr. Maryam Farsh\r\n adfar\\n\\nPlease RSVP here.\\n\\nMaryam Farshadfar is a pianist and ethnomusic\r\n ologist whose musical journey began at the age of six. She holds a PhD in E\r\n thnomusicology from the University of Montreal\\, where her award-winning di\r\n ssertation on the history of the piano in Iran was recognized as an origina\r\n l contribution to the field.\\n\\nShe has performed internationally as a solo\r\n ist and chamber musician at venues such as Niavaran Hall in Tehran\\, the Ko\r\n nzerthaus Freiburg in Germany\\, and Carnegie Hall. Dr. Farshadfar is curren\r\n tly a full-time music faculty member at San José–Evergreen Valley College\\,\r\n  where she established the music associate degree program and founded—and c\r\n ontinues to direct—the Evergreen Valley College Ensemble. She resides in th\r\n e San Francisco Bay Area.\r\nDTEND:20260225T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T003000Z\r\nGEO:37.426027;-122.16346\r\nLOCATION:Toyon Hall\r\nSEQUENCE:0\r\nSUMMARY:A Piano Journey Along the Caucasus\r\nUID:tag:localist.com\\,2008:EventInstance_51959688252266\r\nURL:https://events.stanford.edu/event/a-piano-journey-along-the-caucasus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Peter W. Axelson\\, MSME\\, ATP\\, RET\\nBeneficial Designs\\, Inc.\\\r\n nDirector of Research & Development\\n\\nAbstract: Peter will talk about the \r\n difference between Universal\\, Adaptable\\, and Adaptive design. Peter was t\r\n he first undergraduate using a wheelchair for mobility to live on the Stanf\r\n ord campus in 1976 when accessibility issues were just beginning to be addr\r\n essed. Those experiences and the desire to participate in the same physical\r\n  activities as every other college student who had professional and recreat\r\n ional interests shaped his career as a designer. Peter will share how his i\r\n nterests spawned the creation of Beneficial Designs\\, Inc to support the de\r\n velopment of personal\\, activity specific and environmental technologies fo\r\n r people of all abilities. His experience in obtaining Small Business Innov\r\n ation Research (SBIR) Grants to develop and functionally assess products\\, \r\n services\\, and the designs of outdoor environments\\, has provided many oppo\r\n rtunities for he and his staff to change the way people with impairments of\r\n  all kinds are able to participate in all aspects of life activity. His com\r\n pany works toward universal access through research\\, design\\, and educatio\r\n n to enable persons of all abilities to participate in the physical\\, intel\r\n lectual\\, and spiritual aspects of life.\\n\\nBiosketch: Peter Axelson is a r\r\n ehabilitation engineer who sustained a spinal cord injury in a 1975 climbin\r\n g accident while in the Air Force Academy. He continued his education at St\r\n anford University\\, where he began applying engineering and design principl\r\n es to overcome daily living hurdles faced by people with disabilities. In 1\r\n 981 he founded Beneficial Designs\\, Inc. an engineering design firm dedicat\r\n ed to designing\\, developing\\, and testing assistive technologies. His acco\r\n mplishments include developing the first chairlift-compatible mono-ski with\r\n  a shock absorber\\, working to establish wheelchair testing standards\\, imp\r\n roving seating systems for wheelchairs\\, and creating a system to assess tr\r\n ails that will improve access to outdoor trails for people of all abilities\r\n .\\n\\nPeter is the founder and the Director of Research and Development of B\r\n eneficial Designs and spends much of his time traveling throughout the worl\r\n d attending meetings and presenting his work. He's also a pilot and avid mo\r\n no-skier.\\n\\nPerspectives in Assistive Technology Course Website\\n\\nClassro\r\n om Loczation & Accessibility Information\\n\\nVisit this website for more inf\r\n ormation\r\nDTEND:20260225T015000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T003000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, Classroom 282\r\nSEQUENCE:0\r\nSUMMARY:Designing Beyond the Norm to Meet the Needs of All People\r\nUID:tag:localist.com\\,2008:EventInstance_52188342667500\r\nURL:https://events.stanford.edu/event/designing-beyond-the-norm-to-meet-the\r\n -needs-of-all-people-7907\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260225T023000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T013000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663076783\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Contemplative Program has been relocated for this week. Take th\r\n is rare opportunity to practice yoga and meditation in Windhover Contemplat\r\n ive Center!\\n\\nRelax + Center with Yoga Class with Diane Saenz. A tradition\r\n al\\, easy-to-learn system of Hatha Yoga which encourages proper breathing a\r\n nd emphasizes relaxation.  A typical class includes breathing exercises\\, w\r\n arm-ups\\, postures and deep relaxation.  The focus is on a systematic and b\r\n alanced sequence that builds a strong foundation of basic asanas from which\r\n  variations may be added to further deepen the practice.  This practice is \r\n both for beginners and seasoned practitioners alike to help calm the mind a\r\n nd reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more \r\n than 20 years of experience in the use of yoga and meditation to improve me\r\n ntal and physical well-being.  Following a classical approach\\, she leans o\r\n n asana and pranayama as tools to invite participants into the present mome\r\n nt.  Diane completed her 500 hour level training with the International Siv\r\n ananda Yoga Vedanta Organization in South India\\, followed by specializatio\r\n ns in adaptive yoga and yoga for kids.  She has taught adult and youth audi\r\n ences around the globe.\r\nDTEND:20260225T023000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T013000Z\r\nGEO:37.424997;-122.174383\r\nLOCATION:Windhover Contemplative Center\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesday in Windhover Contemplative Center\r\nUID:tag:localist.com\\,2008:EventInstance_51932556777754\r\nURL:https://events.stanford.edu/event/yoga-tuesday-windhover\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join us for a cozy\\, community-filled night at the A3C Couchroo\r\n m from 6PM-7:30PM! Build your own bowl of hwachae (a refreshing Korean frui\r\n t punch) using a variety of fresh fruit and toppings. Unwind with members o\r\n f the broader Asian American community. In addition to the DIY hwachae bar\\\r\n , we’ll have light snacks and a space to mingle\\, share conversation\\, and \r\n enjoy a relaxing winter evening together.\r\nDTEND:20260225T033000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T020000Z\r\nGEO:37.424927;-122.170123\r\nLOCATION:Asian American Activities Center\\, Couchroom\\, 2nd floor of Old Un\r\n ion Clubhouse\r\nSEQUENCE:0\r\nSUMMARY:Flavors of Community: Build-Your-Own Hwachae Night\r\nUID:tag:localist.com\\,2008:EventInstance_52173257701695\r\nURL:https://events.stanford.edu/event/flavors-of-community-build-your-own-h\r\n wachae-night\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Come learn more about the western snowy plover\\, a diminutive s\r\n horebird that calls the beaches of Monterey Bay home. Point Blue Conservati\r\n on Science ecologist Kriss Neuman has spent decades studying this tiny\\, th\r\n reatened shorebird and will share information on the plover’s life history \r\n and breeding ecology\\, discuss why California’s sandy beaches are so import\r\n ant to the survival of this species\\, and the threats they face\\, including\r\n  from climate and habitat change.\\n\\nRegistration required whether attendin\r\n g in person or via Zoom.\\n\\nZoom Registration Link\\n\\nIn-Person Registratio\r\n n Link\r\nDTEND:20260225T030000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T020000Z\r\nGEO:36.621095;-121.904774\r\nLOCATION:Hopkins Marine Station\\, Izzie Abbott Boatworks Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Snowy Plovers\\, Sandy Beaches\\, and Sea Level Rise\r\nUID:tag:localist.com\\,2008:EventInstance_51933990992870\r\nURL:https://events.stanford.edu/event/the-western-snowy-plover\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Seema Kohli is one of India’s most distinguished contemporary a\r\n rtists\\, with a practice that spans painting\\, drawing\\, sculpture\\, instal\r\n lation\\, and performance. For more than four decades\\, her work has brought\r\n  together memory\\, mythology\\, spirituality\\, and lived experience\\, creati\r\n ng immersive environments that invite reflection and contemplation.\\nKohli'\r\n s work has been featured in major international exhibitions and museums\\, i\r\n ncluding a solo exhibition at the Museum of Sacred Art in Belgium in 2019 a\r\n nd the Kochi-Muziris Biennale in 2016. Her work is held in institutional co\r\n llections such as the British Museum (UK)\\, Rubin Museum (USA)\\, and the Bi\r\n ll and Melinda Gates Foundation (US)\\, among others.\\nKohli is also a sough\r\n t-after speaker and has been invited to present at organizations and instit\r\n utions including TEDx\\, Harvard University\\, the University of Chicago\\, an\r\n d the University of California at Davis\\, among others.\\n\\nAbout the talk\\n\r\n In this reflective talk\\, artist Seema Kohli will share personal insights o\r\n n self-discovery\\, being true to one’s self\\, and the transformative power \r\n of deep inner work. Through art and lived experience\\, she explores how red\r\n esigning the self from within can renew both body and mind. She will lead t\r\n he audience through her journey with an immersive animated projection that \r\n gradually reveals her art. This talk invites listeners into a contemplative\r\n  space\\, offering art and poetry as a guide for inner transformation.\\n\\nLe\r\n arn more about Seema Kohli's work and check out her special exhibition: Sam\r\n sara & Metamorphosis: The Mystical World of Seema Kohli\" with LAASYA Art  a\r\n t the Pacific Art League.\r\nDTEND:20260225T040000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T030000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:\"I AM\":  Poetry reading with Seema Kohli\r\nUID:tag:localist.com\\,2008:EventInstance_51500253533817\r\nURL:https://events.stanford.edu/event/poetry-reading-with-seema-kohli\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260225\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294336924\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260225\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355501029\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nFebruary's exhibition explores how\r\n  ocean structure\\, sea ice processes\\, and ecological interactions govern A\r\n rctic systems\\, influence global climate feedbacks\\, and shape emerging env\r\n ironmental\\, scientific\\, and societal challenges in a rapidly changing Arc\r\n tic Ocean.\\n\\nFeaturing books\\, e-resources\\, and maps\\, the exhibition dem\r\n onstrates why the Arctic is central to advancing understanding of global cl\r\n imate dynamics\\, biodiversity\\, and human–environment interactions in a war\r\n ming world.\\n\\nThe exhibit is available for viewing Monday through Friday d\r\n uring regular library open hours. \\nCheck out past exhibits and subscribe t\r\n o the Branner Library Newsletter.  \\n\\nA current Stanford ID is needed to e\r\n nter the library\\, visitors must present a valid\\, physical government-issu\r\n ed photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260225\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Oceans: The Arctic\r\nUID:tag:localist.com\\,2008:EventInstance_51948019659180\r\nURL:https://events.stanford.edu/event/branner-library-monthly-exhibit-ocean\r\n s-arctic\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260225\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353965110\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:The growth of AI is driving increasing energy demand in the for\r\n m of new data centers\\, while also changing how data centers are designed a\r\n nd operated. In this webinar\\, experts from EPRI’s DCFlex initiative and St\r\n anford’s Bits & Watts Initiative will discuss trends\\, challenges\\, and opp\r\n ortunities arising from this AI-driven load.\\n\\nSpeakers\\n\\nDavid Larson – \r\n Sr. Team Lead\\, Load Forecasting Initiative and Core Team Member of DCFlex\\\r\n , EPRI\\n\\nRam Rajagopal – Associate Professor of Civil and Environmental En\r\n gineering\\, Faculty Director of the Bits & Watts Initiative\\, Stanford Univ\r\n ersity\r\nDTEND:20260225T173000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:AI-Driven Load: Trends\\, Challenges and Opportunities\r\nUID:tag:localist.com\\,2008:EventInstance_52066406872875\r\nURL:https://events.stanford.edu/event/dcflex-bits-watts-joint-webinar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:CAS IHAWG brings together graduate students across humanities d\r\n isciplines for sustained\\, collective writing and scholarly exchange. Hoste\r\n d by the Center for African Studies\\, the group meets weekly to combine dis\r\n ciplined co-writing sessions with peer-led workshops and a speaker series t\r\n hat showcases Africanist humanities research. We foster an encouraging\\, pr\r\n oductive environment where members share work-in-progress\\, troubleshoot wr\r\n iting challenges\\, and celebrate milestones in their research. Who should c\r\n onsider joining:\\n\\nGraduate students whose research engages Africa or the \r\n African diaspora in humanities fields\\, including DAAAS/DLCL and other area\r\n  studies\\, art and art history\\, film and media\\, comparative literature\\, \r\n CCSRE\\, education\\, English\\, feminist and gender studies\\, musicology\\, ph\r\n ilosophy\\, linguistics\\, religious studies\\, and theater/performance studie\r\n s. Interdisciplinary and cross-departmental participation is strongly encou\r\n raged.\\n\\nAttendance can be regular or occasional to accommodate academic s\r\n chedules.\\n\\nClick here to receive meeting notices and event updates. \\n\\nF\r\n or questions\\, contact Mpho (mmolefe@stanford.edu) or Seyi (jesuseyi@stanfo\r\n rd.edu).\\n\\nWe welcome you to join our writing community.\r\nDTEND:20260225T193000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T170000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 127\r\nSEQUENCE:0\r\nSUMMARY:Interdisciplinary Humanities Africanist Writing Group (IHAWG)\r\nUID:tag:localist.com\\,2008:EventInstance_52153415597820\r\nURL:https://events.stanford.edu/event/interdisciplinary-humanities-africani\r\n st-writing-group-ihawg\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260225T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353488761\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260225T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105017978\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260226T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382754984\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The 2023-25 Hamas-Israel war proved to be not only the longest \r\n war in Israel's history but\\, remarkably\\, given that Hamas is a non-state \r\n terrorist organization\\, a war with profound regional consequences. As mult\r\n iple regional and global actors seek to influence the \"day after\" in Gaza f\r\n or their own strategic interests\\, questions about the broader meaning and \r\n implications of the Gaza-centered conflict assume greater international imp\r\n ortance. The war has catalyzed a series of regional and global shifts\\, exp\r\n osing the limits of external actors\\, testing the resilience of long-standi\r\n ng alliances\\, and reshaping the strategic landscape of the Middle East. In\r\n  this timely conversation\\, moderated by Or Rabinowitz\\, Oded Ailam\\, forme\r\n r head of the Mossad’s Counterterrorism Division\\, will offer an in-depth a\r\n nalysis of how the Hamas-Israel war continues to reverberate across the reg\r\n ion and beyond.\\n\\nABOUT THE SPEAKER\\n\\nOded Ailam is a seasoned security a\r\n nd intelligence expert with a career spanning over two decades in Israel’s \r\n elite intelligence agency the Mossad. Among his many high-ranking roles\\, h\r\n e was the director of the Mossad’s Counter-Terrorism Center (CTC). After re\r\n tiring from the Mossad\\, Ailam transitioned into the private sector\\, offer\r\n ing security and strategic consulting services. Ailam is frequently invited\r\n  to lecture at international conferences. His insights are regularly featur\r\n ed on FOX News\\, CNN\\, Newsmax\\, The Washington Post\\, Newsweek\\, as well a\r\n s most of the major European media. Ailam writes regularly in Israel Hayom \r\n newspaper and other international outlets and appears regularly on prime-ti\r\n me television in Israel.  Ailam is a senior researcher in the Jerusalem Cen\r\n ter for Security and Foreign Affairs (JCFA)\\, and an advising analyst to FD\r\n D\\, the Foundation for Defense of Democracies in Washington. Ailam is a gra\r\n duate of Ben-Gurion University\\, where he earned a degree in Industrial Eng\r\n ineering and Management. He also founded a company specializing in industri\r\n al quality control solutions. He published his first short novel\\, a bestse\r\n ller in Israel. He is a writer and contributor to scripts in Hollywood\\, Fr\r\n ance\\, and Israel\\, bringing his expertise in espionage and security to the\r\n  world of storytelling.\\n\\nVirtual Event Only.\r\nDTEND:20260225T191500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Israel Insights Webinar with Oded Ailam — Hamas\\, Israel\\, and the \r\n West: Why This Conflict Matters Far Beyond Gaza\r\nUID:tag:localist.com\\,2008:EventInstance_51208963108865\r\nURL:https://events.stanford.edu/event/israel-insights-webinar-with-oded-ail\r\n am-hamas-israel-and-the-west-why-this-conflict-matters-far-beyond-gaza\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Organized and hosted by the Center for Medieval and Early Moder\r\n n Studies (CMEMS).\\n\\nMahel Hamroun (Stanford University) presents\\, \"Saint\r\n s\\, Sons\\, and Sisters: Writing the Divine into the Laws of the Medieval No\r\n rth\"\\n\\n \\n\\nThe CMEMS Workshop series meets most Wednesdays during the aca\r\n demic year. Lunch is provided. See the CMEMS website for the list of upcomi\r\n ng speakers.\r\nDTEND:20260225T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 252\r\nSEQUENCE:0\r\nSUMMARY:CMEMS: Mahel Hamroun (Stanford University) Presents\\, \"Saints\\, Son\r\n s\\, and Sisters: Writing the Divine into the Laws of the Medieval North\"\r\nUID:tag:localist.com\\,2008:EventInstance_51792024770591\r\nURL:https://events.stanford.edu/event/cmems-mahel-hamroun-stanford-universi\r\n ty-presents-saints-sons-and-sisters-writing-the-divine-into-the-laws-of-the\r\n -medieval-north\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260226T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561116000\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford Department of Medicine would like to invite all Stanfo\r\n rd community members to attend this instance of the Medicine Grand Rounds (\r\n MGR) series\\, which will feature Travis Zack\\, MD\\, PhD\\, a leading researc\r\n her at UCSF\\, redefining clinical approaches to obesity and diabetes throug\r\n h his groundbreaking studies on the intricate relationship between diet and\r\n  metabolic disease.\\n\\nView accreditation info here.\\n\\nCME Activity ID: 56\r\n 176\\n\\nText to 844-560-1904 for CME credit.\\n\\nIf you prefer to claim credi\r\n t online\\, click here.\\n\\nComplete this FORM after each session for MOC cre\r\n dit.\r\nDTEND:20260225T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T200000Z\r\nLOCATION:Li Ka Shing Center\\, Berg Hall\r\nSEQUENCE:0\r\nSUMMARY:Evidence-Based Medicine in an AI World\r\nUID:tag:localist.com\\,2008:EventInstance_51933518767411\r\nURL:https://events.stanford.edu/event/medicine-grand-rounds-with-travis-zac\r\n k-md-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for a conversation with Cecilia Menjívar on how immigra\r\n tion laws and policies affect women and families\\, and how the current admi\r\n nistration has impacted these conditions. We will discuss specifically the \r\n areas affected by the Trump administration’s intensified enforcement effort\r\n s and the vulnerabilities created by these policies for migrants navigating\r\n  employment\\, childcare\\, healthcare\\, interpersonal violence\\, and family \r\n formation.\\n\\nRSVP for this online event\\n\\nAuthor Bio:\\n\\nCecilia Menjívar\r\n  is Distinguished Professor of Sociology and holds the Dorothy L. Meier Soc\r\n ial Equities Chair at UCLA\\, and directs the UCLA Center for the Study of I\r\n nternational Migration. She has written extensively on various aspects of i\r\n mmigration and immigrant experiences\\, including the effects of U.S. laws a\r\n nd policies and enforcement practices\\, gender relations\\, family dynamics\\\r\n , social networks\\, and religious communities. She is the author of Fragmen\r\n ted Ties: Salvadoran Immigrant Networks in America (2000) and  Enduring Vio\r\n lence: Ladina Women’s Lives in Guatemala (2011)\\, as well as co-author of I\r\n mmigrant Families (2016).\\n\\nRSVP for this online event\r\nDTEND:20260225T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Feminism in Theory and Practice featuring Cecilia Menjívar\r\nUID:tag:localist.com\\,2008:EventInstance_52143956834125\r\nURL:https://events.stanford.edu/event/feminism-in-theory-and-practice-featu\r\n ring-cecilia-menjivar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Nurturing Africa’s AI Leaders through Math Olympiad\\n\\nHAI & SD\r\n S Seminar with Gaidi Faraj\\, Lofred Madzou\\, Sanmi Koyejo\\, Ravi Vakil\\n\\nV\r\n isit our website to learn more about the event agenda\\, speakers\\, and othe\r\n r details\\n\\nThe African Olympiad Academy is a world-class high school dedi\r\n cated to training Africa’s most promising students in mathematics\\, science\r\n \\, and artificial intelligence through olympiad-based pedagogy. Olympiads a\r\n re globally recognized competitions for top high-school students that empha\r\n size deep inquiry and rigorous problem solving.\\n\\nThere is growing evidenc\r\n e that olympiad education is a powerful pipeline for exceptional AI talent.\r\n  Notable olympiad alumni include Mira Murati (former CTO of OpenAI)\\, Alexa\r\n ndr Wang (CEO of Scale AI)\\, and Aravind Srinivas (CEO of Perplexity AI)\\, \r\n among many others.\\n\\nIn this seminar\\, AOA Founders will discuss their app\r\n roach to identifying and developing top-tier AI talent on the African conti\r\n nent in coordination with complementary initiatives such as Black in AI. Th\r\n e conversation will highlight how strategic investments in olympiad program\r\n s can unlock Africa’s vast potential as a global hub for AI talent.\r\nDTEND:20260225T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T200000Z\r\nGEO:37.429987;-122.17333\r\nLOCATION:Gates Computer Science Building\\, 119\r\nSEQUENCE:0\r\nSUMMARY:HAI  & SDS Seminar with Gaidi Faraj\\, Lofred Madzou\\, Sanmi Koyejo\\\r\n , and Ravi Vakil\r\nUID:tag:localist.com\\,2008:EventInstance_51985653641961\r\nURL:https://events.stanford.edu/event/hai-sds-seminar-with-gaidi-faraj-lofr\r\n ed-madzou\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Hypnosis is a naturally occurring alteration in consciousness t\r\n hat can be harnessed to help individuals cope with stress\\, sleep issues\\, \r\n and trauma. Please join Dr. David Spiegel for his presentation on the natur\r\n e and neurobiology of hypnosis and its application in facilitating psychoth\r\n erapy.\\n\\n \\n\\nAbout the speaker: Dr. David Spiegel is the Willson Professo\r\n r and Associate Chair of Psychiatry & Behavioral Sciences\\, Director of the\r\n  Center on Stress and Health\\, and Medical Director of the Center for Integ\r\n rative Medicine at Stanford University School of Medicine\\, where he has be\r\n en an academic faculty member since 1975. Areas of Dr. Spiegel's clinical a\r\n nd research experience include psycho-oncology\\, stress and health\\, pain c\r\n ontrol\\, psycho-neuroendocrinology\\, sleep\\, and hypnosis\\, His research ha\r\n s been supported by organizations such as the National Institute of Mental \r\n Health\\, the National Cancer Institute\\, the National Institute on Aging\\, \r\n the National Center for Complementary and Integrative Health\\, the John D. \r\n and Catherine T. MacArthur Foundation\\, the Fetzer Institute\\, the Dana Fou\r\n ndation for Brain Sciences\\, and the Nathan S. Cummings Foundation. Across \r\n a career of over 50 years\\, Dr. Spiegel has published 13 books and close to\r\n  600 journal articles and book chapters.\r\nDTEND:20260225T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Tranceformation: Harnessing Hypnosis for the Treatment of Stress\\, \r\n Insomnia\\, and Trauma\r\nUID:tag:localist.com\\,2008:EventInstance_52023013487234\r\nURL:https://events.stanford.edu/event/tranceformation-harnessing-hypnosis-f\r\n or-the-treatment-of-stress-insomnia-and-trauma\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260225T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T201500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51586828257769\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Britt Koskella\\, \"\r\n Exploring the role of phages in microbiome composition and function\"\r\nDTEND:20260225T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T203000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY: Microbiology & Immunology Wednesday Seminar: Britt Koskella\\, \"Exp\r\n loring the role of phages in microbiome composition and function\"\r\nUID:tag:localist.com\\,2008:EventInstance_51143418225277\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-britt-koskella-exploring-the-role-of-phages-in-microbiome-composition-\r\n and-function\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260225T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T203000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Piano Students of Kumaran Arul\r\nUID:tag:localist.com\\,2008:EventInstance_51463202543791\r\nURL:https://events.stanford.edu/event/noon-arul-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The crustal magnetic anomalies near the lunar crater Gerasimovi\r\n ch are among the highest-magnitude anomalies on the Moon. Previous work has\r\n  suggested they formed from the deposition and magnetization of ejecta from\r\n  the Crisium basin\\, which is antipodal to the region. In this talk\\, I wil\r\n l describe the correlation between topographic slope and magnetic field mor\r\n phology in this region\\, present a predictive model of magnetic field stren\r\n gth based on slope that reproduces key features of the observed field\\, est\r\n imate the source body magnetization of the fill deposit thickness inside of\r\n  Gerasimovich crater\\, and describe the implications of the varying magneti\r\n zation directions within the group of Gerasimovich anomalies.\\n\\n \\n\\nDr. M\r\n egan R. K. Seritan received her B.S. in Physics from UC Santa Barbara in 20\r\n 16\\, and her Ph.D. in Planetary Science from UC Santa Cruz in 2022. During \r\n her Ph.D.\\, her advisor was Ian Garrick-Bethell\\, who is the collaborator f\r\n or the work presented in this talk. In 2023\\, Megan joined the SETI Institu\r\n te\\, where she is the Deputy Manager of the Ring Moon Systems Node of NASA'\r\n s Planetary Data System archive.\r\nDTEND:20260225T212000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T203000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Planetary Science and Exploration Seminar\\, Megan Seritan: \"Magneti\r\n c field morphology correlated with surface slopes at the Gerasimovich lunar\r\n  magnetic anomaly\"\r\nUID:tag:localist.com\\,2008:EventInstance_52154025904006\r\nURL:https://events.stanford.edu/event/planetary-science-and-exploration-sem\r\n inar-megan-seritan-magnetic-field-morphology-correlated-with-surface-slopes\r\n -at-the-gerasimovich-lunar-magnetic-anomaly\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:PhD Defense\r\nDESCRIPTION:Title: Informing Water and Nutrient Management for Sustainable \r\n Agriculture\\n\\nAbstract:\\n\\nEffective management of water and nutrient reso\r\n urces remains a central challenge for sustainable agricultural production. \r\n Agronomic decisions and how they impact crop yields and other relevant outc\r\n omes\\, such as consumptive water use\\, are highly field specific. Variabili\r\n ty over space and time for both meteorological and management factors also \r\n makes it difficult to identify how specific agricultural practices\\, often \r\n funded through grant programs\\, impact outcomes of interest. The research i\r\n n this dissertation investigates how high-resolution satellite data product\r\n s\\, combined with field-level agronomic analyses\\, can guide the implementa\r\n tion of agricultural management programs\\, strategies\\, and technologies.\\n\r\n \\nDespite substantial and continued investments into agri-environmental pro\r\n grams\\, systematic evaluation remains limited\\, making it essential to quan\r\n tify their effectiveness and ensure that expected outcomes are being achiev\r\n ed. High-resolution spatial analysis across large regions can also identify\r\n  where technologies\\, agri-environmental practices\\, or subsidy programs ar\r\n e likely to be the most effective and have the greatest potential. This res\r\n earch proposes several frameworks that facilitate informed decision-making \r\n at multiple scales\\, identify opportunities for targeted improvement\\, and \r\n guide future research efforts that support sustainable agricultural managem\r\n ent.\r\nDTEND:20260225T223000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T213000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 299\r\nSEQUENCE:0\r\nSUMMARY:Corisa Wong - PhD Dissertation Defense\r\nUID:tag:localist.com\\,2008:EventInstance_52137380428675\r\nURL:https://events.stanford.edu/event/corisa-wong-phd-dissertation-defense\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Do you have questions about requirements and logistics surround\r\n ing your degree? Drop-In and get answers!\\n\\nThis is for current Earth Syst\r\n ems undergrad and coterm students.\r\nDTEND:20260225T223000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T213000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Drop-In Advising (Undergrad & Coterm majors)\r\nUID:tag:localist.com\\,2008:EventInstance_51932797183015\r\nURL:https://events.stanford.edu/event/earth-systems-drop-in-advising-underg\r\n rad-coterm-majors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Modeling the Built Environment: From Information to Resilient F\r\n utures\\n\\n \\n\\nAbstract:\\n\\nThe built environment is undergoing rapid trans\r\n formation driven by advances in computation\\, sensing\\, and data integratio\r\n n—while facing increasing pressures from climate change\\, urbanization\\, an\r\n d resource constraints. As infrastructure systems grow in complexity\\, the \r\n challenge is no longer simply generating data\\, but modeling and translatin\r\n g information into actionable knowledge that supports resilient and regener\r\n ative futures. This talk presents research at the intersection of engineeri\r\n ng and computing that advances information modeling across the lifecycle of\r\n  buildings and infrastructure systems. I will discuss three interconnected \r\n thrusts: automated BIM upkeep through reality capture and machine learning \r\n (LivingBIM)\\; immersive visualization and extended reality technologies to \r\n enhance design review and stakeholder engagement\\; and digital twins with A\r\n I-enabled scenario generation to support equitable climate adaptation\\, inc\r\n luding community-engaged resilience modeling in Southeast Texas. Together\\,\r\n  these efforts move beyond static models toward dynamic\\, community-informe\r\n d information infrastructures that enable circular economy principles\\, dec\r\n arbonization in project delivery\\, and long-term resilience in the built en\r\n vironment.\\n\\n \\n\\nBio:\\n\\nFernanda Leite is the Interim Vice President for\r\n  Research and Joe J. King Professor in Civil Engineering at The University \r\n of Texas at Austin. An expert in Building Information Modeling (BIM)\\, cons\r\n truction engineering\\, and resilient systems engineering\\, her research exp\r\n lores the integration of 3D modeling and artificial intelligence (AI) to cr\r\n eate sustainable and adaptable infrastructure. As Associate Dean for Resear\r\n ch in the Cockrell School of Engineering\\, Dr. Leite helped launch major in\r\n terdisciplinary initiatives in semiconductors\\, quantum science\\, robotics \r\n and AI. She has also led cross-campus efforts\\, including the Planet Texas \r\n 2050 grand challenge.\r\nDTEND:20260225T223000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T213000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 292A (CIFE room)\r\nSEQUENCE:0\r\nSUMMARY:Fernanda Leite - Sustainable Design & Construction seminar\r\nUID:tag:localist.com\\,2008:EventInstance_52179639751848\r\nURL:https://events.stanford.edu/event/fernanda-leite-sustainable-design-con\r\n struction-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Tanbūr and Iran’s Sonic Heritage: The Yarsan Ritual Tradition\\,\r\n  Myth\\, and Spirituality\\n\\nFebruary 23\\, 24\\, 25\\, and 26\\n\\nAcclaimed Ira\r\n nian musician Ali Akbar Moradi will teach four music workshops in Persian\\,\r\n  sponsored by the Iranian Studies Program and the Department of Music. Plea\r\n se RSVP to attend. Space is limited\\, priority is given to Stanford affilia\r\n tes. An instrument is not required to attend and learn but you may bring yo\r\n ur tanbūr if you have one. Guests will receive a confirmation email if they\r\n  are added to the workshop or have been added to the waitlist. Please only \r\n RSVP if you are sure you can attend. \\n\\nAli Akbar Moradi began playing the\r\n  tanbūr at the age of seven and learned not only the music but the Kurdish \r\n maqam repertoire. He has won awards\\, recorded several albums\\, and perform\r\n ed in Europe\\, the United States\\, and Canada with singers like Shahram Naz\r\n eri and at the Royal Festival Hall in London. In addition to teaching the t\r\n anbūr in Tehran and his hometown of Kermanshah\\, Ali Akbar is a dedicated s\r\n cholar of the tanbūr and continues to develop the legacy of the instrument \r\n and the regional Kurdish music.\\n\\nWorkshops coordinated by Ashkan Nazari\\,\r\n  a Stanford PhD student in ethnomusicology. \\n\\nSession One: Monday\\, Febru\r\n ary 23\\, 2:00-4:00\\n\\nA general introduction to the tanbūr\\, including:\\n\\n\r\n Its historical development\\, the etymology and meaning of the term tanbūr.M\r\n ajor categories of tanbūr maqāms\\; the tanbūr’s presence in Iran and in bro\r\n ader global contexts.The instrument’s range and the number of frets\\, the p\r\n rincipal structural components of the instrument.Plectra (mezrāb) and core \r\n performance techniques. The session concludes with instruction in one maqām\r\n .Session Two: Tuesday\\, February 24\\, 12:00-2:00\\n\\nThe tanbūr in relation \r\n to Yārsān religious tradition including:\\n\\nRitual narratives and accounts \r\n associated with specific tanbūr maqāmsRhythmic organization and ancient cyc\r\n lical patterns (adwār) within the tanbūr maqām repertoire.The session concl\r\n udes with instruction in one maqām.Session Three: Wednesday\\, February 25\\,\r\n  2:00-4:00\\n\\nThe tanbūr and the Shāhnāmeh\\, with attention to maqāms assoc\r\n iated with the epic tradition.The session concludes with instruction in one\r\n  maqām.Session Four: Thursday\\, February 26\\, 12:00-2:00\\n\\nA brief overvie\r\n w of Iran’s classical radīf tradition\\, with comparative attention to affin\r\n ities between selected tanbūr maqāms and particular gūsheh-s in the radīf r\r\n epertoire.Part of the Stanford Festival of Iranian Arts\\n\\nStanford is comm\r\n itted to ensuring its facilities\\, programs and services are accessible to \r\n everyone. To request access information and/or accommodations for this even\r\n t\\, please complete https://tinyurl.com/AccessStanford at the latest one we\r\n ek before the event.\r\nDTEND:20260226T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Iranian Music Workshops with Ali Akbar Moradi\r\nUID:tag:localist.com\\,2008:EventInstance_51995410184543\r\nURL:https://events.stanford.edu/event/iranian-music-workshops-with-ali-akba\r\n r-moradi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In 20 to 40 years' time\\, technologies such as CRISPR will tran\r\n sform humanity and redefine many of society’s structures. When humans are b\r\n orn outside of the body in labs\\, who will shape these reproductive habitat\r\n s– and for what purpose?\\n\\nCome join us this evening with Artist Lucy McRa\r\n e to imagine what the future of technology and human evolution might look l\r\n ike using narrative prototyping: provoking impossible questions and explori\r\n ng ways in which science fiction can inspire real-world discourse.\\n\\nArtis\r\n t Lucy McRae leads a multi-disciplinary\\, art-research studio investigating\r\n  the impact future technologies have on human evolution. Designing hypothet\r\n ical worlds through various visual mediums such as film\\, kinetic sculpture\r\n \\, and textile design\\, her work sparks discourse and research surrounding \r\n emerging fields of science. McRae’s genre-bending sci-fi films and installa\r\n tions gesture to a not-so-distant future where scientific advancements will\r\n  enable humans to be grown in laboratories outside of the womb. Charting sp\r\n heres of art and technology not yet labeled or defined\\, she uses speculati\r\n on as a tool to explore ideologies and ethics about who we are\\, and where \r\n we are headed.\r\nDTEND:20260226T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T230000Z\r\nGEO:37.426525;-122.172025\r\nLOCATION:Building 550\\, Peterson Laboratory\\, Atrium\r\nSEQUENCE:0\r\nSUMMARY:Liu Lecture: Lucy McRae\r\nUID:tag:localist.com\\,2008:EventInstance_52029960078110\r\nURL:https://events.stanford.edu/event/liu-lecture-lucy-mcrae\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for a book talk on The Dialectic of Cosmopolitan Time w\r\n ith Shaj Mathew:\\n\\nThis study proposes a new dimension of cosmopolitanism:\r\n  the temporal quality of cultural “coexistence.” The texts under analysis d\r\n escribe how multiple cultural temporalities coexist within a given moment o\r\n f time. This definition does not overlook the imperial\\, economic\\, and aes\r\n thetic aspects of cosmopolitanism\\, but rather expresses them in terms of t\r\n ime. The book’s theory of temporal coexistence acquires special resonance i\r\n n the Turkish novels of Orhan Pamuk\\, Ahmet Hamdi Tanpınar\\, and Ahmet Midh\r\n at\\; the Iranian cinema of Abbas Kiarostami and the Persian poetry of Forou\r\n gh Farrokhzad\\; and in the chronological world history told by the Louvre A\r\n bu Dhabi. These works of Middle Eastern culture are modern and contemporary\r\n \\, yet they contain a simultaneity of historical eras. The coexistence of t\r\n hese contradictory eras enables the study to contest notions such as “Europ\r\n ean progress” and “postcolonial belatedness” that uphold the developmentali\r\n st conception of history. In the process\\, cosmopolitan time improves upon \r\n binary understandings of East and West and tradition and modernity. The coe\r\n xistence of disparate times—linear and nonlinear\\; qualitative and quantita\r\n tive\\; secular and religious\\; reactionary and revolutionary—reframes cross\r\n -cultural difference through time instead of space. The Dialectic of Cosmop\r\n olitan Time thus advances a new paradigm for cross-cultural thinking\\, reve\r\n aling the temporal correlate of cultural hybridity.\\n\\nRSVP for the Shaj Ma\r\n thew talk\r\nDTEND:20260226T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260225T230000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 216\r\nSEQUENCE:0\r\nSUMMARY:PATH+: Shaj Mathew : The Dialectic of Cosmopolitan Time\r\nUID:tag:localist.com\\,2008:EventInstance_51906317279124\r\nURL:https://events.stanford.edu/event/path-shaj-mathew-the-dialectic-of-cos\r\n mopolitan-time\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Due to unforeseen circumstances\\, our original speaker\\, Lucy A\r\n harish\\, is unable to travel to the U.S. at this time. While we hope to hav\r\n e Aharish join us at a later date\\, we are pleased to instead welcome Judea\r\n  Pearl\\, UCLA Chancellor's Professor of Computer Science and Statistics\\, D\r\n irector of the UCLA Cognitive Systems Laboratory\\, and father of Daniel Pea\r\n rl.\\n\\nWe have reached capacity for this event\\, and registration is now cl\r\n osed. For all questions\\, please email israelstudies@stanford.edu.\\n\\nOn We\r\n dnesday\\, February 25\\, the Jan Koum Israel Studies Program at the Center o\r\n n Democracy\\, Development and the Rule of Law is pleased to welcome Judea P\r\n earl to present the 2026 Daniel Pearl Memorial Lecture. He will discuss his\r\n  latest book\\, Coexistence and Other Fighting Words: Selected Writings of J\r\n udea Pearl.\\n\\nThe Daniel Pearl Memorial Lecture honors the life of Daniel \r\n Pearl (Class of '85)\\, who was a journalist\\, musician\\, and family man ded\r\n icated to the ideals of peace and humanity. In 2002\\, Daniel was kidnapped \r\n and killed by terrorists in Pakistan while working as a foreign corresponde\r\n nt for the Wall Street Journal.\\n\\nThe 2026 Daniel Pearl Memorial Lecture i\r\n s presented by the Jan Koum Israel Studies Program in partnership with Hill\r\n el at Stanford.\\n\\nABOUT THE BOOK\\n\\nCatalyzed by the kidnapping and murder\r\n  of his son\\, Wall Street Journal reporter Daniel Pearl\\, world-renowned co\r\n mputer scientist and philosopher Dr. Judea Pearl has been a relentless advo\r\n cate for reason and understanding in writings and talks spanning the first \r\n quarter of the twenty-first century. Best known for his groundbreaking work\r\n  on artificial intelligence\\, Dr. Pearl turned his power of analysis to an \r\n anatomy of the hate that took his son's life\\, the Arab-Israeli conflict\\, \r\n the story of Israel\\, antisemitism\\, and other related subjects. In Coexist\r\n ence and Other Fighting Words\\, Dr. Pearl collects the best of his work\\, o\r\n ffering an indispensable guide to some of the most pressing issues of our t\r\n ime.\\n\\nABOUT THE SPEAKER\\n\\nJudea Pearl (born in Tel-Aviv\\, 1936) is the C\r\n hancellor's Professor of Computer Science and Statistics at UCLA and Direct\r\n or of the UCLA Cognitive Systems Laboratory. He is known internationally fo\r\n r his contributions to Artificial Intelligence\\, human reasoning\\, and phil\r\n osophy of science. He has received numerous scientific awards\\, including t\r\n he 2012 A. M. Turing Award (often described as the \"Nobel Prize of computin\r\n g\"). Judea is the father of slain Wall Street Journal journalist Daniel Pea\r\n rl and president of the Daniel Pearl Foundation. He lectures and writes on \r\n Jewish identity\\, Israel\\, and the Arab-Israeli conflict. His latest book\\,\r\n  Coexistence and Other Fighting Words: Selected Writings of Judea Pearl\\, c\r\n ollects his essays written on these topics between 2002 and 2025.\r\nDTEND:20260226T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T000000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, Bechtel Conference Center\r\nSEQUENCE:0\r\nSUMMARY:Sold Out: Daniel Pearl Memorial Lecture Featuring Judea Pearl\r\nUID:tag:localist.com\\,2008:EventInstance_51782410784119\r\nURL:https://events.stanford.edu/event/daniel-pearl-memorial-lecture-featuri\r\n ng-judea-pearl\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Come meet fellow graduate students teaching across the universi\r\n ty to discuss strategies\\, challenges\\, and best practices for teaching dur\r\n ing these times\\, and how identity influences both student and instructor e\r\n xperiences in the classroom. Those currently teaching\\, who have taught in \r\n the past\\, or anticipate teaching in the future are all welcome.\r\nDTEND:20260226T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T000000Z\r\nGEO:37.424927;-122.170123\r\nLOCATION:Asian American Activities Center\\, Couchroom\r\nSEQUENCE:0\r\nSUMMARY:Grad Life: Teaching in These Times Event \r\nUID:tag:localist.com\\,2008:EventInstance_52153751570167\r\nURL:https://events.stanford.edu/event/a3c-grad-life-W26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Sports in International Politics: Between Power and Peacebuildi\r\n ng\\, Timothy Sisk \\n\\n\\n\\nTimothy D. Sisk is Professor of International and\r\n  Comparative Politics at the Josef Korbel School of Global and Public Affai\r\n rs\\, University of Denver. His research\\, teaching and policy-oriented work\r\n  focuses on armed conflict and political violence together with understandi\r\n ng and evaluation of processes of conflict prevention\\, management\\, and pe\r\n acebuilding in fragile and post-war contexts. He teaches graduate and under\r\n graduate courses on comparative politics\\, politics of deeply divided socie\r\n ties\\, elections and conflict dynamics\\, and sport and international politi\r\n cs.\\n\\nSisk has conducted extensive research on the role of international a\r\n nd regional organizations\\, particularly the United Nations\\, in peace oper\r\n ations\\, peacemaking\\, and peacebuilding. Prior to joining the University o\r\n f Denver in 1998\\, Prof. Sisk was a Program Officer and Research Scholar in\r\n  the Grant Program of the United States Institute of Peace in Washington D.\r\n C. He holds a doctoral degree in political science from The George Washingt\r\n on University and an MA in international journalism and BA in international\r\n  studies and German from Baylor University.\\n\\n\\n\\nModerated by IR Faculty \r\n Director Professor Stephen Stedman \\n\\nProfessor Stephen Stedman is a Senio\r\n r Fellow at the Freeman Spogli Institute for International Studies (FSI) an\r\n d the Center on Democracy\\, Development and the Rule of Law (CDDRL)\\; direc\r\n tor of the Fisher Family Honors Program in Democracy\\, Development and the \r\n Rule of Law\\; an affiliated faculty member at the Center for International \r\n Security and Cooperation (CISAC)\\; and professor of political science (by c\r\n ourtesy).\\n\\nIn 2011-12\\, Professor Stedman served as the Director for the \r\n Global Commission on Elections\\, Democracy\\, and Security\\, a body of emine\r\n nt persons tasked with developing recommendations on promoting and protecti\r\n ng the integrity of elections and international electoral assistance. The C\r\n ommission is a joint project of the Kofi Annan Foundation and International\r\n  IDEA\\, an intergovernmental organization that works on international democ\r\n racy and electoral assistance.\\n\\nIn 2005\\, he served as Assistant Secretar\r\n y-General and Special Advisor to the Secretary- General of the United Natio\r\n ns\\, with responsibility for working with governments to adopt the Panel’s \r\n recommendations for strengthening collective security and for implementing \r\n changes within the United Nations Secretariat\\, including the creation of a\r\n  Peacebuilding Support Office\\, a Counter Terrorism Task Force\\, and a Poli\r\n cy Committee to act as a cabinet to the Secretary-General.\\n\\nIn 2003-04 Pr\r\n ofessor Stedman was Research Director of the United Nations High-level Pane\r\n l on Threats\\, Challenges and Change and was a principal drafter of the Pan\r\n el’s report\\, A More Secure World: Our Shared Responsibility.\r\nDTEND:20260226T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T000000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, IR/HumRights Lounge\\, Suite 030\r\nSEQUENCE:0\r\nSUMMARY:I.R. Book Talk: Sports in International Politics\\, by Timothy Sisk \r\nUID:tag:localist.com\\,2008:EventInstance_51994760566953\r\nURL:https://events.stanford.edu/event/ir-book-talk-sports-in-international-\r\n politics-between-power-and-peacebuilding\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant person in your life\\, or are experiencing feelings of grief in a \r\n time of uncertainty\\, this is an opportunity to share your experiences\\, su\r\n ggestions\\, and concerns with others in a safe and supportive environment.\\\r\n n\\nStudent Grief Gatherings are held 3x/quarter and are facilitated by staf\r\n f from ORSL\\, Well-Being\\, CAPS and GLO. This event is free and open only t\r\n o Stanford students.\r\nDTEND:20260226T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T000000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden\r\nSEQUENCE:0\r\nSUMMARY:Student Grief & Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_51586846654071\r\nURL:https://events.stanford.edu/event/student-grief-gathering\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant being in your life\\, or are experiencing feelings of grief in a t\r\n ime of uncertainty\\, this is an opportunity to share your experiences\\, sug\r\n gestions\\, and concerns with others in a safe and supportive environment.\\n\r\n \\nStudent Grief Gatherings are held 3x every quarter and facilitated by sta\r\n ff from ORSL\\, Well-Being\\, CAPS and GLO. This event is free\\, and all regi\r\n stered Stanford students are eligible to participate.\\n\\nDate & Location Sc\r\n hedule\\n\\nJan 14: Grief Gathering (Rm 317 in Old Union)\\n\\nFeb. 11: Healing\r\n  Through Heartbreak (Rm 317 in Old Union)\\n\\nFeb. 25: Estrangement (Rm 317 \r\n in Old Union)\\n\\nJan. 21 @ 4-5:30pm: Grief Cafe brings you How to Help a Fr\r\n iend in Grief\\, offering snacks and cozy drinks (Kingscote)\\n\\nVisit this w\r\n ebsite for more information\r\nDTEND:20260226T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T000000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, 3rd Floor\r\nSEQUENCE:0\r\nSUMMARY:Student Grief and Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_51828068917704\r\nURL:https://events.stanford.edu/event/copy-of-student-grief-and-loss-gather\r\n ing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Are you interested in the VPUE Major Grant? Considering pursuin\r\n g Honors in CSRE? Unsure what the CCSRE Senior Project entails? \\n\\nCCSRE w\r\n ill be hosting a writing workshop on Wednesday\\, February 25\\, 2026 from 4:\r\n 30pm-5:30pm in the CCSRE Conference Room (Building 360\\, Room 361J). \\n\\nTh\r\n is writing workshop is open to students interested in co-working together a\r\n nd learning about the VPUE Major Grant application\\, CSRE Honors Proposal\\,\r\n  and CCSRE Senior Project. This co-working session is hosted under CCSRE\\, \r\n but all interested students are free to join.\\n\\nCCSRE staff and student le\r\n adership will be present to answer any questions and provide guidance for e\r\n ach process. \\n\\nBoba drinks and empanadas will be provided!\\n\\nFor any que\r\n stions\\, feel free to reach out to CHILATST Program Liaison\\, Antuaneth Mej\r\n ia\\,at a1042661@stanford.edu or CSRE Program Liaison\\, Christine Kang\\, at \r\n chrstnk@stanford.edu. \\n\\nWe hope to see you there!\r\nDTEND:20260226T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T003000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, 361J\r\nSEQUENCE:0\r\nSUMMARY:CCSRE Writing Workshop\r\nUID:tag:localist.com\\,2008:EventInstance_52092463648176\r\nURL:https://events.stanford.edu/event/ccsre-writing-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Victoria Arbitrio\\, PE\\, F.SEI\\, Honorary SEAoNY\\nAssociate Par\r\n tner\\n\\nVicki Arbitrio is an Associate Partner at Gilsanz Murray Steficek. \r\n In her over 40-year career as a structural engineer she has worked on a wid\r\n e range of projects\\, both new construction and renovation\\, as well as spe\r\n cialty projects such as art installations and forensic reports.\\n\\nMs. Arbi\r\n trio contributes to the structural engineering industry through involvement\r\n  in professional societies both locally and nationally. She recently joined\r\n  the Board of Directors for the National Council of Structural Engineers As\r\n sociations Foundation. She is a Past-President of the Applied Technology Co\r\n uncil\\, and a Past-President of NCSEA. Ms. Arbitrio participated in the ASC\r\n E/FEMA 403: World Trade Center Building Performance Study and in NCSEA’s fi\r\n rst edition of SEERPlan Manual: Structural Engineers Emergency Response Pla\r\n n. More recently\\, Ms. Arbitrio helped to found the SEAoNY Diversity Commit\r\n tee\\; she serves on the ACEC-NY Public Policy committee and was 2018-2020 C\r\n hair of the ACEC – New York Metro Region. In 2019 she was named an Honorary\r\n  Member of SEAoNY.\\n\\nMs. Arbitrio teaches at the Yale School of Architectu\r\n re\\, and at the Syracuse School of Architecture.\r\nDTEND:20260226T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T003000Z\r\nGEO:37.429138;-122.17552\r\nLOCATION:Shriram Center\\, 104\r\nSEQUENCE:0\r\nSUMMARY:CEE 298 Structural Engineering and Mechanics Seminar - Adaptive Reu\r\n se: Cubicles to Kitchens and Dorms to Kindergartens\r\nUID:tag:localist.com\\,2008:EventInstance_52135550417580\r\nURL:https://events.stanford.edu/event/copy-of-cee-183-structural-engineerin\r\n g-and-mechanics-seminar-2445\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The long arc of research is less a process of mastery than of d\r\n iscovering just how little we know.  Learning more reveals much more to lea\r\n rn\\, and knowing more doesn't always engender wisdom or amplify holistic in\r\n sight.  Research explores a complex terrain with no overhead view.  Where d\r\n o we turn?  How do we turn?  In this year’s continuation of Research and th\r\n e Artistic (Im)pulse we bring together scholars\\, scientists\\, and artists \r\n to discuss research and creative inquiry as strategies of collective orient\r\n ation and wayfinding with limited tools and inchoate goals in an infinite f\r\n ield of possibility.  How can abstraction\\, divination\\, and strategic limi\r\n tation help precipitate purpose or meaning?  Beyond asking what will happen\r\n \\, how should we decide what to do?\\n\\n \\n\\nSpeakers:\\n\\nLan Li\\n\\nMiljohn \r\n Ruperto\\n\\nGerardo Aldana\r\nDTEND:20260226T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T003000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, Denning Family Resource Center\r\nSEQUENCE:0\r\nSUMMARY:Research & the Artistic (Im)pulse 2026: What will happen | What to \r\n do\r\nUID:tag:localist.com\\,2008:EventInstance_51810129752406\r\nURL:https://events.stanford.edu/event/research-the-artistic-impulse-2026-wh\r\n at-will-happen-what-to-do\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:** THIS EVENT HAS BEEN CANCELED**\\n\\nWith Guest Speaker Oded Na\r\n 'aman (The Hebrew University of Jerusalem)\\n\\nContemporary just war theoris\r\n ts share a common blindspot: the hatred that structures war\\, and the inter\r\n nal logic of that hatred. By failing to see how hatred shapes wartime agenc\r\n y and deliberation\\, just war theory’s constraining ambitions are undermine\r\n d: firstly\\, it misconceives the very agents its standards are meant to gui\r\n de. This leads to confusion about how the standards they propose properly a\r\n pply to war\\, and how such standards can be understood as action-guiding. S\r\n econdly\\, by overlooking the hatred that structures war\\, just war theory e\r\n xhibits a form of the moral blindness it purports to counteract. This theor\r\n etical blindness is revealed in just war theory's inability to acknowledge \r\n what soldiers sometimes recognize: that even the justified killing of enemy\r\n  combatants—not merely the unjustified killing of civilians—constitutes a m\r\n oral horror.\r\nDTEND:20260226T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T010000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Room 252\r\nSEQUENCE:0\r\nSUMMARY:Canceled: The Contemporary: Morality and Necessity at War: On War’s\r\n  Moral Psychology\r\nUID:tag:localist.com\\,2008:EventInstance_51816498583800\r\nURL:https://events.stanford.edu/event/the-contemporary-morality-and-necessi\r\n ty-at-war-on-wars-moral-psychology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Dr. Gabriel Hetland is Associate Professor of Africana\\, Latin \r\n American\\, Caribbean and Latinx Studies at SUNY Albany. He is the author of\r\n  Democracy on the Ground: Local Politics in Latin America’s Left Turn and n\r\n umerous articles on Venezuela and Latin American politics in outlets such a\r\n s the Washington Post\\, The Guardian\\, The Nation\\, and The Intercept.\\n\\nM\r\n ikael Wolfe\\, Associate Professor of History at Stanford\\, will comment on \r\n Dr. Hetland’s talk and moderate Q&A.\\n\\nThe January 3rd U.S. attack on Vene\r\n zuela has produced a novel form of regime change without a change of regime\r\n \\, what could be termed “Madurismo without Maduro.” The U.S. decapitated Ve\r\n nezuela's government but left much of its structure intact while commandeer\r\n ing Venezuela's oil sector in brazen neo-colonial fashion. Ironically\\, whi\r\n le Trump has been obsessed with oil\\, U.S. oil companies have been reticent\r\n  to invest significantly in Venezuela. This talk will examine the political\r\n  and economic contradictions of this dangerous and unusual situation\\, its \r\n implications for Latin America\\, and Cuba in particular\\, where the Trump a\r\n dministration is ratcheting up its efforts at regime change\\, a longstandin\r\n g bipartisan goal since the 1959 Cuban Revolution now rebranded as the “Don\r\n roe Doctrine.”\r\nDTEND:20260226T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T010000Z\r\nGEO:37.422017;-122.165624\r\nLOCATION:Bolivar House\\, Seminar Room\r\nSEQUENCE:0\r\nSUMMARY:Venezuela and Cuba under the “Donroe Doctrine”: Context and Prospec\r\n ts\r\nUID:tag:localist.com\\,2008:EventInstance_52012748539051\r\nURL:https://events.stanford.edu/event/venezuela-and-cuba-under-the-donroe-d\r\n octrine-context-and-prospects\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Contemplative Program has been relocated for this week. Take th\r\n is rare opportunity to practice yoga and meditation in Windhover Contemplat\r\n ive Center!\\n\\nThis all-levels yoga class offers a balanced\\, accessible pr\r\n actice designed to support both physical ease and mental clarity. Classes t\r\n ypically integrate mindful movement\\, breath awareness\\, and simple contemp\r\n lative elements to help release accumulated tension while maintaining stabi\r\n lity and strength. Postures are approached with options and modifications\\,\r\n  making the practice appropriate for a wide range of bodies and experience \r\n levels. Emphasis is placed on sustainable movement\\, nervous system regulat\r\n ion\\, and cultivating practices that translate beyond the mat and into dail\r\n y life.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in \r\n Yoga Philosophy from the Graduate Theological Union. Her dissertation\\, In \r\n Search of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Pra\r\n ctice\\, and Improving Sleep in Higher Education\\, examines the integration \r\n of contemplative practices within university settings. She joined the Stanf\r\n ord community in Spring 2024\\, where she has taught Sleep for Peak Performa\r\n nce and Meditation through Stanford Living Education (SLED)\\, and currently\r\n  teaches Yoga for Stress Management in the Department of Athletics\\, Physic\r\n al Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director\r\n  Emeritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\\r\n , where she also served on faculty wellness boards. A practitioner and educ\r\n ator since 1995\\, she has completed three 500-hour teacher training program\r\n s. She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga\r\n  for Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health mag\r\n azine for three years. Her work has appeared in nearly every major yoga and\r\n  wellness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, bre\r\n athwork\\, and meditation initiative in partnership with Oprah Magazine. She\r\n  is a recipient of USC’s Sustainability Across the Curriculumgrant and the \r\n Paul Podvin Scholarship from the Graduate Theological Union. She currently \r\n serves as Interim Director of Events and Operations in Stanford’s Office fo\r\n r Religious and Spiritual Life\\, where she also teaches weekly contemplativ\r\n e practice classes.\r\nDTEND:20260226T023000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T013000Z\r\nGEO:37.424997;-122.174383\r\nLOCATION:Windhover Contemplative Center\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesday in Windhover Contemplative Center\r\nUID:tag:localist.com\\,2008:EventInstance_51932594842357\r\nURL:https://events.stanford.edu/event/yoga-wednesday-windhover\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Creative Writing Program is pleased to announce the next ev\r\n ent in the Lane Lecture Series: A Reading with Viet Thanh Nguyen.\\n\\nThis e\r\n vent is open to Stanford affiliates and the general public. Registration is\r\n  encouraged but not required. Register here\\n\\n____\\n\\nViet Thanh Nguyen’s \r\n novel The Sympathizer won the Pulitzer Prize for Fiction\\, among many other\r\n  awards\\, and was turned into an HBO limited series. His other books includ\r\n e The Committed\\, the sequel to The Sympathizer\\, Nothing Ever Dies: Vietna\r\n m and the Memory of War (a finalist for the National Book Award in nonficti\r\n on and the National Book Critics Circle Award in General Nonfiction)\\, and \r\n A Man of Two Faces: A Memoir\\, A History\\, A Memorial. He is also the autho\r\n r of the bestselling short story collection The Refugees\\, and two children\r\n ’s books\\, Chicken of the Sea (written with his son Ellison) and Simone. Be\r\n sides editing The Displaced: Refugee Writers on Refugee Lives and The Cleav\r\n ing: Vietnamese Writers in the Diaspora\\, he teaches at the University of S\r\n outhern California\\, where he is a University Professor. His most recent bo\r\n ok is To Save and to Destroy: Writing as an Other\\, and the edited volume\\,\r\n  The Cleaving: Vietnamese Writers in the Diaspora. He has received fellowsh\r\n ips from the Guggenheim and MacArthur Foundations.\r\nDTEND:20260226T050000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T033000Z\r\nGEO:37.423953;-122.171824\r\nLOCATION:Faculty Club\\, Cedar Room\r\nSEQUENCE:0\r\nSUMMARY:Reading with Viet Thanh Nguyen\\, part of the Lane Lecture Series\r\nUID:tag:localist.com\\,2008:EventInstance_50879424455440\r\nURL:https://events.stanford.edu/event/reading-with-viet-thanh-nguyen-part-o\r\n f-the-lane-lecture-series\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260226\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294337949\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260226\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355502054\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260226\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353967159\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51887653566192\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-2980\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:This 6-session support group\\, co-facilitated by two MHT clinic\r\n ians\\, offers a student-centered space to show up as you are\\, connect with\r\n  peers\\, and build community.\\n\\nTogether we’ll explore ways to navigate ac\r\n ademic and professional stress\\, manage anxiety\\, reflect on identity-relat\r\n ed experiences\\, and address impostor feelings- along with other student-le\r\n d topics. The group also fosters moments of joy and connection as part of t\r\n he healing process.\\n\\nThis group is held on Thursdays 8:30-9:30 AM\\, start\r\n ing January 22\\, 2026. Meeting dates for winter quarter are 1/22\\; 1/29\\; 2\r\n /5\\; 2/12\\; 2/26\\; 3/5. Sessions are both virtual and in-person.  In-person\r\n  dates are 1/29\\; 2/12\\; 3/5.\\n\\nA meeting with a facilitator is required t\r\n o join this group. You can sign up on the on \"*INTEREST_LIST_SOM_Students_o\r\n f_Color_GROUP_WINTER_Q\" on the Vaden Portal rosters\\, in the \"Groups and Wo\r\n rkshops\" section. A facilitator will reach out to you to schedule a pre-gro\r\n up meeting.\\n\\nOpen to all registered BioSci PhD/MS\\, MSPA\\, and MD student\r\n s in the School of Medicine.Facilitated by Isela Garcia White\\, LCSW and Ma\r\n riko Sweetnam\\, LCSW\r\nDTEND:20260226T173000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T163000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:(School of Medicine) Students of Color Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51508879959526\r\nURL:https://events.stanford.edu/event/copy-of-school-of-medicine-students-o\r\n f-color-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52059394395993\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260226T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353489786\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382757033\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:hy have efforts to improve tax compliance in low-income countri\r\n es\\, especially in sub-Saharan Africa\\, failed? Existing policy and researc\r\n h ignore the central importance of non-state institutions in low-income cou\r\n ntries\\, which both mediate interactions between states and citizens and pr\r\n ovide governance in their own right. Can Social Intermediaries Build the St\r\n ate? presents a new theory of how non-state institutions shape tax collecti\r\n on and state-building. Drawing on a field experiment\\, qualitative work\\, a\r\n nd survey data from Lagos\\, Nigeria\\, the book argues that the strength of \r\n social intermediaries and their role in clientelistic exchange makes taxati\r\n on and state-building more difficult. \\n\\nABOUT THE SPEAKER\\n\\nAdrienne LeB\r\n as (PhD\\, Columbia University) joined American University's Department of G\r\n overnment in the fall of 2009. Prior to joining AU\\, LeBas was a Prize Rese\r\n arch Fellow at Nuffield College\\, University of Oxford\\, and Assistant Prof\r\n essor of Political Science and African Studies at Michigan State University\r\n . Her research interests include democratic institutions\\, political violen\r\n ce\\, and the rule of law. She is the author of the award-winning From Prote\r\n st to Parties: Party-Building and Democratization in Africa (Oxford Univers\r\n ity Press\\, 2011) and articles in the American Political Science Review\\, t\r\n he British Journal of Political Science\\, Comparative Political Studies\\, t\r\n he Journal of Democracy\\, and elsewhere. LeBas also worked as a consultant \r\n for Human Rights Watch in Zimbabwe\\, where she lived from 2002 to 2003.\\n\\n\r\n Dr. LeBas's research has been supported by grants from the EGAP Metaketa pr\r\n ogram\\, the Abdul Latif Jameel Poverty Action Lab (J-PAL)\\, the Harry Frank\r\n  Guggenheim Foundation\\, and the Department for International Development (\r\n UK)\\, among others. During the 2015-2016 academic year\\, LeBas was a reside\r\n ntial fellow at the Woodrow Wilson International Center for Scholars in Was\r\n hington\\, DC. She is currently working on her second solo-authored book\\, w\r\n hich investigates the reasons for persistent election violence in some demo\r\n cratizing countries. With Jessica Gottlieb of the University of Houston\\, s\r\n he is also writing a book on taxation and contradictory logics of state-bui\r\n lding in Lagos\\, Nigeria. In spring 2024\\, she is a visiting professor at S\r\n ciences Po's Centre de recherches internationales in Paris.\r\nDTEND:20260226T211500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Adrienne LeBas — Can Social Intermediaries Build the State? Taxatio\r\n n and State-Building in Lagos\\, Nigeria\r\nUID:tag:localist.com\\,2008:EventInstance_51808855528567\r\nURL:https://events.stanford.edu/event/adrienne-lebas-can-social-intermediar\r\n ies-build-the-state-taxation-and-state-building-in-lagos-nigeria\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561117025\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The combination of remote sensing\\, cloud data storage\\, and fa\r\n st data processing has revolutionized our ability to monitor and understand\r\n  earth surface processes. This revolution has transformed environmental sci\r\n ence\\, including the realm of hydrology. The U.S. Geological Survey (USGS)\\\r\n , the lead federal government agency for monitoring of US water resources\\,\r\n  has embraced these revolutionary technologies and is developing\\, producin\r\n g\\, and delivering a variety of remotely sensed hydrologic data. This prese\r\n ntation will describe USGS remote sensing hydrologic data and R&D efforts\\,\r\n  and will provide many secret passwords to access the data. (Just kidding\\,\r\n  they are all public URLs)\\n\\n \\n\\nSpeaker-suggested reading:     \\n\\nSusan\r\n  L. Ustin and Elizabeth McPhee Middleton\\, Review of earth observation sens\r\n ors/satellites (EOS): Current and Near-Term Earth-Observing Environmental S\r\n atellites\\, Their Missions\\, Characteristics\\, Instruments\\, and Applicatio\r\n ns\\, 2024\\, Sensors 24(11)\\, 3488\\; https://doi.org/10.3390/s24113488\r\nDTEND:20260226T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Geophysics Seminar - Jack Eggleston\\, \"Precision from Space: Monito\r\n ring Freshwater Resources at Scale\"\r\nUID:tag:localist.com\\,2008:EventInstance_52083509858814\r\nURL:https://events.stanford.edu/event/geophysics-seminar-jack-eggleston-pre\r\n cision-from-space-monitoring-freshwater-resources-at-scale\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Tanbūr and Iran’s Sonic Heritage: The Yarsan Ritual Tradition\\,\r\n  Myth\\, and Spirituality\\n\\nFebruary 23\\, 24\\, 25\\, and 26\\n\\nAcclaimed Ira\r\n nian musician Ali Akbar Moradi will teach four music workshops in Persian\\,\r\n  sponsored by the Iranian Studies Program and the Department of Music. Plea\r\n se RSVP to attend. Space is limited\\, priority is given to Stanford affilia\r\n tes. An instrument is not required to attend and learn but you may bring yo\r\n ur tanbūr if you have one. Guests will receive a confirmation email if they\r\n  are added to the workshop or have been added to the waitlist. Please only \r\n RSVP if you are sure you can attend. \\n\\nAli Akbar Moradi began playing the\r\n  tanbūr at the age of seven and learned not only the music but the Kurdish \r\n maqam repertoire. He has won awards\\, recorded several albums\\, and perform\r\n ed in Europe\\, the United States\\, and Canada with singers like Shahram Naz\r\n eri and at the Royal Festival Hall in London. In addition to teaching the t\r\n anbūr in Tehran and his hometown of Kermanshah\\, Ali Akbar is a dedicated s\r\n cholar of the tanbūr and continues to develop the legacy of the instrument \r\n and the regional Kurdish music.\\n\\nWorkshops coordinated by Ashkan Nazari\\,\r\n  a Stanford PhD student in ethnomusicology. \\n\\nSession One: Monday\\, Febru\r\n ary 23\\, 2:00-4:00\\n\\nA general introduction to the tanbūr\\, including:\\n\\n\r\n Its historical development\\, the etymology and meaning of the term tanbūr.M\r\n ajor categories of tanbūr maqāms\\; the tanbūr’s presence in Iran and in bro\r\n ader global contexts.The instrument’s range and the number of frets\\, the p\r\n rincipal structural components of the instrument.Plectra (mezrāb) and core \r\n performance techniques. The session concludes with instruction in one maqām\r\n .Session Two: Tuesday\\, February 24\\, 12:00-2:00\\n\\nThe tanbūr in relation \r\n to Yārsān religious tradition including:\\n\\nRitual narratives and accounts \r\n associated with specific tanbūr maqāmsRhythmic organization and ancient cyc\r\n lical patterns (adwār) within the tanbūr maqām repertoire.The session concl\r\n udes with instruction in one maqām.Session Three: Wednesday\\, February 25\\,\r\n  2:00-4:00\\n\\nThe tanbūr and the Shāhnāmeh\\, with attention to maqāms assoc\r\n iated with the epic tradition.The session concludes with instruction in one\r\n  maqām.Session Four: Thursday\\, February 26\\, 12:00-2:00\\n\\nA brief overvie\r\n w of Iran’s classical radīf tradition\\, with comparative attention to affin\r\n ities between selected tanbūr maqāms and particular gūsheh-s in the radīf r\r\n epertoire.Part of the Stanford Festival of Iranian Arts\\n\\nStanford is comm\r\n itted to ensuring its facilities\\, programs and services are accessible to \r\n everyone. To request access information and/or accommodations for this even\r\n t\\, please complete https://tinyurl.com/AccessStanford at the latest one we\r\n ek before the event.\r\nDTEND:20260226T220000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Iranian Music Workshops with Ali Akbar Moradi\r\nUID:tag:localist.com\\,2008:EventInstance_51995410185568\r\nURL:https://events.stanford.edu/event/iranian-music-workshops-with-ali-akba\r\n r-moradi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for a webinar about the medical specialty called pallia\r\n tive care\\, and learn about how it can help you live your best life when li\r\n ving with a difficult illness.\\n\\nHaving a serious illness can affect your \r\n life in many ways. Join one of these workshops to find out what you can do \r\n to manage the impact your illness has on your life.\\n\\nAt this event\\, the \r\n Stanford Palliative Care team will share ways to live your best life using \r\n a holistic\\, person-centered approach.\\n\\nDuring this workshop\\, the facili\r\n tator will talk about physical symptoms as well as emotional and spiritual \r\n well-being. You’ll also learn about the medical specialty\\, called palliati\r\n ve care\\, and how it can give you an extra level of support and improve you\r\n r quality of life.\r\nDTEND:20260226T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Living Your Best Life: How Palliative Care Can Improve Your Quality\r\n  of Life Webinar\r\nUID:tag:localist.com\\,2008:EventInstance_52128504979250\r\nURL:https://events.stanford.edu/event/living-your-best-life-how-palliative-\r\n care-can-improve-your-quality-of-life-webinar-7168\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260226T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:ReMS - Sanford Markowitz\\, MD\\, PhD\\, Ingalls Professor of Cancer G\r\n enetics\\, Case Western Reserve University \"15-PGDH is a Therapeutic Target \r\n for Tissue Protection and Regeneration in Multiple Organ Systems\"\r\nUID:tag:localist.com\\,2008:EventInstance_51518236610921\r\nURL:https://events.stanford.edu/event/rems-sanford-markowitz-md-phd-ingalls\r\n -professor-of-cancer-genetics-case-western-reserve-university-15-pgdh-is-a-\r\n therapeutic-target-for-tissue-protection-and-regeneration-in-multiple-organ\r\n -systems\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260226T201500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762174764\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Stanford Food Speaker Series\\n\\nAbout the Series:\\nThe Stanford\r\n  Food Speaker Series aims to engage\\, inform\\, and connect the Stanford com\r\n munity with innovations\\, policies\\, agendas\\, and insights from leading ex\r\n perts in food and agriculture. Current sponsoring partners include: Bio-X\\,\r\n  Food@Stanford\\, the Center on Food Security and the Environment\\, the Cent\r\n er for Ocean Solutions\\, the Center for Human and Planetary Health and the \r\n Sustainability Accelerator.\\n\\n \\n\\nStanford Bio-X Sponsored Seminar:\\n\\nTh\r\n e Future of Food – Cellular Agriculture\\n\\nDAVID KAPLAN\\, Stern Family Endo\r\n wed Professor of Bioengineering\\, Distinguished University Professor\\, and \r\n Professor\\, Department of Biomedical Engineering\\, Tufts University\\n\\nThe \r\n future of food refers to innovative and sustainable food products and ingre\r\n dients developed through biotechnology and advanced processing technologies\r\n . A revolution in food production is underway – via the use of plants\\, mic\r\n robes and animal cells in a biotechnology-related strategy to generate food\r\n s of the future. These foods are designed to address the most pressing chal\r\n lenges faced by the food industry and the planet today\\, including human\\, \r\n animal and environmental health. Cellular agriculture (cultivated meat\\, ce\r\n llular farming)\\, is a tissue-engineering approach to grow protein-rich foo\r\n ds with the potential to address these challenges. Progress in this field w\r\n ill be discussed to highlight the positive impacts\\, and the challenges ahe\r\n ad\\, to achieve impact with this emerging technology. This interdisciplinar\r\n y field has the potential to alter society from our most basic needs – food\r\n  – in ways that are now within our grasp as we enter a critical era in the \r\n transition towards more sustainable\\, efficient\\, and ethical food systems.\r\n \\n\\n \\n\\nLunch will be provided for attendees who register by Friday Feb. 2\r\n 0th\\, 2026.\\n\\nRegister Here by February 20\\, 2026\r\nDTEND:20260226T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:James H. Clark Center\\, Clark Center Seminar Room S360\r\nSEQUENCE:0\r\nSUMMARY:Stanford Food Speaker Series: The Future of Food – Cellular Agricul\r\n ture\r\nUID:tag:localist.com\\,2008:EventInstance_51577435489840\r\nURL:https://events.stanford.edu/event/foodspeakerserieskaplan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In what ways was Yiddish language marginalized and where did it\r\n  thrive among the refugees who moved to Mandatory Palestine after the war? \r\n What role did literature play in helping refugees bridge the trauma of the \r\n holocaust with the emerging Israeli state? Join literary scholar and cultur\r\n al historian\\, Shachar Pinsker to learn about how refugees navigated this n\r\n ew reality through literature and delve into his and Yael Chaver‘s new tran\r\n slation of a Yiddish novel from this period and the challenges they encount\r\n ered along the way.\\n\\nJoin this year's Clara Sumpf lecturer\\, Shachar Pins\r\n ker\\, for a day of scholarship.\\n\\n12:00 PM CCSRE Conference Room          \r\n                                                                            \r\n                                                            איבערזעצן יצחק פ\r\n ערלאוו'ס דזשבעליע -- Translating Yitzchok Perlov's Jebeliya  \\n\\nIn this wo\r\n rkshop\\, Yael Chaver and Shachar Pinsker will discuss their project of co-t\r\n ranslating Yitzchok Perlov's Jebeliya\\, originally published in Yiddish in \r\n 1954-1955. The English translation\\, supported by the Yiddish Book Center\\,\r\n  is forthcoming from White Goat Press. The speakers will discuss their tran\r\n slation approach by showcasing the linguistic and cultural challenges they \r\n encountered\\, with examples from the original Yiddish texts and their Engli\r\n sh translation. Lunch will be served.\\n\\n4:00 PM CCSRE Conference Room\\nThe\r\n  Vanguard of Their Peoples: Yiddish and Refugee Writing in Israel/Palestine\r\n \\n\\nThe lecture explores the vibrant yet marginalized world of Yiddish writ\r\n ing in Israel/Palestine. Drawing on Hannah Arendt’s concept of the refugee \r\n as a \"vanguard\\,\" Pinsker argues that Yiddish-speaking survivors (sheyres h\r\n apleyte) used their literature to navigate a unique subject position that b\r\n ridged the trauma of the Holocaust with the reality of 1948 in Israel/Pales\r\n tine. By analyzing Yiddish prose\\, poetry\\, and journalism\\, he shows how Y\r\n iddish writing between 1948 and 1967 created an affective map of displaceme\r\n nt and multidirectional memory\\, challenging nationalistic myths that remai\r\n n vital in our contemporary times of crisis.\r\nDTEND:20260226T213000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, Conference Room\r\nSEQUENCE:0\r\nSUMMARY:The Clara Sumpf Annual Lecture Series: Shachar Pinsker on Yiddish i\r\n n Israel Palestine\r\nUID:tag:localist.com\\,2008:EventInstance_52031399115574\r\nURL:https://events.stanford.edu/event/the-clara-sumpf-annual-lecture-series\r\n -shachar-pinsker-on-yiddish-in-israel-palestine\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Graduate School of Education and the IDEAS seminar present:\r\n  Education\\, Religion\\, and the Supreme Court\\n\\nREGISTER \\n\\nPlease join u\r\n s for a special event in the new Raikes Building at the GSE!\\n\\nThe Interdi\r\n sciplinary Dialogue in Education for Aspiring Scholars (IDEAS) seminar prov\r\n ides a space for interdisciplinary dialogues on key intellectual issues and\r\n  core questions in education from diverse perspectives. \\n\\nOver the past f\r\n ew years\\, the Supreme Court has handed down a number of rulings about reli\r\n gion that are poised to alter the landscape of American education. Join us \r\n in a conversation exploring how these rulings are reshaping American public\r\n  education and redefining the relationship between church and state.\\n\\nThu\r\n rsday\\, February 26\\n12 - 1pm\\nGraduate School of Education\\, Raikes Buildi\r\n ng\\, 4th Floor: Longview\\n507 Lasuen Mall\\, Stanford\\n\\nLunch provided! RSV\r\n P to confirm your preferences.\\n\\nSpeakers\\n\\n\\n\\nBernadette Meyler\\n\\nCarl\r\n  and Sheila Spaeth Professor of Law\\nAssociate Dean for Research and Intell\r\n ectual Life\\nStanford Law School\\n\\nBernadette Meyler\\, JD ’03 is a scholar\r\n  of British and American constitutional law and of law and the humanities. \r\n Her research and teaching bring together the sometimes surprisingly divided\r\n  fields of legal history and law and literature. She also examines the long\r\n  history of constitutionalism\\, reaching back into the English common law a\r\n ncestry of the U.S. Constitution\\, and explores the implications of this hi\r\n story for how the Constitution should be understood today. After receiving \r\n her BA in Literature with a focus on Classics at Harvard University\\, Profe\r\n ssor Meyler obtained her JD from Stanford Law School and completed a PhD in\r\n  English at UC\\, Irvine.\\n\\n\\n\\nJames A. Sonne\\n\\nProfessor of Law\\nDirecto\r\n r of the Religious Liberty Clinic\\nStanford Law School\\n\\nJim Sonne is a pr\r\n ofessor of law at Stanford Law School and founding director of its Religiou\r\n s Liberty Clinic\\, the leading and only full-time academic program in the c\r\n ountry where students can learn the practice and profession of law through \r\n supervised litigation in that field. He is an experienced and award-winning\r\n  teacher\\, practitioner\\, and scholar\\, with particular expertise in law an\r\n d religion issues. Sonne earned his BA with honors from Duke University and\r\n  his JD with honors from Harvard Law School.\\n\\nModerator\\n\\n\\n\\nAri Y. Kel\r\n man\\n\\nJim Joseph Professor of Education and Jewish Studies\\nStanford Gradu\r\n ate School of Education\\n\\nAri Kelman's research focuses on the forms and p\r\n ractices of religious knowledge transmission. He holds a specific research \r\n interest in American Jewry. In addition to leading the IDEAS seminar\\, Kelm\r\n an directs the Undergraduate Honors in Education Thesis Program at the GSE \r\n as well as other university roles. He received his BA in sociology from UC \r\n Santa Cruz and a PhD in American Studies from New York University. \\n\\n \\n\\\r\n nEvent image: NikVector/Shutterstock.com\r\nDTEND:20260226T210000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T200000Z\r\nGEO:37.425663;-122.168681\r\nLOCATION:Barnum\\, Raikes Building\\, 4th Floor\\, Longview\r\nSEQUENCE:0\r\nSUMMARY:The IDEAS seminar presents: Education\\, Religion\\, and the Supreme \r\n Court\r\nUID:tag:localist.com\\,2008:EventInstance_51810431694647\r\nURL:https://events.stanford.edu/event/the-ideas-seminar-presents-education-\r\n religion-and-the-supreme-court\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260226T204500Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794462996\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260226T230000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491607442\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:Equilibrium Particulate Exposure\\n\\nHow should we measure air q\r\n uality (co)benefits of environmental taxes? Taking a general equilibrium pe\r\n rspective\\, this paper argues that reductions in particulate emissions or c\r\n oncentrations are neither sufficient nor necessary to ensure reductions in \r\n population pollution exposure. First\\, we show empirically using global spa\r\n tially disaggregated panel data on ambient particulates and population that\r\n  countries' changes in particulate exposure can be substantially larger or \r\n smaller than their changes in concentrations. Second\\, we develop a macroec\r\n onomic integrated assessment model of particulate exposure for 30 countries\r\n  (representing 60% of world population) to evaluate the relevance of this p\r\n oint for policy. We find that both uncompensated oil taxes and agricultural\r\n  burning levies may unintentionally increase exposure despite decreasing ta\r\n rgeted activity emissions by shifting labor to dirtier sectors or locations\r\n . Third\\, we find that income support can mitigate these unintended consequ\r\n ences. Overall\\, our results demonstrate the importance of considering real\r\n location of population and production as part of environmental policy evalu\r\n ations.\\n\\nBio\\n\\nLint Barrage's research examines the macroeconomic and fi\r\n scal impacts of climate and energy transitions\\, and the role of new energy\r\n  technologies in these dynamics. Lint's work has been recognized by the Eur\r\n opean Association of Environmental and Resource Economists’ Award for Resea\r\n rchers in Environmental Economics under the Age of Forty.\r\nDTEND:20260226T223000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T211500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Global Environmental Policy Seminar with Lint Barrage\r\nUID:tag:localist.com\\,2008:EventInstance_50710394286607\r\nURL:https://events.stanford.edu/event/global-environmental-policy-seminar-w\r\n ith-lint-barrage\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Stanford graduate students and postdocs  - Join us on Thursday\\\r\n , February 26th between 2-4 p.m. to learn about resources and services avai\r\n lable for you as part of the Doerr school of Sustainability. Our campus par\r\n tners will be available as well so you can connect with a number of opportu\r\n nities and resources all in one space. \\n\\nLearn more about school resource\r\n s and services.\\n\\n*  Preparing for research travel? Come talk to Field and\r\n  Travel. \\n\\n*  Thinking about internships\\, interviews\\, or job applicatio\r\n ns? Come strategize wtih CareerEd and internship program managers. \\n\\n*  Q\r\n uestions about resources\\, services\\, and support? Connect with the Graduat\r\n e Life Office and others. \\n\\n*  Interested in becoming a mentor? Check out\r\n  2026 summer research and outreach programs. \\n\\nLook forward to seeing you\r\n  there!\r\nDTEND:20260227T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T220000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Center\r\nSEQUENCE:0\r\nSUMMARY:Stanford Doerr School of Sustainability Graduate Resource Fair \r\nUID:tag:localist.com\\,2008:EventInstance_51780971591020\r\nURL:https://events.stanford.edu/event/copy-of-stanford-doerr-school-of-sust\r\n ainability-graduate-resource-fair\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Offered by Counseling and Psychological Services (CAPS) and the\r\n  Graduate Life Office (GLO)\\, this is a six-session (virtual) group where y\r\n ou can vent\\, meet other graduate students like you\\, share goals and persp\r\n ectives on navigating common themes (isolation\\, motivation\\, relationships\r\n )\\, and learn some helpful coping skills to manage the stress of dissertati\r\n on writing.\\n\\nIf you’re enrolled this fall quarter\\, located inside the st\r\n ate of California\\, and in the process of writing (whether you are just sta\r\n rting\\, or approaching completion) please consider signing up.\\n\\nIdeal for\r\n  students who have already begun the dissertation writing process. All enro\r\n lled students are eligible to participate in CAPS groups and workshops. A g\r\n roup facilitator may contact you for a pre-group meeting prior to participa\r\n tion in Dissertation Support space.\\n\\nFacilitated by Cierra Whatley\\, PhD \r\n & Angela Estrella on Thursdays at 3pm-4pm\\; 2/5\\; 2/12\\; 2/19\\; 2/26\\; 3/5\\\r\n ; 3/12\\, virtualJoin at any point in the Quarter. Sign up on the Graduate L\r\n ife Office roster through this link.\r\nDTEND:20260227T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Dissertation Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51782991491006\r\nURL:https://events.stanford.edu/event/copy-of-dissertation-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are an Earth Systems major seeking a major advisor or a \r\n coterm student preparing to finalize your coterm advisor\\, we invite you to\r\n  join us for an informal hybrid information session. During this session\\, \r\n we will discuss how to choose an advisor\\, what to consider when reaching o\r\n ut to potential advisors\\, and answer any questions you may have about the \r\n process.\\n\\nDetails below:\\nWhen: Thursday\\, February 26 at 3:30 p.m.\\nWher\r\n e: Y2E2 155 and Zoom\r\nDTEND:20260227T000000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T233000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 131\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Program: Selecting an Advisor Info Session\r\nUID:tag:localist.com\\,2008:EventInstance_52154592233419\r\nURL:https://events.stanford.edu/event/earth-systems-program-selecting-an-ad\r\n visor-info-session\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Payne Lectureship is named for Frank E. Payne and Arthur W.\r\n  Payne\\, brothers who gained an appreciation for global problems through th\r\n eir international business operations. Their descendants endowed the annual\r\n  lecture series at the Freeman Spogli Institute for International Studies i\r\n n order to raise public understanding of the complex policy issues facing t\r\n he global community today and to increase support for informed internationa\r\n l cooperation.\\n\\nThe Payne Distinguished Lecturer is chosen for his or her\r\n  international reputation as a leader\\, with an emphasis on visionary think\r\n ing\\; a broad\\, practical grasp of a given field\\; and the capacity to clea\r\n rly articulate an important perspective on the global community and its cha\r\n llenges.\\n\\nAbout the event: Arms racing and future strategic stability ass\r\n essments are largely focused on moving from the Cold War paradigm of two nu\r\n clear powers – the US and Russia\\, to the likely new reality of three nucle\r\n ar peers – the US\\, Russia\\, and China.  However\\, there are technologies b\r\n eing matured that may be more important drivers of the new arms race than t\r\n he increase in the number of Chinese nuclear weapon systems.  Emerging capa\r\n bilities include adversary development of long-life and loitering delivery \r\n platforms\\, the US investment in Golden Dome and international improvements\r\n  in integrated air and missile defense\\, the rapid advancement of AI and au\r\n tonomous systems\\, and the potential resumption of nuclear testing.  These \r\n developments are as disruptive as the creation of intercontinental ballisti\r\n c missiles and nuclear-powered submarines in the 1950s and have the potenti\r\n al to drastically change the nuclear weapons landscape.  This talk will dis\r\n cuss the potential impact of these emerging technologies.\\n\\nAbout the spea\r\n ker: Jill Hruby served as the Under Secretary for Nuclear Security at the D\r\n epartment of Energy from 2021 to 2025. Prior to that\\, Hruby had a 34-year \r\n career at Sandia National Laboratories\\, retiring as the Director in 2017. \r\n Hruby was the inaugural Sam Nunn Distinguished Fellow at NTI. Currently\\, H\r\n ruby is on boards at Lawrence Livermore and the Atomic Weapon Establishment\r\n . She is a member of the Anthropic National Security Advisory Committee\\, t\r\n he National Academy Committee for International Security and Arms Control\\,\r\n  among other advisory roles. This quarter\\, she is the Payne Distinguished \r\n Lecturer at Stanford.\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260226T233000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Payne Distinguished Lecture | Today’s Nuclear Arms Race is Differen\r\n t\r\nUID:tag:localist.com\\,2008:EventInstance_51966951772025\r\nURL:https://events.stanford.edu/event/payne-distinguished-lecture-todays-nu\r\n clear-arms-race-is-different\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Department of Epidemiology and Population Health is proud t\r\n o present Flash Talks: AI Approaches in Population Health Research. This is\r\n  a free\\, live\\, in-person event. No reservation is required\\n\\nScalable\\, \r\n Transportable LLM Phenotyping: Smoking History Extraction and Multi-System \r\n EHR-Registry Linkage for Real- World Evidence\\nSummer Han\\, PhD\\nAssociate \r\n Professor (Research) of Neurosurgery\\, of Medicine (Biomedical Informatics)\r\n  and\\, by courtesy\\, of Epidemiology and Population Health\\n\\nAI-Driven Int\r\n egration of Maternal and Child Health\"\\nNima Aghaeepour\\, PhD\\nAnesthesiolo\r\n gy\\, Perioperative and Pain Medicine Professor and Professor of Pediatrics \r\n (Neonatology) and of Biomedical Data Science\\n\\nTitle TBD\\nJason Allen Frie\r\n s\\, PhD\\nAssistant Professor of BIomedical Data Science and of Medicine (BM\r\n IR)\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T000000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 240\\, 1021\r\nSEQUENCE:0\r\nSUMMARY:Flash Talks: AI Approaches in Population Health Research\r\nUID:tag:localist.com\\,2008:EventInstance_52057277252010\r\nURL:https://events.stanford.edu/event/flash-talks-ai-approaches-in-populati\r\n on-health-research\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:IT’S NOT ABOUT ME 101 (INAM 101)\\n\\nSheri Sheppard\\, Richard W.\r\n  Weiland Professor in the School of Engineering\\, Emerita\\n\\nJoin Professor\r\n  Sheppard for a unique workshop that explores a significant aspect of Stanf\r\n ord: education. Teaching is a crucial component of our mission as faculty a\r\n nd lecturers\\, but it serves as a means to an end rather than an end in its\r\n elf. Over her 39 years at Stanford\\, her understanding of that end (the dep\r\n endent variable) has evolved and matured.\\n\\nIn this workshop\\, you will di\r\n scover:\\n\\n Key concepts from the learning sciences that shift the focus to\r\n  the learner.Practical ideas for applying these concepts in the classroom\\,\r\n  including both successes and challenges.The broader utility of these conce\r\n pts beyond the classroom setting.This workshop is designed to be highly int\r\n eractive\\, featuring small-group activities that encourage you to map your \r\n personal teaching and learning experiences to larger educational principles\r\n  and dynamics. You’ll have an opportunity to share your stories while build\r\n ing a sense of community among attendees\\, including current and emeriti/ae\r\n  faculty and staff\\, CTL community members\\, MINT Fellows\\, Engr312 student\r\n s\\, UG mentors\\, and lecturers.\\n\\nExpect to participate in exercises such \r\n as “Think-Pair-Share” and storytelling that help you reflect on memorable l\r\n earning experiences. We will collectively gather good practices and identif\r\n y areas for improvement\\, fostering an environment of collaboration and sup\r\n port.\\n\\nHandouts\\, including a syllabus and worksheets\\, will be provided \r\n to enhance your experience\\, and the room will be set up with round tables \r\n to encourage discussion among groups of 6-8 people.\\n\\nWhile this format ma\r\n y feel unfamiliar to some\\, it is geared toward creating a vibrant and conn\r\n ected classroom experience. I encourage your participation for a rich\\, col\r\n laborative exchange of ideas that can inform our educational practices movi\r\n ng forward.\\n\\n \\n\\nMore about Sheri Sheppard\\n\\nSheri Sheppard has taught \r\n both undergraduate and graduate design-related classes\\, and conducted rese\r\n arch on fracture mechanics and applied finite element analysis\\, and on how\r\n  people become engineers. She previously served as a Senior Scholar at the \r\n Carnegie Foundation\\, where she led its national engineering study. Sheri h\r\n as co-led several major multi-institutional education initiatives\\, includi\r\n ng the Center for the Advancement of Engineering Education and the National\r\n  Center for Engineering Pathways to Innovation.\\n\\nShe has industry experie\r\n nce with Ford\\, General Motors\\, and Chrysler\\, and earned her bachelor's d\r\n egree from the University of Wisconsin and her PhD from the University of M\r\n ichigan. At Stanford\\, she has served as chair of the Faculty Senate\\, asso\r\n ciate vice provost for graduate education\\, and faculty founder and adviser\r\n  to MEwomen. Her contributions to engineering education and teaching have b\r\n een recognized with numerous awards\\, including the Walter J. Gores Award a\r\n nd ASEE’s Chester F. Carlson and Ralph Coats Roe Awards.\\n\\nCo-sponsored by\r\n  the Stanford Emeriti/ae Council and Center for Teaching and Learning\r\nDTEND:20260227T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T000000Z\r\nGEO:37.423953;-122.171824\r\nLOCATION:Faculty Club\\, Main Cedar\r\nSEQUENCE:0\r\nSUMMARY:Focus on Teaching: Award-Winning Teachers Reflect\r\nUID:tag:localist.com\\,2008:EventInstance_51757007295644\r\nURL:https://events.stanford.edu/event/focus-on-teaching-award-winning-teach\r\n ers-reflect\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Welcome to QTrees\\, a supportive and inclusive space designed s\r\n pecifically for queer Stanford students navigating their unique journeys.\\n\r\n \\nThis group during Winter quarter provides a safe\\, affirming environment \r\n where members can explore their LGBTQ+ identities\\, share experiences\\, and\r\n  find solidarity with others who understand their struggles and triumphs.\\n\r\n \\nQTrees will meet for 60 mins\\, weekly for 5 weeks\\, with the same people \r\n each week.Facilitated by Christine Catipon\\, PsyDAll enrolled students are \r\n eligible to participate in CAPS groups and workshops.Meeting with a facilit\r\n ator is required to join this group. You can sign up on the INTEREST LIST_Q\r\n Trees_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in the \"Groups and Works\r\n hops\" section. The location of the group will be provided upon completion o\r\n f the pre-group meeting with the facilitator.\r\nDTEND:20260227T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:QTrees\r\nUID:tag:localist.com\\,2008:EventInstance_51101143949388\r\nURL:https://events.stanford.edu/event/qtrees-4683\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The consensus that innovation drives American progress has crac\r\n ked. For over half a century innovation served as a universal good. While t\r\n he imperative to innovate for a better future continues to fuel systemic ch\r\n ange around the world\\, critics now assail innovation culture as an engine \r\n of inequality or accuse its do-gooders of woke groupthink. What happened? \\\r\n n\\nPlease RSVP at this link to attend.\\n\\nIn this book talk\\, the historian\r\n  Matt Wisnioski investigates how innovation—a once obscure academic term—be\r\n came ingrained in our institutions\\, our education\\, and our beliefs about \r\n ourselves. He reveals the central role of a new class of experts in spreadi\r\n ng toolkits and mindsets from the cornfields of 1940s Iowa to Silicon Valle\r\n y tech giants today. This group posited that “innovators” were society’s mo\r\n st important change agents and remade the nation in their image. The innova\r\n tion culture they built transcended partisan divisions and made strange bed\r\n fellows. Wisnioski will discuss how Kennedy-era policymakers inspired Presi\r\n dent Nixon’s dream of a Nobel Prize for innovators\\, how anti-military prof\r\n essors built the first university incubators for entrepreneurs\\, how radica\r\n l feminists became millionaire consultants\\, how demands for a rust belt ma\r\n nufacturing renaissance inspired theories of a global creative class\\, how \r\n philanthropic encouraged girls and minority children to pursue innovative l\r\n ives\\, and why the innovation consensus is now in dispute.\\n\\nWisnioski wil\r\n l be joined in conversation by Stanford's Elizabeth Kessler\\, an advanced l\r\n ecturer in the American Studies program who frequently offers courses on th\r\n e history of Silicon Valley.\\n\\nMatthew Wisnioski is an interdisciplinary h\r\n istorian of innovation\\, engineering\\, science education\\, and the nexus of\r\n  science\\, engineering\\, art\\, and design (SEAD). He teaches at Virginia Te\r\n ch University\\, where he serves as professor and director of graduate studi\r\n es in Science\\, Technology\\, and Society. He also hols affiliated appointme\r\n nts in History and Engineering Education. He is the author of Every America\r\n n an Innovator: How Innovation Became a Way of Life and Engineers for Chang\r\n e: Competing Visions of Technology in 1960s America\\, and co-editor with Er\r\n ic S. Hintz and Marie Stettler Kleine of Does America Need More Innovators?\r\n  He is writing a new book on The Magic School Bus and the history of scienc\r\n e education. His public writing has appeared in The Atlantic\\, Chronicle of\r\n  Higher Education\\, IEEE Spectrum\\, Medium\\, Science\\, and the Washington P\r\n ost.\\n\\nElizabeth Kessler is an Advanced Lecturer in the American Studies p\r\n rogram at Stanford. Her research and teaching focus on twentieth and twenty\r\n -first century American visual culture. Her diverse interests include: the \r\n role of aesthetics\\, visual culture\\, and media in modern and contemporary \r\n science\\, especially astronomy\\; the interchange between technology and way\r\n s of seeing and representing\\; the history of photography\\; and the represe\r\n ntation of fashion in different media. Her first book\\, Picturing the Cosmo\r\n s: Hubble Space Telescope Images and the Astronomical Sublime\\, on the aest\r\n hetics of deep space images\\, was published in 2012. She’s currently writin\r\n g on book on extraterrestrial time capsules\\, as well as developing a new p\r\n roject on fashion photography.\r\nDTEND:20260227T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T003000Z\r\nLOCATION:Green Library\r\nSEQUENCE:0\r\nSUMMARY:Book Event with Matt Wisnioski:  Beyond the Buzzword\\, a Critical H\r\n istory of “Innovation”\r\nUID:tag:localist.com\\,2008:EventInstance_51834446153386\r\nURL:https://events.stanford.edu/event/wisnioski-innovation-critical-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In what ways was Yiddish language marginalized and where did it\r\n  thrive among the refugees who moved to Mandatory Palestine after the war? \r\n What role did literature play in helping refugees bridge the trauma of the \r\n holocaust with the emerging Israeli state? Join literary scholar and cultur\r\n al historian\\, Shachar Pinsker to learn about how refugees navigated this n\r\n ew reality through literature and delve into his and Yael Chaver‘s new tran\r\n slation of a Yiddish novel from this period and the challenges they encount\r\n ered along the way.\\n\\nJoin this year's Clara Sumpf lecturer\\, Shachar Pins\r\n ker\\, for a day of scholarship.\\n\\n12:00 PM CCSRE Conference Room          \r\n                                                                            \r\n                                                            איבערזעצן יצחק פ\r\n ערלאוו'ס דזשבעליע -- Translating Yitzchok Perlov's Jebeliya  \\n\\nIn this wo\r\n rkshop\\, Yael Chaver and Shachar Pinsker will discuss their project of co-t\r\n ranslating Yitzchok Perlov's Jebeliya\\, originally published in Yiddish in \r\n 1954-1955. The English translation\\, supported by the Yiddish Book Center\\,\r\n  is forthcoming from White Goat Press. The speakers will discuss their tran\r\n slation approach by showcasing the linguistic and cultural challenges they \r\n encountered\\, with examples from the original Yiddish texts and their Engli\r\n sh translation. Lunch will be served.\\n\\n4:30 PM CCSRE Conference Room\\nThe\r\n  Vanguard of Their Peoples: Yiddish and Refugee Writing in Israel/Palestine\r\n \\n\\nThe lecture explores the vibrant yet marginalized world of Yiddish writ\r\n ing in Israel/Palestine. Drawing on Hannah Arendt’s concept of the refugee \r\n as a \"vanguard\\,\" Pinsker argues that Yiddish-speaking survivors (sheyres h\r\n apleyte) used their literature to navigate a unique subject position that b\r\n ridged the trauma of the Holocaust with the reality of 1948 in Israel/Pales\r\n tine. By analyzing Yiddish prose\\, poetry\\, and journalism\\, he shows how Y\r\n iddish writing between 1948 and 1967 created an affective map of displaceme\r\n nt and multidirectional memory\\, challenging nationalistic myths that remai\r\n n vital in our contemporary times of crisis.\r\nDTEND:20260227T013000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T003000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, Conference Room\r\nSEQUENCE:0\r\nSUMMARY:The Clara Sumpf Annual Lecture Series: Shachar Pinsker on Yiddish i\r\n n Israel Palestine\r\nUID:tag:localist.com\\,2008:EventInstance_52031415326393\r\nURL:https://events.stanford.edu/event/copy-of-the-clara-sumpf-annual-lectur\r\n e-series-shachar-pinsker-on-yiddish-in-israel-palestine\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Katherine Strausser\\, PhD\\nEkso Bionics\\nTechnical Lead\\, Exosk\r\n eletons\\n\\nAbstract: \"Robots once were a dream of the future\\, but they now\r\n  creep into all aspects of our lives\\, whether it be vacuuming our house or\r\n  exploring distant planets. Rehabilitation and mobility are no different. E\r\n xoskeletons can provide the motion and support that a user cannot\\, supplem\r\n enting or replacing their muscles to enable natural motion. These devices c\r\n an be used for mobility or for rehabilitation\\, but both uses come with cha\r\n llenges. I will discuss the design and control of robotic exoskeletons and \r\n the challenges faced when designing these devices.\"\\n\\nBiosketch: Katherine\r\n  Strausser holds a Bachelor's degree from Carnegie Mellon University and a \r\n Master's and PhD from the University of California\\, Berkeley. She was one \r\n of three primary inventors of Ekso 1\\, an electro-mechanical lower extremit\r\n y exoskeleton and is currently a senior controls engineer at Ekso Bionics w\r\n orking on control algorithms and software for various research efforts focu\r\n sing on the Human Machine Interface.\\n\\nPerspectives in Assistive Technolog\r\n y Course Website\\n\\nClassroom Loczation & Accessibility Information\\n\\nVisi\r\n t this website for more information\r\nDTEND:20260227T015000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T003000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, Classroom 282\r\nSEQUENCE:0\r\nSUMMARY:The Design and Control of Exoskeletons for Rehabilitation\r\nUID:tag:localist.com\\,2008:EventInstance_52188383017240\r\nURL:https://events.stanford.edu/event/the-design-and-control-of-exoskeleton\r\n s-for-rehabilitation-890\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening,Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Inspired by the spirit of Jamaican reggae legend\\, Bob Marley\\,\r\n  Bob Marley from Kodihalli explores the complex realities of Dalit youth na\r\n vigating urban India’s seemingly liberal yet deeply exclusionary spaces. Th\r\n rough a mix of Brechtian theatre and Kannada musical interludes\\, the play \r\n examines the burden and politics of identity in a caste-ridden society. (Sc\r\n reening of a recorded performance) The screening will be followed by an onl\r\n ine Q&A with the cast and crew: Bharath Dingri\\, Chandrashekara K\\, Lakshma\r\n n KP\\, Mariyamma Chudi\\, Shwetha Rani H K. Jangama Collective is a Bangalor\r\n e-based group of theatre artists with diverse cultural backgrounds who beli\r\n eve in creating cultural and political awareness choosing theatre as their \r\n way of expression. As an extension of this\\, the group has engaged itself i\r\n n creative processes like education\\, literature\\, publishing\\, cinema and \r\n social struggles. This event is hosted by the Caste\\, Culture\\, and Aesthet\r\n ics Global Humanities Research Workshop co-sponsored by Stanford Global Stu\r\n dies\\, the Stanford Humanities Center\\, and the Center For South Asia.\\n\\nP\r\n lease RSVP here. \\n\\nFor more information on the Caste\\, Culture\\, and Aest\r\n hetics Global Humanities Research Workshop\\, see here.\r\nDTEND:20260227T040000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T010000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, SHC Board Room\r\nSEQUENCE:0\r\nSUMMARY:Bob Marley From Kodihalli - A Play by Jangama Collective (Screening\r\n )\r\nUID:tag:localist.com\\,2008:EventInstance_52179923650504\r\nURL:https://events.stanford.edu/event/bob-marley-from-kodihalli-a-play-by-j\r\n angama-collective-screening\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:For Earth Systems Program undergrads & coterm students!\\n\\nHey \r\n there Earthsysters!\\n\\nHope you're all staying dry\\, and your wellness is s\r\n taying high! \\n\\nIf you're in need of a wellness pick-me-up\\, or just want \r\n to hang out with your fellow Earth Systems peers\\, come to our Earth System\r\n s Winter quarter wellness event– an after hours movie night!\\n\\nJoin us in \r\n the Earth Systems lounge for a 5:30pm movie start time on Thursday\\, Februa\r\n ry 26!\\n\\nSnacks and drinks will be provided\\; bring your own blanket/pillo\r\n w/sleeping bag and anything else to make your viewing experience comfortabl\r\n e.\\n\\nIf you have a movie suggestion\\, please drop it into this form: https\r\n ://forms.gle/YtprFVT5tXdXrbkt7\\n\\nHope to see everyone there for chill\\, co\r\n mfy winter vibes!\\n\\nYour Wellness Liaison\\,\\n\\nSophia\\n\\n \\n\\nSophia Sande\r\n rs (She/Her)\\n\\nStanford University\\n\\nCenter for Human and Planetary Healt\r\n h Communications\\n\\nB.S. Earth Systems '25 | Land Systems\\n\\nM.A. Earth Sys\r\n tems '26 | Environmental Communication\r\nDTEND:20260227T023000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T013000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 131\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Program: Movie Night\r\nUID:tag:localist.com\\,2008:EventInstance_52155619614495\r\nURL:https://events.stanford.edu/event/earth-systems-program-movie-night\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260227T020000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T013000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52081987133298\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Social Event/Reception\r\nDESCRIPTION:Interested in civic issues and the questions shaping public lif\r\n e today?\\n\\nJoin Stanford faculty and instructors for conversations that bu\r\n ild on the topics of COLLEGE 102. Civic Salons are open to all undergraduat\r\n e students\\, and refreshments are provided.\\n\\nSchedule:\\n\\nThursday\\, Janu\r\n ary 15\\, 6:00 p.m. at Castaño and CedroThursday\\, January 22\\, 6:00 p.m. at\r\n  Crothers and RobleThursday\\, January 29\\, 6:00 p.m. at Larkin and PotterTh\r\n ursday\\, February 5\\, 6:00 p.m. at Casa ZapataThursday\\, February 12\\, 6:00\r\n  p.m. at Robinson and West Florence MooreTuesday\\, February 17\\, 7:00 p.m. \r\n at DonnerThursday\\, February 26\\, 6:00 p.m. at Arroyo and PotterThursday\\, \r\n March 5\\, 6:00 p.m. at Trancos and West Florence Moore\r\nDTEND:20260227T030000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T020000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Civic Salons: Winter 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51785130947413\r\nURL:https://events.stanford.edu/event/civic-salons-winter-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for an artist talk by Mel Chin (born 1951\\, Hous\r\n ton\\, TX)\\, who employs a wide range of approaches\\, from unique\\, idiosync\r\n ratic objects to complex operations that require multidisciplinary collabor\r\n ation. Pairing the poetic with the pragmatic\\, Chin creates work that is no\r\n tably without a signature style to promote unpredictable aesthetics\\, takin\r\n g mutable strategies that intersect art\\, science\\, and activism.\\n\\nHis ta\r\n lk will touch on two works on view in the exhibition Dwelling at the Cantor\r\n : Revival Field Diorama (2015)\\, which stems from a 1990 project that pione\r\n ered the field of green remediation through the use of plants to remove tox\r\n ic heavy metals from soil\\; and Fan Club (1994)\\, which commemorates the te\r\n nth anniversary of Vincent Chin’s death through a baseball bat that has bee\r\n n transformed into a blood-stained fan\\, entangling national identity and r\r\n acial violence.\\n\\nIn 2017\\, Chin founded S.O.U.R.C.E. Studio to enlarge th\r\n e dialogue and realize sustained engagements with community and environment\r\n . His nationwide initiative\\, Fundred\\, gave tangible form and political va\r\n lue to the voices of 500\\,000 individuals opposing the conditions that give\r\n  rise to childhood lead-poisoning. His forty-year-survey exhibition at the \r\n Queens Museum was named by Hyperallergic as the best art exhibition of 2018\r\n . Chin is the recipient of many awards\\, grants\\, and honorary degrees\\, in\r\n cluding the MacArthur Fellowship and election into the American Academy of \r\n Arts and Letters.\\n\\nAll public programs at the Cantor Arts Center are alwa\r\n ys free! Space for this program is limited\\; advance registration is recomm\r\n ended. Those who have registered will have priority seating.\\n\\n \\n\\nImage:\r\n  Top: Mel Chin (American\\, born in 1951). Fan Club\\, 1994. Ash wood\\, blood\r\n  on Chinese silk\\, ink on paper. Cantor Arts Center Collection\\, Robert E. \r\n and Mary B. P. Gross Fund in support of the Asian American Art Initiative\\,\r\n  2025.6 / Bottom Left: Mel Chin headshot\\, photo credit: Miriam Heads / Bot\r\n tom Right: Pool of Light\\, 2024. Photo credit: Alex Marks\\n\\nRSVP here.\\n\\n\r\n ________\\n\\nParking\\n\\nFree visitor parking is available along Lomita Drive\r\n  as well as on the first floor of the Roth Way Garage Structure\\, located a\r\n t the corner of Campus Drive West and Roth Way at 345 Campus Drive\\, Stanfo\r\n rd\\, CA 94305. From the Palo Alto Caltrain station\\, the Cantor Arts Center\r\n  is about a 20-minute walk or the free Marguerite shuttle will bring you to\r\n  campus via the Y or X lines.\\n\\nDisability parking is located along Lomita\r\n  Drive near the main entrance of the Cantor Arts Center. Additional disabil\r\n ity parking is located on Museum Way and in Parking Structure 1 (Roth Way &\r\n  Campus Drive). Please click here to view the disability parking and access\r\n  points.\\n\\nAccessibility Information or Requests\\n\\nCantor Arts Center at \r\n Stanford University is committed to ensuring our programs are accessible to\r\n  everyone. To request access information and/or accommodations for this eve\r\n nt\\, please complete this form at least one week prior to the event: museum\r\n .stanford.edu/access.\\n\\nFor questions\\, please contact disability.access@s\r\n tanford.edu or Kwang-Mi Ro\\, kwangmi8@stanford.edu\\, (650) 723-3469.\\n\\nCon\r\n nect with the Cantor Arts Center! Subscribe to our mailing list and follow \r\n us on Instagram.\\n\\nPhoto: Miriam Heads\r\nDTEND:20260227T033000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T020000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, The John L. Eastman\\, '61 Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Mel Chin: A trace that will not fade\r\nUID:tag:localist.com\\,2008:EventInstance_51499543788318\r\nURL:https://events.stanford.edu/event/mel-chin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting,Social Event/Reception,Workshop,Other,Support Space\r\nDESCRIPTION:Join the PEERs for a cozy night of letter writing and rekindlin\r\n g relationships! Learn strategies to combat loneliness and make meaningful \r\n connections. First 20 attendees get a FREE stationary kit\\, 2 free drinks a\r\n t on Call Cafe\\, and a chance to win 2 tickets to Great America and the Cal\r\n ifornia Academy of Sciences!\\n\\nTime: 7-8pm\\n\\nLocation: Old Union Room 215\r\n \\n\\nPlease RSVP here to reserve your spot! We are looking forward to seeing\r\n  you there!\r\nDTEND:20260227T040000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T030000Z\r\nLOCATION:Old Union\\, Room #215\r\nSEQUENCE:0\r\nSUMMARY:Letter Writing Night\r\nUID:tag:localist.com\\,2008:EventInstance_52153972810897\r\nURL:https://events.stanford.edu/event/letter-writing-night\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:By Max Frisch | Translation by Alistair Beaton | Tickets on Sal\r\n e FEB 11\\n\\nThere have been a lot of fires lately. Whole neighborhoods are \r\n burning down! But surely this strange pair who just arrived has nothing to \r\n do with any of it. Surely if we give them a place to sleep upstairs and fee\r\n d them well\\, they won’t disturb our peace and quiet! Even if they are arso\r\n nists—even if\\, in fact\\, they tell us that they are—surely\\, they will rem\r\n ember that we’re their friends! And we’ll be safe! Let’s just try and get s\r\n ome sleep\\, despite all the noise up there.\\n\\nWhat’s a good citizen to do \r\n when potentially destructive thugs are suddenly sleeping in your attic\\, ho\r\n arding gasoline and looking for matches? Join us to find out in The Arsonis\r\n ts—a physical\\, hilarious\\, and painfully timely “morality play without a m\r\n oral.” \\n\\nMax Frisch's The Arsonists premiered as “Beidermann and the Fire\r\n bugs\\,” a radio-play\\, in 1953 and was adapted for the stage in 1958.\r\nDTEND:20260227T060000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T040000Z\r\nGEO:37.429245;-122.166216\r\nLOCATION:Pigott Theater\\, North Entrance\r\nSEQUENCE:0\r\nSUMMARY:MAIN STAGE | \"The Arsonists\" \r\nUID:tag:localist.com\\,2008:EventInstance_51941312587288\r\nURL:https://events.stanford.edu/event/the-arsonists\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260227\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Application deadline for Winter Quarter degree conferral (5 p.m.)\r\nUID:tag:localist.com\\,2008:EventInstance_49463457906529\r\nURL:https://events.stanford.edu/event/application-deadline-for-winter-quart\r\n er-degree-conferral-5-pm-1476\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260227\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294339998\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260227\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355504103\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260227\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353968184\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grading basis changes\\, except f\r\n or GSB courses (which is earlier).\r\nDTSTAMP:20260308T083908Z\r\nDTSTART;VALUE=DATE:20260227\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Change of Grading Basis Deadline (Except GSB)\r\nUID:tag:localist.com\\,2008:EventInstance_50472522392372\r\nURL:https://events.stanford.edu/event/winter-quarter-change-of-grading-basi\r\n s-deadline-except-gsb-6411\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260228T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T160000Z\r\nGEO:37.445593;-122.162327\r\nLOCATION:Fidelity Office Palo Alto CA\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Fidelity Office in Palo Alto) (\r\n By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525144687035\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-fidelity-office-in-palo-alto-by-appointment-only-1908\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260228T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910817472\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260227T180000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353490811\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260228T010000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382759082\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This workshop offers an insight into chronicles as a central fo\r\n rm of medieval historiography. Using examples from the Stanford collections\r\n \\, different types of chronicles are presented\\, with a focus on German-lan\r\n guage world chronicles and city chronicles. Concrete examples are used to s\r\n how how chronicles combine very heterogeneous fields of knowledge\\, such as\r\n  biblical history\\, historical world events\\, local events\\, and ancient my\r\n thology. In this way\\, the workshop also provides insights into the underst\r\n anding of history in the Middle Ages\\, in which historical events are not o\r\n nly documented but are contextualized within Christian history of salvation\r\n .\\n\\nA special focus is placed on working with original materials: particip\r\n ants will have the opportunity to examine various chronicles up close. Thes\r\n e include copies of the famous Schedelsche Weltchronik or Nuremberg Chronic\r\n le (1493)\\, one of the most important printed works of the late 15th centur\r\n y.\\n\\nProf. Margit Dahm is Assistant Professor of Early German Literature o\r\n f the High and Late Middle Ages in the Department of Early German Literatur\r\n e at Kiel University.\r\nDTEND:20260227T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T180000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Hohbach 123\r\nSEQUENCE:0\r\nSUMMARY:Medieval German Chronicles: Workshop with Prof. Margit Dahm (Kiel U\r\n niversity)\r\nUID:tag:localist.com\\,2008:EventInstance_52187935790604\r\nURL:https://events.stanford.edu/event/medieval-german-chronicles-workshop-w\r\n ith-prof-margit-dahm-kiel-university\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:PhD Defense\r\nDESCRIPTION:Abstract\\nSeismometers continuously record ground motion. Signa\r\n ls from natural hazards\\, such as earthquakes and volcanic eruptions\\, howe\r\n ver\\, contribute only a small portion of seismograms. The rest is the so-ca\r\n lled seismic ambient noise. The same concept also applies to infrasound dat\r\n a\\, which record pressure fluctuations at the surface. In fact\\, these ambi\r\n ent signals reflect the evolution of natural processes and can contribute t\r\n o a rich dataset for environmental studies.\\n\\nMy dissertation analyzes sig\r\n natures in ambient seismoacoustic signals associated with two atmospheric p\r\n henomena: hurricane boundary-layer turbulence and tropospheric inertia-grav\r\n ity waves. These analyses are made possible by the rich data recorded by th\r\n e Transportable Array\\, a nationwide multi-instrument seismic station netwo\r\n rk. I explain how we can leverage the advantages of this seismic station ne\r\n twork to complement atmospheric observations.\\n\\nIn the first part\\, I expl\r\n ain the turbulent seismoacoustic imprints during the landfall of Hurricane \r\n Isaac at the Gulf Coast in August 2012 through an interdisciplinary modelin\r\n g framework. It combines large-eddy simulation of hurricane boundary layer \r\n turbulence with the subsequent quasi-static elastic response of the ground.\r\n  I further present the use of infrasound data as a proxy for near-surface w\r\n ind speed and its application to measure from pressure spectra the turbulen\r\n t dissipation rate\\, an important turbulent statistic parameterized in hurr\r\n icane models. These complement land-based in situ hurricane observations fr\r\n om portable wind towers and weather stations.\\n\\nIn the second part\\, I sea\r\n rch for signals of tropospheric inertia-gravity waves\\, i.e.\\, long-period \r\n atmospheric internal gravity waves in the troposphere\\, using four years of\r\n  barometric pressure data from the Transportable Array. I develop workflows\r\n  based on array processing techniques to identify coherent signals among st\r\n ation triads and measure their apparent horizontal phase velocity. The data\r\n base contains ~70\\,000 measurements of wave parameters at station triads. I\r\n t shows higher wave activity during winter\\, and the dominant eastward prop\r\n agation direction is linked to the influence of background winds. Observati\r\n on of these mesoscale waves can contribute to high-resolution datasets for \r\n meteorological studies.\r\nDTEND:20260227T200000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T190000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Geophysics PhD Defense\\, Qing Ji: \"Atmospheric signatures in ambien\r\n t seismoacoustic signals\"\r\nUID:tag:localist.com\\,2008:EventInstance_52137086640453\r\nURL:https://events.stanford.edu/event/geophysics-phd-defense-qing-ji-atmosp\r\n heric-signatures-in-ambient-seismoacoustic-signals\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260227T203000Z\r\nDTSTAMP:20260308T083908Z\r\nDTSTART:20260227T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699825334\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Talk description:\\n\\nIn the 3rd book of his Letters\\, Pliny pos\r\n es as the ideal consul\\, equally concerned for the well-being of the Empire\r\n  and his friends\\, and for the old and new generations. My talk explores so\r\n me literary strategies whereby Pliny aligns himself as consul to great cons\r\n uls and writers from the past\\, like Elder Cato and Cicero. Pliny's style a\r\n nd intertextual engagement with his predecessors invite a comparison and el\r\n icit some reflections on the evolution of Latin literature\\, the call for s\r\n ervice to the state and the joys of otium.\\n\\nShort Bio:\\n\\nLuca Grillo is \r\n Professor of Latin Literature and Chair of the Department of Classics and A\r\n rabic at the University of Notre Dame. Luca's research interests range from\r\n  Latin and Greek Language and Literature to Historiography and Rhetoric\\, R\r\n oman History\\, Augustan Poetry and Numismatics\\, with various books\\, artic\r\n les and essays on Caesar\\, Cicero\\, Sallust\\, the Roman economy\\, Virgil\\, \r\n Lucilius and the Rhetorica ad Herennium. Luca is currently co-editing a vol\r\n ume on Rhetoric and Historiography and finishing a monograph on Irony in La\r\n tin Literature.\\n\\nThis talk will not be recorded and will not be available\r\n  on Zoom.\r\nDTEND:20260227T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nGEO:37.427985;-122.170551\r\nLOCATION:Building 110\\, 112\r\nSEQUENCE:0\r\nSUMMARY:Classics Friday Talk Featuring Professor Luca Grillo (Notre Dame) \"\r\n Consular Literature: Cato\\, Cicero\\, Pliny and the Joys of otium\"\r\nUID:tag:localist.com\\,2008:EventInstance_51569830822514\r\nURL:https://events.stanford.edu/event/classics-friday-talk-featuring-profes\r\n sor-luca-grillo-notre-dame\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260228T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561118050\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:We’re excited to invite you to our Advising Meet & Greet Series\r\n !\\n\\nJoin us on Friday\\, February 27th from 12:00–2:00 PM in Y2E2 131 to co\r\n nnect with faculty and meet potential major advisors in a relaxed\\, informa\r\n l setting.\\n\\nFaculty in attendance include:\\nTadashi Fukami\\nScott Fendorf\r\n \\nSteve Davis\\nAnthony Kovscek\\n\\nThis is a great opportunity to ask questi\r\n ons\\, explore research interests\\, and build relationships with professors \r\n you may be considering as your major advisor.\\n\\n🍕 Pizza will be provided f\r\n rom Pizza My Heart\\nTo help us create a more sustainable event\\, please RSV\r\n P:\\n👉 https://docs.google.com/forms/d/e/1FAIpQLScgpBNJhW_ODwAXh0od5ZctkVZO8\r\n brloypTMYjQaUh62ZMjoQ/viewform?usp=dialog\\n\\nWe hope to see you there!\r\nDTEND:20260227T220000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 131\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Program: Advising Meet & Greet Series\r\nUID:tag:localist.com\\,2008:EventInstance_52154253707737\r\nURL:https://events.stanford.edu/event/earth-systems-program-advising-meet-g\r\n reet-series\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Please join us for a lecture on the legacy of the Soviet past i\r\n n Putin’s Russia with Nina Tumarkin\\, Kathryn Wasserman Davis Professor of \r\n Slavic Studies\\, Professor of History and Director of the Russian Area Stud\r\n ies Program at Wellesley College. \\n\\nPlease RSVP here.\\n\\nNina Tumarkin is\r\n  Kathryn Wasserman Davis Professor of Slavic Studies\\, Professor of History\r\n  and Director of the Russian Area Studies Program at Wellesley College\\, an\r\n d Center Associate at the Davis Center for Russian and Eurasian Studies at \r\n Harvard University. Her current book project on the politics of the past in\r\n  Putin’s Russia builds on her previous books\\, The Living and the Dead: The\r\n  Rise and Fall of the Cult of World War II in Russia (Basic Books) and Leni\r\n n Lives! The Lenin Cult in Soviet Russia (Harvard University Press). Her pa\r\n st career has also included the role of advisor to President Ronald Reagan\\\r\n , for whom she wrote two invited papers and served as one of six Soviet exp\r\n erts who briefed the President\\, Vice-President\\, and key cabinet members o\r\n n the eve of Mr. Reagan’s historic first meeting with Mikhail Gorbachev in \r\n November 1985 at the Geneva Summit. In 1995 President Bill Clinton read Pro\r\n fessor Tumarkin’s book\\, The Living and the Dead\\, in preparation for his V\r\n ictory Day visit to Moscow.\r\nDTEND:20260227T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Rm. 123\r\nSEQUENCE:0\r\nSUMMARY:Lenin and Stalin: Memory\\, Symbol\\, or Meme?\r\nUID:tag:localist.com\\,2008:EventInstance_51896714688891\r\nURL:https://events.stanford.edu/event/lenin-and-stalin-memory-symbol-or-mem\r\n e\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Isha Jain\\, PhD\\nAssociate Professor\\, Department of Biochemist\r\n ry and Biophysics\\, University of California\\, San Francisco\\n\\n\"Turning th\r\n e Oxygen and Vitamin Dials\"\r\nDTEND:20260227T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, B302\r\nSEQUENCE:0\r\nSUMMARY:NORC Friday Seminar - Isha Jain\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_51626850306526\r\nURL:https://events.stanford.edu/event/norc-friday-seminar-isha-jain-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:PhD Defense\r\nDESCRIPTION:Through the growth of compute power\\, high-fidelity simulations\r\n  have become increasingly accessible and gained widespread adoption in acad\r\n emics and industry. Understanding physical phenomena\\, prediction and other\r\n  design stages rely heavily on CFD. The cornerstone of these numerical simu\r\n lations is the efficient use of parallel\\, distributed algorithms\\, often t\r\n uned to hardware specific microarchitectures for maximum performance. To le\r\n verage regular data indexing for faster memory access and    optimized layo\r\n ut\\, structured multiblock grids arise as a natural choice. Combined with c\r\n urvilinear transformations\\, this topological framework enhances solver fid\r\n elity by allowing for precise control over mesh density in critical regions\r\n \\, while maintaining the flexibility to resolve complex geometries.\r\nDTEND:20260227T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Room 113\r\nSEQUENCE:0\r\nSUMMARY:PhD Defense Alboreno Voci \"High-Speed Reactive Flow Simulations on \r\n Exascale Systems: Applications to Rocket Combustors\"\r\nUID:tag:localist.com\\,2008:EventInstance_52135500028063\r\nURL:https://events.stanford.edu/event/phd-defense-alboreno-voci-high-speed-\r\n reactive-flow-simulations-on-exascale-systems-applications-to-rocket-combus\r\n tors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Diabetes is a major public health concern that\\, if left unmana\r\n ged\\, can lead to serious complications such as heart disease\\, kidney dama\r\n ge\\, and nerve issues. However\\, with the right lifestyle choices\\, many ca\r\n ses of type 2 diabetes can be delayed or even prevented.\\n\\nJoin us for an \r\n informative lunchtime webinar to gain a clearer understanding of prediabete\r\n s and diabetes and learn practical steps to lower your risk. We’ll explain \r\n how these conditions develop\\, their impact on the body\\, and why early det\r\n ection is crucial. We will explore key concepts such as blood sugar regulat\r\n ion\\, insulin function\\, and common risk factors. More importantly\\, we’ll \r\n focus on actionable lifestyle changes—including healthy eating\\, physical a\r\n ctivity\\, and stress management—that can help prevent or manage diabetes.\\n\r\n \\nWhether you have a family history of diabetes\\, are concerned about your \r\n own risk\\, or simply want to make healthier choices\\, this session will pro\r\n vide valuable insights and practical strategies to support long-term well-b\r\n eing.\\n\\nThis class will be recorded and a one-week link to the recording w\r\n ill be shared with all registered participants. To receive incentive points\r\n \\, attend at least 80% of the live session or listen to the entire recordin\r\n g within one week.  Request disability accommodations and access info.\\n\\nC\r\n lass details are subject to change.\r\nDTEND:20260227T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Understanding Prediabetes and Diabetes\r\nUID:tag:localist.com\\,2008:EventInstance_51388530971373\r\nURL:https://events.stanford.edu/event/understanding-prediabetes-and-diabete\r\n s\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join a virtual event with filmmaker\\, educator\\, and Stanford E\r\n arth Systems Lecturer E’Jaaz Mason for a conversation that blends history\\,\r\n  storytelling\\, and lived experience to explore New Orleans\\, Hurricane Kat\r\n rina\\, and the potential of community-centered recovery. \\n\\nZoom Virtual M\r\n eeting\\nFriday\\, February 27\\, 2026\\n12:30 pm – 1:30 pm \\nPresentation foll\r\n owed by Q&A Session\\nRegister here: tinyurl.com/StanfordBHMRSVP\\n\\nIn his t\r\n alk\\, Mason will trace the city’s history — from Indigenous roots\\, cultura\r\n l resilience\\, inequality\\, and environmental risk — and connect it to his \r\n own family’s journey through Katrina’s aftermath\\, including the lasting im\r\n pacts on mental health and economic opportunity. Mason will share his journ\r\n ey as a cinematographer and personal storyteller on the HBO/Max documentary\r\n  Katrina Babies (2022) and how this experience shaped his path into filmmak\r\n ing\\, teaching\\, and social impact work. Attendees will leave with a deeper\r\n  appreciation for lived experience\\, resilience\\, and the value of equity-c\r\n entered\\, community-rooted approaches to care and engagement. Open to all S\r\n tanford affiliates\\, with particular relevance for staff working in public \r\n health\\, environmental justice\\, health equity\\, mental health\\, urban stud\r\n ies\\, community partnerships\\, storytelling\\, and disaster preparedness\\, a\r\n mong others.\\n\\nThis event is sponsored by the Black Staff Alliance and the\r\n  DOM Culture and Community Building Team\\n\\nLearn more about E’Jaaz’s work \r\n here.\r\nDTEND:20260227T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T203000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Black History Month Virtual Event | From Katrina Babies to Stanford\r\n : A Conversation with E’Jaaz Mason\r\nUID:tag:localist.com\\,2008:EventInstance_52197947930631\r\nURL:https://events.stanford.edu/event/black-history-month-virtual-event-fro\r\n m-katrina-babies-to-stanford-a-conversation-with-ejaaz-mason\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260227T220000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T203000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Cello Students of Christopher Costanza\r\nUID:tag:localist.com\\,2008:EventInstance_51463216560236\r\nURL:https://events.stanford.edu/event/noon-costanza-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:The Asian American Activities Center (A3C) will be hosting a Fa\r\n mily Weekend Open House! We would love for you and your family to come meet\r\n  our team\\, see the A3C\\, and enjoy light refreshments. Throughout the afte\r\n rnoon\\, you’ll be able to visit interactive program stations\\, participate \r\n in a fun scavenger hunt with a raffle prize\\, and learn more about the hist\r\n ory and resources of the A3C.\\n\\nAll Stanford students and Stanford familie\r\n s are welcome to attend. We will have a community reception and student exh\r\n ibition from 1-2:30 PM\\, and all families are welcome to drop-in throughout\r\n  1-5 PM. We look forward to meeting and getting to know you.\\n\\nPlease reac\r\n h out to our Major Events Coordinator\\, Angela Zhang (angiezha@stanford.edu\r\n )\\, if you have any questions!\r\nDTEND:20260228T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T210000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, 2nd Floor\\, Club House\r\nSEQUENCE:0\r\nSUMMARY:Asian American Activities Center Open House Event \r\nUID:tag:localist.com\\,2008:EventInstance_52199050180033\r\nURL:https://events.stanford.edu/event/asian-american-activities-center-open\r\n -house-event\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:How can energy access in African cities move toward systems tha\r\n t support local agency and equity?\\n\\nJoin us in conversation with MICHAEL \r\n JORDAN\\, Visiting Policy Fellow\\, Woods Institute\\, RWAIDA GHARIB\\, Former \r\n Strategic Communications Lead: Power Africa and PhD student in Environment \r\n & Resources.\\n\\nModerated by: Dr. Dena Montague\\, Environmental Justice Lec\r\n turer in the Earth Systems Program.\r\nDTEND:20260227T220000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T210000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 305\r\nSEQUENCE:0\r\nSUMMARY:Building African Cities\r\nUID:tag:localist.com\\,2008:EventInstance_52154173989648\r\nURL:https://events.stanford.edu/event/building-african-cities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Bring your family and friends to The Office of Student Engageme\r\n nt Open House on Friday\\, February 27 from 1-5pm. Our office is located in \r\n Old Union\\, 2nd floor\\, suite 206. Come learn about what the OSE does to su\r\n pport student life on campus from student clubs\\, to the Peer facilitation \r\n program\\, to Cardinal Nights. Participate in some painting\\, take a family \r\n photo\\, and enjoy light snacks! \\n\\nRSVP on Partiful\r\nDTEND:20260228T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T210000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, Suite 206\r\nSEQUENCE:0\r\nSUMMARY:OSE Open House \r\nUID:tag:localist.com\\,2008:EventInstance_52146247908789\r\nURL:https://events.stanford.edu/event/ose-open-house\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The experience of OCD (Obsessive Compulsive Disorder) can be is\r\n olating and stressful.\\n\\nThis is an open and ongoing group for students wh\r\n o live with OCD to support each other and have a safe space to connect. The\r\n  group will focus on providing mutual support\\, sharing wisdom\\, increasing\r\n  self-compassion\\, and enhancing overall coping and wellness.\\n\\nMeeting wi\r\n th a facilitator is required to join this group. You can sign up on the INT\r\n EREST LIST_LIVING_WITH_OCD_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in \r\n the \"Groups and Workshops\" section. This group will take place in-person on\r\n  Fridays from 3-4pm on 1/23\\; 1/30\\; 2/6\\; 2/13\\; 2/20\\; 2/27\\; 3/6\\; 3/13.\r\n Facilitated by Jennifer Maldonado\\, LCSWAll enrolled students are eligible \r\n to participate in CAPS groups and workshops. A pre-group meeting is require\r\n d prior to participation in this group. Please contact CAPS at (650) 723-37\r\n 85 to schedule a pre-group meeting with the facilitators\\, or sign up on th\r\n e portal as instructed above.\r\nDTEND:20260228T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260227T230000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Living with OCD\r\nUID:tag:localist.com\\,2008:EventInstance_51782951095594\r\nURL:https://events.stanford.edu/event/copy-of-living-with-ocd-3482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:This event - an 89-minute “happening” - explores the democratic\r\n  possibilities that emerge when we create and improvise together. Percussio\r\n n duo Joey Baron and Robyn Schulkowsky blend their jazz and avant-garde wit\r\n h an interdisciplinary ensemble of Stanford scholars - Nilam Ram (Psycholog\r\n y)\\, Chris Chafe (Music)\\, Fred Turner (Communication) and their colleagues\r\n  - to create a space where sound\\, silence\\, history of social movements\\, \r\n presentation of science\\, and expression of culture develop in fellowship a\r\n nd mutual action - to listen\\, to shape\\, to change...\\n\\nReserve a spot an\r\n d learn more here!\r\nDTEND:20260228T030000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T020000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, S40\r\nSEQUENCE:0\r\nSUMMARY:The Democracy of Sound\r\nUID:tag:localist.com\\,2008:EventInstance_52005978450157\r\nURL:https://events.stanford.edu/event/data-democracy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Stanford Society of the Archaeological Institute of America\r\n  welcomes Dr. Shannon M. Dunn for a public lecture that explores the border\r\n  zones of Ancient Greece. \\n\\nThe boundary zones between ancient Greek city\r\n -states were landscapes where many “marginal” or fraught activities could p\r\n otentially occur — from adolescent initiation rites to military conflict — \r\n but also where daily life mostly happened as usual for shepherds\\, beekeepe\r\n rs\\, and many settlements situated close to the borders. Sanctuaries locate\r\n d in border zones have long been considered in scholarship as assertions of\r\n  central polis ownership over distant territory\\, where they were sometimes\r\n  used as boundary landmarks. The first half of this talk considers the imme\r\n diate landscapes of border sanctuaries across the Peloponnese\\, and the com\r\n munities which they served — whether as cult locales for local populations\\\r\n , meeting places for communities across borders\\, or as pilgrimage sites fo\r\n r visitors from poleis near and far\\, even if in mountainous or seemingly r\r\n emote locations. Different expressions of border zone religious life will b\r\n e presented from across the Archaic to Roman eras\\, considering the physica\r\n l environment and topography\\, associated myths\\, political histories\\, and\r\n  material evidence for cult practices. The second half of the talk will foc\r\n us on one border town at the edge of Lakonia and Arkadia\\, and how the anci\r\n ent landmarks\\, cult practices\\, and myths associated with this religious b\r\n order zone have affected modern life and identity in the area.\r\nDTEND:20260228T040000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T030000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\\, 106\r\nSEQUENCE:0\r\nSUMMARY:Cairns to Caryatids: Sanctuaries at Territorial Borders in the Anci\r\n ent Greek Peloponnese\r\nUID:tag:localist.com\\,2008:EventInstance_52055538341090\r\nURL:https://events.stanford.edu/event/cairns-to-caryatids-sanctuaries-at-te\r\n rritorial-borders-in-the-ancient-greek-peloponnese\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Young Choreographers Festival (YCF) is an opportunity for e\r\n merging choreographers to create new work with the support and mentorship o\r\n f Stanford TAPS Faculty. Now in its third rendition\\, YCF continues to upli\r\n ft the voices of Stanford’s student choreographers. We invite you to celebr\r\n ate these young choreographers and the premiere of their new works at the c\r\n ulminating performance!\\n\\nGet Reminders\\n\\nThis Year's Choreographers:\\n\\n\r\n Isabela BeineMaxine Rose Carlisle & Héloïse GarryEdward Chen & Mia ClarkAnu\r\n sha Dwarkanath & Shreya KomarSelin ErtanDakota GelmanRobert IgbokweKendall \r\n JohnsonElle McCueMichael OhayonRogers Mathews & Keira RideoutDenise Robinso\r\n nSamuel TongFelix Zhan\r\nDTEND:20260228T043000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T030000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, Big Studio 113\r\nSEQUENCE:0\r\nSUMMARY:PERFORMANCE | Young Choreographers Festival\r\nUID:tag:localist.com\\,2008:EventInstance_51773370895775\r\nURL:https://events.stanford.edu/event/ycf-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Philharmonia\\, conducted by John Eells\\, presents \r\n their 2026 Winter Concert program from the main stage of Bing Concert Hall.\r\n \\n\\nProgram\\n\\nManuel de Falla – El Amor Brujo SuiteFranz Schubert – Sympho\r\n ny No. 3 in D MajorWolfgang Amadeus Mozart – Symphony No. 41 in C Major\\, “\r\n Jupiter”\\n Admission Information \\n\\nGeneral – $37 | Seniors (65+) and Non-\r\n Stanford Students – $32\\nPrice shown reflects total cost including $4 onlin\r\n e/phone per-ticket fee.FREE admission for Stanford University students. One\r\n  ticket per ID\\, available beginning one hour prior to curtain at the venue\r\n .This event will be livestreamed.\r\nDTEND:20260228T050000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T033000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Philharmonia\r\nUID:tag:localist.com\\,2008:EventInstance_51464264557537\r\nURL:https://events.stanford.edu/event/philharmonia-winter2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:By Max Frisch | Translation by Alistair Beaton | Tickets on Sal\r\n e FEB 11\\n\\nThere have been a lot of fires lately. Whole neighborhoods are \r\n burning down! But surely this strange pair who just arrived has nothing to \r\n do with any of it. Surely if we give them a place to sleep upstairs and fee\r\n d them well\\, they won’t disturb our peace and quiet! Even if they are arso\r\n nists—even if\\, in fact\\, they tell us that they are—surely\\, they will rem\r\n ember that we’re their friends! And we’ll be safe! Let’s just try and get s\r\n ome sleep\\, despite all the noise up there.\\n\\nWhat’s a good citizen to do \r\n when potentially destructive thugs are suddenly sleeping in your attic\\, ho\r\n arding gasoline and looking for matches? Join us to find out in The Arsonis\r\n ts—a physical\\, hilarious\\, and painfully timely “morality play without a m\r\n oral.” \\n\\nMax Frisch's The Arsonists premiered as “Beidermann and the Fire\r\n bugs\\,” a radio-play\\, in 1953 and was adapted for the stage in 1958.\r\nDTEND:20260228T060000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T040000Z\r\nGEO:37.429245;-122.166216\r\nLOCATION:Pigott Theater\\, North Entrance\r\nSEQUENCE:0\r\nSUMMARY:MAIN STAGE | \"The Arsonists\" \r\nUID:tag:localist.com\\,2008:EventInstance_51941312588313\r\nURL:https://events.stanford.edu/event/the-arsonists\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260228\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294341023\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260228\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355505128\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260228\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353969209\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260301T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910818497\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:In this online class\\, you will learn breathing techniques to i\r\n ncrease energy\\, enhance concentration\\, cultivate connection to yourself a\r\n nd others\\, create relaxation\\, and deepen sleep. Over two Saturday morning\r\n s\\, we will explore the science of breath and the specific benefits of a va\r\n riety of practices including diaphragmatic breathing\\, warming versus cooli\r\n ng techniques\\, and calming and centering skills.\\n\\nThrough group practice\r\n  and individual instruction\\, you will discover the benefits of a variety o\r\n f breathing practices and learn how best to incorporate them into your dail\r\n y life. You will also create a personal action plan for more effective brea\r\n thing that you can use to develop an ongoing practice for health and well-b\r\n eing.\\n\\nThis class will not be recorded. Attendance requirement for incent\r\n ive points - at least 80% of both sessions.  Request disability accommodati\r\n ons and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260228T200000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Art and Science of Breathing (February 28 - March 7)\r\nUID:tag:localist.com\\,2008:EventInstance_51388531036915\r\nURL:https://events.stanford.edu/event/the-art-and-science-of-breathing-febr\r\n uary-28-march-7\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260228T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353491836\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260228T193000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T173000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078569396\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260228T200000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802449151\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260228T203000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699826359\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260228T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691950876\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260228T220000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682827666\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260228T233000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708317967\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport,Social Event/Reception\r\nDESCRIPTION:Don't miss Stanford Men's Basketball's Senior Day against SMU!\\\r\n n\\nUse promo code FAMILY15 at checkout to save 15% on seats to the final ho\r\n me game of the regular season!\r\nDTEND:20260301T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T230000Z\r\nGEO:37.429623;-122.160633\r\nLOCATION:Maples Pavilion\r\nSEQUENCE:0\r\nSUMMARY:Men's Basketball vs. SMU\r\nUID:tag:localist.com\\,2008:EventInstance_52065084127353\r\nURL:https://events.stanford.edu/event/mens-basketball-vs-smu\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260301T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260228T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668837876\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for an evening of music with Maestro Ali Akbar Moradi\\,\r\n  joined by Arash Moradi\\, Mehdi Bagheri\\, and Kourosh Moradi. Doors open at\r\n  6:15pm.\\n\\nABOUT THE MUSICIANS\\n\\nAli Akbar Moradi began playing the tanbo\r\n ur at the age of seven and learned not only the music but the Kurdish maqam\r\n  repertoire. He has won awards\\, recorded several albums\\, and performed in\r\n  Europe\\, the United States\\, and Canada with singers like Shahram Nazeri a\r\n nd at the Royal Festival Hall in London. In addition to teaching the tanbou\r\n r in Tehran and his hometown of Kermanshah\\, Ali Akbar is a dedicated schol\r\n ar of the tanbour and continues to develop the legacy of the instrument and\r\n  the regional Kurdish music.\\n\\nArash Moradi is the eldest son of Aliakbar \r\n Moradi. Arash started learning tanbūr at an early age from his father whom \r\n he later accompanied in numerous concert and festivals throughout Iran and \r\n Europe. Arash lives in London where he teaches tanbūr\\, runs workshops on P\r\n ersian and Kurdish music and collaborates with musicians from around the wo\r\n rld.\\n\\nMehdi Bagheri has become one of the most renowned practitioners of \r\n the Persian kamancheh of his generation. A composer and multi-instrumentali\r\n st born in Kermanshah\\, Kurdish provinces in Iran. Mehdi received his maste\r\n r’s degree from the Arak University in 2004\\, studying with luminaries of t\r\n raditional Iranian music\\, while simultaneously pursuing a degree in dramat\r\n ic theater. He has performed at festivals worldwide and continues to pursue\r\n  his work in various fields such as music of the film\\, eclectic music and \r\n Iranian classical music inside Iran and abroad.\\n\\nKourosh Moradi studied t\r\n anbour with his father\\, Ali Akbar Moradi\\, studied daf with master Sufis o\r\n f the Yarsan Order and tombak with Master Hamid Moghadam while growing up i\r\n n Kurdistan. Kourosh has recorded and performed around the world continuing\r\n  the family legacy of the tanbour with many esteemed masters of Kurdish/Ira\r\n nian music. He continues to perform in conjunction with his father and carr\r\n y on the family legacy of sharing the music with audiences around the world\r\n . He now lives and teaches in Southern California.\\n\\nAdmission Information\r\n \\n\\nFree admission\\, please register here.\r\nDTEND:20260301T041500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T030000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Lamentations and Dance: Songs for the Children of Kaveh Ahangar\r\nUID:tag:localist.com\\,2008:EventInstance_51463493666433\r\nURL:https://events.stanford.edu/event/ali-akbar-moradi\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for an evening of music with Maestro Ali Akbar Moradi\\,\r\n  joined by Arash Moradi\\, Mehdi Bagheri\\, and Kourosh Moradi.\\n\\nDoors open\r\n  6:15 pm\\, concert begins at 7:00 pm.  If you are on the waitlist\\, you are\r\n  welcome to join the standby line at the venue for any remaining unclaimed \r\n seats by 6:50 pm.\\n\\nAbout the Musicians\\n\\nAli Akbar Moradi began playing \r\n the tanbour at the age of seven and learned not only the music but the Kurd\r\n ish maqam repertoire. He has won awards\\, recorded several albums\\, and per\r\n formed in Europe\\, the United States\\, and Canada with singers like Shahram\r\n  Nazeri and at the Royal Festival Hall in London. In addition to teaching t\r\n he tanbour in Tehran and his hometown of Kermanshah\\, Ali Akbar is a dedica\r\n ted scholar of the tanbour and continues to develop the legacy of the instr\r\n ument and the regional Kurdish music.\\n\\nArash Moradi is the eldest son of \r\n Aliakbar Moradi. Arash started learning tanbūr at an early age from his fat\r\n her whom he later accompanied in numerous concert and festivals throughout \r\n Iran and Europe. Arash lives in London where he teaches tanbūr\\, runs works\r\n hops on Persian and Kurdish music and collaborates with musicians from arou\r\n nd the world.\\n\\nMehdi Bagheri has become one of the most renowned practiti\r\n oners of the Persian kamancheh of his generation. A composer and multi-inst\r\n rumentalist born in Kermanshah\\, Kurdish provinces in Iran. Mehdi received \r\n his master’s degree from the Arak University in 2004\\, studying with lumina\r\n ries of traditional Iranian music\\, while simultaneously pursuing a degree \r\n in dramatic theater. He has performed at festivals worldwide and continues \r\n to pursue his work in various fields such as music of the film\\, eclectic m\r\n usic and Iranian classical music inside Iran and abroad.\\n\\nKourosh Moradi \r\n studied tanbour with his father\\, Ali Akbar Moradi\\, studied daf with maste\r\n r Sufis of the Yarsan Order and tombak with Master Hamid Moghadam while gro\r\n wing up in Kurdistan. Kourosh has recorded and performed around the world c\r\n ontinuing the family legacy of the tanbour with many esteemed masters of Ku\r\n rdish/Iranian music. He continues to perform in conjunction with his father\r\n  and carry on the family legacy of sharing the music with audiences around \r\n the world. He now lives and teaches in Southern California.\\n\\nCoordinated \r\n by Ashkan Nazari\\, a Stanford PhD student in ethnomusicology. \\n\\nPart of t\r\n he Stanford Festival of Iranian Arts\\n\\nStanford is committed to ensuring i\r\n ts facilities\\, programs and services are accessible to everyone. To reques\r\n t access information and/or accommodations for this event\\, please complete\r\n  https://tinyurl.com/AccessStanford at the latest one week before the event\r\n .\r\nDTEND:20260301T041500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T030000Z\r\nLOCATION:In person at Stanford\r\nSEQUENCE:0\r\nSUMMARY:Lamentations and Dance: Songs for the Children of Kaveh Ahangar\r\nUID:tag:localist.com\\,2008:EventInstance_51763801542643\r\nURL:https://events.stanford.edu/event/Children-of-Kaveh-Ahangar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join the Stanford Wind Symphony\\, conducted by Giancarlo Aquila\r\n nti\\, for an inspiring evening celebrating African American music\\, featuri\r\n ng Omar Thomas’s Come Sunday and Mark Camphouse’s A Movement for Rosa\\, alo\r\n ngside Philip Sparke’s vibrant Dance Movements and the world premiere of Ri\r\n chard Aldag’s …and the Wind Danced.\\n\\nAdmission Information\\n\\nGeneral – $\r\n 37 | Seniors (65+) and Non-Stanford Students – $32\\nPrice shown reflects to\r\n tal cost including $4 online/phone per-ticket fee.FREE admission for Stanfo\r\n rd University students. One ticket per ID\\, available beginning one hour pr\r\n ior to curtain at the venue.This event will be livestreamed.\r\nDTEND:20260301T050000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T033000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Wind Symphony\r\nUID:tag:localist.com\\,2008:EventInstance_51464564897159\r\nURL:https://events.stanford.edu/event/wind-symphony-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:By Max Frisch | Translation by Alistair Beaton | Tickets on Sal\r\n e FEB 11\\n\\nThere have been a lot of fires lately. Whole neighborhoods are \r\n burning down! But surely this strange pair who just arrived has nothing to \r\n do with any of it. Surely if we give them a place to sleep upstairs and fee\r\n d them well\\, they won’t disturb our peace and quiet! Even if they are arso\r\n nists—even if\\, in fact\\, they tell us that they are—surely\\, they will rem\r\n ember that we’re their friends! And we’ll be safe! Let’s just try and get s\r\n ome sleep\\, despite all the noise up there.\\n\\nWhat’s a good citizen to do \r\n when potentially destructive thugs are suddenly sleeping in your attic\\, ho\r\n arding gasoline and looking for matches? Join us to find out in The Arsonis\r\n ts—a physical\\, hilarious\\, and painfully timely “morality play without a m\r\n oral.” \\n\\nMax Frisch's The Arsonists premiered as “Beidermann and the Fire\r\n bugs\\,” a radio-play\\, in 1953 and was adapted for the stage in 1958.\r\nDTEND:20260301T060000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T040000Z\r\nGEO:37.429245;-122.166216\r\nLOCATION:Pigott Theater\\, North Entrance\r\nSEQUENCE:0\r\nSUMMARY:MAIN STAGE | \"The Arsonists\" \r\nUID:tag:localist.com\\,2008:EventInstance_51941312589338\r\nURL:https://events.stanford.edu/event/the-arsonists\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260301\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294342048\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260301\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355507177\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260301\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353970234\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260302T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910819522\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260301T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353492861\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260301T200000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T190000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809523567\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Season of Lent: Lent is the forty-day period (excluding Sundays\r\n ) of prayer\\, repentance and self-denial that precedes Easter.\\n\\nUniversit\r\n y Public Worship gathers weekly for the religious\\, spiritual\\, ethical\\, a\r\n nd moral formation of the Stanford community. Rooted in the history and pro\r\n gressive Christian tradition of Stanford’s historic Memorial Church\\, we cu\r\n ltivate a community of compassion and belonging through ecumenical Christia\r\n n worship and occasional multifaith celebrations.\r\nDTEND:20260301T200000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Season of Lent Ecumenical Christian Serv\r\n ice \r\nUID:tag:localist.com\\,2008:EventInstance_51958449962438\r\nURL:https://events.stanford.edu/event/upw-lent-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Abstraction as Agency: Salt and Resist Watercolor Painting with\r\n  Rachelle Reichert invites participants to explore Alteronce Gumby’s painti\r\n ngs through the lens of material agency and the cosmos. Led by local artist\r\n  Rachelle Reichert\\, the workshop considers raw materials as active collabo\r\n rators in the art-making process. Participants will experiment with salt an\r\n d resist watercolor techniques to create their own vibrant\\, process-based \r\n paintings.\\n\\nThe workshop is open to Stanford Students only. If you are a \r\n member of the public or Stanford Community\\, please RSVP for this session.\\\r\n n\\nRSVP Here! \\n\\nRachelle Reichert is a visual artist whose work explores \r\n the intersections of environment\\, history\\, and the global economy through\r\n  terrestrial materials. Working with harvested salt and earth\\, she creates\r\n  multimedia works that consider landscape as a living record of human prese\r\n nce and geological time. Her geometric forms draw on lunar symbology and sa\r\n lt crystallization\\, creating a dialogue between the celestial and the terr\r\n estrial. Reichert’s work has been exhibited at major institutions including\r\n  the Autry (Getty PST)\\, the Contemporary Jewish Museum\\, and the Center fo\r\n r Contemporary Art at PNCA. Her research is archived at the Nevada Museum o\r\n f Art’s Center for Art + Environment and SFMOMA\\, and her work is held in c\r\n orporate collections such as Google and Meta\\, with coverage in Architectur\r\n al Digest\\, the San Francisco Chronicle\\, and New American Paintings.\r\nDTEND:20260301T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Abstraction as Agency: Salt and Resist Watercolor Painting with Rac\r\n helle Reichert - STUDENTS ONLY\r\nUID:tag:localist.com\\,2008:EventInstance_52021638309521\r\nURL:https://events.stanford.edu/event/abstraction-as-agency-salt-and-resist\r\n -watercolor-painting-with-rachelle-reichert-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260301T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691952925\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260301T220000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682828691\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Welcome to Sankofa Sunday: University Praise & Worship at Stanf\r\n ord! The history of Black Church at Stanford dates back to 1989 when severa\r\n l students and the then Associate Dean Rev. Floyd Thompkins formed a worshi\r\n pping community to meet the spiritual and cultural yearnings of the Black C\r\n ommunity at Stanford. After a robust History the service was discontinued u\r\n ntil 2022 when the need once again led by students and staff began to reviv\r\n e Black Church as an occasional service once a month.\r\nDTEND:20260301T223000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T213000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Sankofa Sundays: University Praise & Worship\r\nUID:tag:localist.com\\,2008:EventInstance_51826194848034\r\nURL:https://events.stanford.edu/event/sankofa-sundays-university-praise-wor\r\n ship\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260301T233000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T220000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740368395\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Abstraction as Agency: Salt and Resist Watercolor Painting with\r\n  Rachelle Reichert invites participants to explore Alteronce Gumby’s painti\r\n ngs through the lens of material agency and the cosmos. Led by local artist\r\n  Rachelle Reichert\\, the workshop considers raw materials as active collabo\r\n rators in the art-making process. Participants will experiment with salt an\r\n d resist watercolor techniques to create their own vibrant\\, process-based \r\n paintings.\\n\\nThe workshop is open to visitors ages 12 and up.\\n\\nRSVP Here\r\n ! \\n\\nRachelle Reichert is a visual artist whose work explores the intersec\r\n tions of environment\\, history\\, and the global economy through terrestrial\r\n  materials. Working with harvested salt and earth\\, she creates multimedia \r\n works that consider landscape as a living record of human presence and geol\r\n ogical time. Her geometric forms draw on lunar symbology and salt crystalli\r\n zation\\, creating a dialogue between the celestial and the terrestrial. Rei\r\n chert’s work has been exhibited at major institutions including the Autry (\r\n Getty PST)\\, the Contemporary Jewish Museum\\, and the Center for Contempora\r\n ry Art at PNCA. Her research is archived at the Nevada Museum of Art’s Cent\r\n er for Art + Environment and SFMOMA\\, and her work is held in corporate col\r\n lections such as Google and Meta\\, with coverage in Architectural Digest\\, \r\n the San Francisco Chronicle\\, and New American Paintings.\r\nDTEND:20260302T003000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Abstraction as Agency: Salt and Resist Watercolor Painting with Rac\r\n helle Reichert\r\nUID:tag:localist.com\\,2008:EventInstance_51959786430346\r\nURL:https://events.stanford.edu/event/abstraction-as-agency-salt-and-resist\r\n -watercolor-painting-with-artist-rachelle-reichert\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260301T233000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708320016\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Chamber Chorale\\, under the direction of Stephen M\r\n . Sano\\, presents a very special afternoon of choral music prepared for a m\r\n ajor recording project: Gabriel Fauré’s Requiem (1893 version)\\, plus Eric \r\n Tuan’s six gorgeous wedding anthems composed for Chorale alumni weddings. A\r\n long with orchestra\\, featured will be the Hauptwerk organ in Bing Concert \r\n Hall using the Aristide Cavaillé-Coll organ from The Abbey of St. Etienne\\,\r\n  Caen for Fauré’s Requiem and the William Hill organ from Peterborough Cath\r\n edral for Tuan’s Love never fails.\\n\\nAdmission Information \\n\\nGeneral – $\r\n 37 | Seniors (65+) and Non-Stanford Students – $32\\nPrice shown reflects to\r\n tal cost including $4 online/phone per-ticket fee.FREE admission for Stanfo\r\n rd University students. One ticket per ID\\, available beginning one hour pr\r\n ior to curtain at the venue.This event will be livestreamed.\r\nDTEND:20260302T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T223000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Chamber Chorale: Changing Chapters\r\nUID:tag:localist.com\\,2008:EventInstance_51463442301687\r\nURL:https://events.stanford.edu/event/chamber-chorale-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260302T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260301T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668838901\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Cello Choir\\, under the direction of Artist in Res\r\n idence Christopher Costanza\\, performs a range of works composed specifical\r\n ly for cello ensemble as well as creative arrangements of well-known pieces\r\n .\\n\\nAdmission Information\\n\\nFree admission.\r\nDTEND:20260302T043000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T030000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cello Choir Winter Concert\r\nUID:tag:localist.com\\,2008:EventInstance_51825056156050\r\nURL:https://events.stanford.edu/event/stanford-cello-choir-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for a special reading concert featuring new works by St\r\n anford Undergraduate Composers performed by talented guest artists Tori Hau\r\n k\\, flute\\; Anna Presler\\, violin\\; Christopher Froh\\, vibraphone\\; Eric Wh\r\n itmer\\, marimba\\; and conducted by Matilda Hofman.\\n\\nAdmission Information\r\n \\n\\nFree admission\r\nDTEND:20260302T050000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T033000Z\r\nGEO:37.421012;-122.172383\r\nLOCATION:The Knoll\\, CCRMA Stage\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Composers Winter Concert\r\nUID:tag:localist.com\\,2008:EventInstance_51463311057812\r\nURL:https://events.stanford.edu/event/ug-composers-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260302\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249799096\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260302\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grade rosters open for Winter quarter.\r\nUID:tag:localist.com\\,2008:EventInstance_49463496330598\r\nURL:https://events.stanford.edu/event/grade-rosters-open-for-winter-quarter\r\n -8891\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260302\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353971259\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the grade roster opens for the current quarter.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260302\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Grade Rosters Open\r\nUID:tag:localist.com\\,2008:EventInstance_50472522603335\r\nURL:https://events.stanford.edu/event/winter-quarter-grade-rosters-open-980\r\n 1\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260303T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51525207552996\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-9747\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260303T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910819523\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260302T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353492862\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260303T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382762155\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260303T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561119075\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:From evidence to action — Jenna Forsyth shares her interdiscipl\r\n inary research on reducing global lead exposure at the source.\\n\\nJoin the \r\n Stanford Center for Innovation in Global Health and Stanford Center for Hum\r\n an and Planetary Health for this Global Health Winter Research Spotlight fe\r\n aturing Jenna Forsyth\\, PhD\\, Director of Project Unleaded at the Stanford \r\n Center for Human and Planetary Health\\, who will present her research on re\r\n ducing lead exposure worldwide.\\n\\nDetails:\\nLocation: Huang\\, 475 Via Orte\r\n ga\\, Room 305\\n\\nDate: March 2\\, 2026\\n\\nTime: 12-1pm\\n\\nLunch: Will be ser\r\n ved!\\n\\nAbout Jenna Forsyth:\\nJenna Forsyth\\, PhD\\, is an interdisciplinary\r\n  environmental health scientist. She has focused on lead exposure research \r\n for 10 years and currently oversees the research portfolio for Project Unle\r\n aded - an initiative to identify and mitigate priority sources of lead pois\r\n oning globally\\, with an emphasis in South Asia. Based on her team’s discov\r\n ery and effort to address lead poisoning from turmeric in Bangladesh\\, she \r\n was named one of the 100 most influential people in Global Health by Time M\r\n agazine in 2024.\\n\\nPrior to studying lead contamination and poisoning\\, sh\r\n e spent nearly 10 years addressing global and environmental health problems\r\n  from contaminants in the air\\, water\\, soil\\, and food. She works at the i\r\n nterface of environmental science\\, epidemiology\\, and behavior change — de\r\n veloping and evaluating interventions to reduce exposures to contaminants a\r\n nd disease vectors\\, particularly in low-income countries.\\n\\nHer work has \r\n been featured in The Economist\\, The Washington Post\\, Vox\\, The Scientist\\\r\n , Undark\\, Think Global Health\\, Environmental Health News\\, Stanford Medic\r\n ine\\, Effective Altruism and other outlets.\\n\\nShe holds a PhD in Environme\r\n nt and Resources from Stanford University and a Master’s of Science in Engi\r\n neering and Certificate in Global Health from the University of Washington.\r\n \\n\\nAcross campus\\, she is affiliated with the Doerr School of Sustainabili\r\n ty\\, Woods Institute for the Environment\\, Center for Human and Planetary H\r\n ealth\\, Center for Innovation in Global Health\\, King Center on Global Deve\r\n lopment\\, and the Maternal and Child Health Research Institute.\r\nDTEND:20260302T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T200000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 305\r\nSEQUENCE:0\r\nSUMMARY:Global Health Winter Research Spotlight with Jenna Forsyth\r\nUID:tag:localist.com\\,2008:EventInstance_51809984338731\r\nURL:https://events.stanford.edu/event/global-health-winter-research-spotlig\r\n ht-with-jenna-forsyth\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition,Social Event/Reception\r\nDESCRIPTION:Join Conservation Services from Stanford University Libraries f\r\n or a pop-up exhibition and open house featuring conservation work on materi\r\n als from Special Collections. A variety of materials from medieval manuscri\r\n pts to bespoke protective enclosures will be on display\\, and Conservation \r\n staff will be around to talk about their roles in keeping the library's phy\r\n sical collection in usable condition for future generations of Stanford stu\r\n dents\\, faculty\\, and researchers.\\n\\nConservation Services staff care for \r\n rare and unique materials from Special Collections and Locked Stacks\\, with\r\n  core expertise in paper-based collections including books\\, manuscripts\\, \r\n unbound items like maps and posters. Conservation staff also provide guidan\r\n ce on photographs\\, objects\\, and the full spectrum of materials found in a\r\n n archival collection. In a typical year\\, Conservation staff complete appr\r\n oximately 700 treatments and produce over 1\\,100 storage enclosures. Their \r\n work draws on experience  with a wide variety of materials in varying condi\r\n tions as well as a strong understanding of how things have been made across\r\n  centuries to ensure long-term preservation and accessibility of SUL collec\r\n tions.\\n\\nDrop by Hobach Hall 123 (Silicon Valley Archive classroom\\, Green\r\n  Library) anytime between 2-4pm on Monday\\, March 2nd to chat with conserva\r\n tion staff and see how conservation work impacts Special Collections materi\r\n als.\r\nDTEND:20260303T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260302T220000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Hobach Hall 123\r\nSEQUENCE:0\r\nSUMMARY:Stanford University Libraries Conservation Open House\r\nUID:tag:localist.com\\,2008:EventInstance_52144976090913\r\nURL:https://events.stanford.edu/event/stanford-university-libraries-conserv\r\n ation-open-house\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260303T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T000000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, Clark Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Biology Seminar Series: Heather Pinkett “Understanding ABC Transpor\r\n ters: From Molecular Mechanisms to Disease”\r\nUID:tag:localist.com\\,2008:EventInstance_51524850111305\r\nURL:https://events.stanford.edu/event/biology-seminar-series-heather-pinket\r\n t-understanding-abc-transporters-from-molecular-mechanisms-to-disease\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:film showing and discussion of We Were Here: The Untold Story o\r\n f Black Africans in Renaissance Europe on Monday\\, March 2\\, 4:30 - 6pm\\, f\r\n ollowed by a small reception (6-6:30 in the History lounge) for Director Fr\r\n ed Kuwornu.\r\nDTEND:20260303T020000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 200\\, History Corner\\, 305\r\nSEQUENCE:0\r\nSUMMARY:We Were Here: The Untold Story of Black Africans in Renaissance Eur\r\n ope Film Showing\r\nUID:tag:localist.com\\,2008:EventInstance_52188982923741\r\nURL:https://events.stanford.edu/event/we-were-here-the-untold-story-of-blac\r\n k-africans-in-renaissance-europe-film-showing\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260303T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T013000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430654319\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting,Workshop,Other\r\nDESCRIPTION:Sign-Up for our FREE Naloxone Trainings facilitated by PEERs an\r\n d in collaboration with the Well House. \\n\\nWhat is Naloxone (NARCAN)?\\n\\nN\r\n ALOXONE is a potentially lifesaving medication designed to help reverse the\r\n  effects of an opioid overdose in minutes. Since most opioid overdoses occu\r\n r in the home and are most often witnessed\\, having a NALOXONE rescue kit n\r\n earby can make all the difference. Upon completing the training\\, you will \r\n be able to leave with your own box of Free Naloxone. You can find our list \r\n of workshop dates below:\\n\\nMonday\\, March 2\\, 2025 (7-8pm)If you want to r\r\n equest another time and location for my group/organization please fill out \r\n this interest form.RSVP Here! Drop-ins are also welcome but RSVP helps us k\r\n now how much Naloxone to bring.\\n\\nFree naloxone will be provided for atten\r\n dees following the training.Drop ins welcome!Open to ALL Stanford Affiliate\r\n s (students\\, faculty\\, staff\\, etc.) Learn more about the Opioid Epidemic \r\n and walk away with the ability to save a life!\\n\\nIf you have any questions\r\n  about this event or want to request a Naloxone training please contact us \r\n at peerprogram@stanford.edu\r\nDTEND:20260303T040000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T030000Z\r\nGEO:37.421896;-122.169177\r\nLOCATION: The Well House\\, Lobby 562 Mayfield Ave\\, Stanford\\, CA 94305\\, T\r\n he Well House\\, Lobby\r\nSEQUENCE:0\r\nSUMMARY:FREE Naloxone (Narcan) Training\r\nUID:tag:localist.com\\,2008:EventInstance_51499764891987\r\nURL:https://events.stanford.edu/event/free-naloxone-narcan-training-1593\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260303\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353972284\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260304T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910820548\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260303T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353493887\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260304T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382764204\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:We will be raffling off copies of GIRL WARRIOR by author and Po\r\n et Laureate Joy Harjo every 15 min! Coffee and donuts from Cruel Donuts in \r\n San Mateo.\\n\\nAll you have to do is be present to win!\\n\\nP.S. save the dat\r\n e: \\n\\nOn Thursday\\, April 9\\, Joy Harjo will be coming to campus!\r\nDTEND:20260303T183000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T173000Z\r\nGEO:37.425085;-122.171682\r\nLOCATION:Fire Truck House\r\nSEQUENCE:0\r\nSUMMARY:Coffee\\, Donuts\\, and a BOOK GIVE AWAY!\r\nUID:tag:localist.com\\,2008:EventInstance_52243604794304\r\nURL:https://events.stanford.edu/event/coffee-donuts-and-a-book-give-away\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Nicole Perlroth\\, New York Times Bestselling Author\\, former Ne\r\n w York Times cyber journalist\\, cyber advisor and venture investor (Ballist\r\n ic Ventures\\, Silver Buckshot Ventures)\\, explores how AI is amplifying thr\r\n eats and reshaping defense—implications for risk\\, resilience\\, and governa\r\n nce.\r\nDTEND:20260303T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nGEO:37.428109;-122.161027\r\nLOCATION:Graduate School of Business\\, Room G101\\, Gunn Building\r\nSEQUENCE:0\r\nSUMMARY:AI\\, Cyber & Systemic Risk: Securing the Digital Frontline\r\nUID:tag:localist.com\\,2008:EventInstance_52057232206801\r\nURL:https://events.stanford.edu/event/ai-cyber-systemic-risk-securing-the-d\r\n igital-frontline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260303T212000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nLOCATION:Turing Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Atmosphere & Energy Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_52011065148754\r\nURL:https://events.stanford.edu/event/atmosphere-energy-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260304T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561120100\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Tech Impact and Policy Center on March 3rd from 12PM–1\r\n PM Pacific for a seminar with Giovanni Ramos.\\n\\nStanford affiliates are in\r\n vited to join us at 11:40 AM for lunch\\, prior to the seminar.  The Winter \r\n Seminar Series continues through March\\; see our Winter Seminar Series page\r\n  for speakers and topics. Sign up for our newsletter for announcements. \\n\\\r\n nAbout the Seminar:\\n\\nDigital mental health interventions (DMHIs) hold pro\r\n mise to advance mental health equity by addressing provider shortages\\, rea\r\n ching individuals who might not seek services in traditional healthcare set\r\n tings\\, and making evidence-based treatments available 24/7. However\\, DMHI\r\n  science to date has rarely involved members of historically marginalized g\r\n roups in the development\\, testing\\, or implementation of these digital too\r\n ls. Therefore\\, without careful consideration\\, DMHIs can perpetuate\\, or e\r\n ven worse\\, create new inequities in mental health. This seminar explores t\r\n he state of the science in DMHIs\\, with an emphasis on diversity\\, equity\\,\r\n  and inclusion (DEI) principles. First\\, with a review the current literatu\r\n re to determine how well DMHIs adhere to DEI principles and the current evi\r\n dence (or lack thereof) supporting their effectiveness and implementation f\r\n or marginalized groups. Then\\, a discussion of how these findings inspired \r\n the creation of Mind-Us\\, a DMHI for individuals who experience elevated le\r\n vels of discrimination. Concluding with findings from work testing and refi\r\n ning new low-intensity implementation strategies to promote uptake\\, engage\r\n ment\\, and retention in self-guided DMHIs for marginalized groups.\\n\\nAbout\r\n  the Speaker:\\n\\nDr. Giovanni Ramos is an Assistant Professor in the Psycho\r\n logy Department at the University of California\\, Berkeley\\, where he direc\r\n ts the Mental Health Equity in Access and Treatment (M-HEAT) Lab. His resea\r\n rch aims to advance mental health equity among racially and ethnically mino\r\n ritized populations. To achieve this goal\\, his work concentrates on three \r\n interconnected areas: 1) identifying risk and resilience factors that influ\r\n ence the mental health of marginalized groups\\, 2) enhancing the cultural a\r\n nd contextual fit of mental health treatments through data-driven cultural \r\n adaptations and implementation strategies\\, and 3) using digital tools to i\r\n ncrease the accessibility of mental health services. Dr. Ramos earned his P\r\n hD in clinical psychology from the University of California\\, Los Angeles\\,\r\n  and completed postdoctoral training at the University of California\\, Irvi\r\n ne\\, and the University of California\\, San Francisco.\r\nDTEND:20260303T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, Studio S40 - bring you\r\n r Stanford ID card/mobile ID to enter the building\r\nSEQUENCE:0\r\nSUMMARY:Equity in Digital Mental Health Interventions\r\nUID:tag:localist.com\\,2008:EventInstance_51960482398532\r\nURL:https://events.stanford.edu/event/equity-in-digital-mental-health-inter\r\n ventions\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Myriam J. A. Chancy is an award-winning writer of fiction and n\r\n on-fiction\\, Guggenheim Fellow\\, and HBA Chair of the Humanities at Scripps\r\n  College whose work focuses on Haiti and the Caribbean. She is the author o\r\n f the Guggenheim-awarded book\\, Autochthonomies: Transnationalism\\, Testimo\r\n ny and Transmission in the African Diaspora\\, as well as From Sugar to Revo\r\n lution: Women's Visions from Haiti\\, Cuba & The Dominican Republic\\, Framin\r\n g Silence: Revolutionary Novels by Haitian Women\\, Searching for Safe Space\r\n s: Afro-Caribbean Women Writers in Exile\\, and Harvesting Haiti: Essays on \r\n Unnatural Disasters\\, which received the 2023 Isis Duarte Award from the La\r\n tin American Studies Association.\\n\\nShe is also the author of four novels\\\r\n , among them her most recent novel\\, the award-winning Village Weavers. The\r\n  novel is set in 1940s' Port-au-Prince and tells the story of Gertie and Si\r\n si who become fast childhood friends\\, despite being on opposite ends of th\r\n e social and economic ladder. As young girls\\, they build their unlikely fr\r\n iendship- until a deathbed revelation tears them apart. Chancy will do a re\r\n ading from the novel and outline how the stories it tells pertain to import\r\n ant themes in Haitian society and international affairs.\\n\\nThis event is p\r\n art of the \"Haiti: Past\\, Present\\, and Futures\" event series organized by \r\n Professor Rachel Jean-Baptiste (History and African & African American Stud\r\n ies).\r\nDTEND:20260303T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 200\\, History Corner\\, Room 307\r\nSEQUENCE:0\r\nSUMMARY:Haiti as Global Nexus: A reading from the novel Village Weavers by \r\n author Myriam Chancy\r\nUID:tag:localist.com\\,2008:EventInstance_52081841044168\r\nURL:https://events.stanford.edu/event/haiti-as-global-nexus-a-reading-from-\r\n the-novel-village-weavers-by-author-myriam-chancy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: A cross-national shift toward lower-yield nucl\r\n ear weapons has generated renewed interest in crisis dynamics near the nucl\r\n ear threshold. Lower-yield nuclear weapons alter nuclear nonuse mechanisms \r\n of credibility\\, costliness\\, and normative inhibitions. In comparison to h\r\n igher-yield\\, city-destroying nuclear weapons\\, the lower-yield weapons off\r\n er a less costly and therefore more credible deterrent. But by reducing cos\r\n tliness\\, they also undercut norms grounded in the devastating effects of n\r\n uclear weapons. With Kristyn Karl and Matthew Wells\\, I conducted nationall\r\n y representative survey experiments in India and Pakistan\\, and in the Unit\r\n ed States and United Kingdom\\, to investigate how citizens consider low-yie\r\n ld nuclear weapons use in an escalating crisis. We offered low-yield nuclea\r\n r weapons as one of three possible retaliatory strike options in different \r\n crisis scenarios\\, some of which involved a low-yield nuclear attack by the\r\n  adversary\\, and we varied the vividness of information we provided about t\r\n he unique effects of a nuclear explosion. We also examined how beliefs abou\r\n t retribution and feelings toward citizens in the rival country affect will\r\n ingness to use nuclear weapons. Across the four national samples\\, we found\r\n  evidence of both nuclear restraint and permissiveness. In three of the fou\r\n r countries\\, respondents were more willing to use nuclear weapons in retal\r\n iation if the adversary first crossed the nuclear threshold by conducting a\r\n  low-yield nuclear strike. In all four samples\\, larger proportions of resp\r\n ondents preferred lower-yield to higher-yield nuclear retaliation. These an\r\n d other main findings\\, which I will present for each of the two pairs of s\r\n urvey experiments\\, complicate theoretical understandings of the convention\r\n al-nuclear threshold and have broad implications for both deterrence mechan\r\n isms and nuclear non-use norms.\\n\\nAbout the speaker: Lisa Langdon Koch is \r\n Associate Professor of Government at Claremont McKenna College\\, specializi\r\n ng in international relations. She is the author of Nuclear Decisions: Chan\r\n ging the Course of Nuclear Weapons Programs (Oxford University Press\\, 2023\r\n )\\, which won the Robert Jervis Best International Security Book Award. She\r\n  has published numerous articles on topics like nuclear proliferation and f\r\n oreign policy. Her research has been funded by the Stanton Foundation Nucle\r\n ar Security Grant Program and the Carnegie Corporation of New York. In 2023\r\n \\, Koch received the Glenn R. Huntoon Award for Superior Teaching. She is a\r\n  2000 Harry S. Truman Scholar.\r\nDTEND:20260303T211500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Low-Yield Nuclear Weapons and Crisis Dynamics: Experimental Evidenc\r\n e from the United States\\, United Kingdom\\, India\\, and Pakistan\r\nUID:tag:localist.com\\,2008:EventInstance_52180853905174\r\nURL:https://events.stanford.edu/event/low-yield-nuclear-weapons-and-crisis-\r\n dynamics-experimental-evidence-from-the-united-states-united-kingdom-india-\r\n and-pakistan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Are you\\n\\nA 1st or 2nd year PhD student?Interested in conducti\r\n ng community based research?Looking for a community of like-minded graduate\r\n  students?Come to this RAISE (Research\\, Action\\, and Impact through Strate\r\n gic Engagement) Doctoral Fellowship in person Info Session to learn more ab\r\n out the program! RAISE supports doctoral students who are motivated to make\r\n  positive contributions to their communities and the world. \\n\\nThe RAISE D\r\n octoral Fellowship includes: Stipend and graduate tuition for 1 quarter per\r\n  year over three years\\, for a total of 3 quarters of fellowship support\\; \r\n $9\\,000 in project funding to help cover travel and expenses related to the\r\n  experiential learning component of RAISE\\; Structured workshops to support\r\n  community-engaged and impact-focused projects and research\\; Professional \r\n development to prepare doctoral students for community and public impact in\r\n  their career choices\\;  Cohort-based community building and support\\;  Cho\r\n ice to earn course credits through RAISE project work\\; Additional mentorsh\r\n ip from the RAISE Doctoral Fellowship staff\\, Stanford faculty mentors\\, ad\r\n vanced graduate student mentors\\, and alumni.\\n\\nInfo Sessions:\\nMarch 3\\, \r\n 12 -1:30pm (In person)\\n\\nRSVP Here: https://stanforduniversity.qualtrics.c\r\n om/jfe/form/SV_b2cdxkCOCoOQTjw\\n\\n\\nQuestions? Email raisefellows@stanford.\r\n edu\r\nDTEND:20260303T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T200000Z\r\nLOCATION:EVGR\\, Building C 134 Theatre\r\nSEQUENCE:0\r\nSUMMARY:RAISE Doctoral Fellowship Info Session\r\nUID:tag:localist.com\\,2008:EventInstance_51933617031139\r\nURL:https://events.stanford.edu/event/raise-doctoral-fellowship-info-sessio\r\n n-3693\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260303T230000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491608467\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Bharat Chandar\\, a postdoctoral researcher in the Stanford Digi\r\n tal Economy Lab\\, part of the Institute for Human-Centered Artificial Intel\r\n ligence\\, and Rob Reich\\, the McGregor-Girand Professor of Social Ethics of\r\n  Science and Technology at Stanford\\, discuss how AI affects various job ma\r\n rkets.  \\n\\nDeep disagreement pervades our democracy\\, from arguments over \r\n immigration\\, gun control\\, abortion\\, and the Middle East crisis\\, to the \r\n function of elite higher education and the value of free speech itself. Lou\r\n d voices drown out discussion. Open-mindedness and humility seem in short s\r\n upply among politicians and citizens alike. Yet constructive disagreement i\r\n s an essential feature of a democratic society. This class explores and mod\r\n els respectful civic disagreement. Each week features scholars who disagree\r\n  — sometimes quite strongly — about major policy issues. Each class will be\r\n  focused on a different topic and have guest speakers. Students will have t\r\n he opportunity to probe those disagreements\\, to understand why they persis\r\n t even in the light of shared evidence\\, and to improve their own understan\r\n ding of the facts and values that underlie them.\\n\\nThis course is offered \r\n in the spirit of the observation by Hanna Holborn Gray\\, former president o\r\n f the University of Chicago\\, that “education should not be intended to mak\r\n e people comfortable\\, it is meant to make them think. Universities should \r\n be expected to provide the conditions within which hard thought\\, and there\r\n fore strong disagreement\\, independent judgment\\, and the questioning of st\r\n ubborn assumptions\\, can flourish in an environment of the greatest freedom\r\n .”\\n\\nThe speakers in this course are the guests of the faculty and student\r\n s alike and should be treated as such. They are aware that their views will\r\n  be subject to criticism in a manner consistent with our commitment to resp\r\n ectful critical discourse. We will provide as much room for students’ quest\r\n ions and comments as is possible for a class of several hundred. For anyone\r\n  who feels motivated to engage in a protest against particular speakers\\, t\r\n here are spaces outside the classroom for doing so.\\n\\nWhen/Where?: Tuesday\r\n s 3:00-4:50PM in Cemex Auditorium\\n\\nWho?: This class will be open to stude\r\n nts\\, faculty and staff to attend and will also be recorded.\\n\\n1/6 Adminis\r\n trative State: https://events.stanford.edu/event/the-administrative-state-w\r\n ith-brian-fletcher-and-saikrishna-prakash\\n\\n1/13 Israel-Palestine: https:/\r\n /events.stanford.edu/event/democracy-and-disagreement-israel-palestine-the-\r\n future-of-palestine\\n\\n1/20 COVID Policies in Retrospect: https://events.st\r\n anford.edu/event/democracy-and-disagreement-covid-policies-in-retrospect-wi\r\n th-sara-cody-and-stephen-macedo\\n\\n1/27 Gender-Affirming Care: https://even\r\n ts.stanford.edu/event/democracy-and-disagreement-gender-affirming-care-with\r\n -alex-byrne-and-amy-tishelman\\n\\n2/3 Fetal Personhood: https://events.stanf\r\n ord.edu/event/democracy-and-disagreement-fetal-personhood-with-rachel-rebou\r\n che-and-chris-tollefsen\\n\\n2/10 Internet Regulation: https://events.stanfor\r\n d.edu/event/democracy-and-disagreement-internet-regulation-the-take-it-down\r\n -act-with-eric-goldman-and-jim-steyer\\n\\n2/17 Restrictions on College Prote\r\n sts: https://events.stanford.edu/event/democracy-and-disagreement-restricti\r\n ons-on-college-protests-with-richard-shweder-and-shirin-sinnar\\n\\n2/24 Prop\r\n ortional Representation: https://events.stanford.edu/event/democracy-and-di\r\n sagreement-proportional-representation-with-bruce-cain-and-lee-drutman \\n\\n\r\n 3/10 Ending the Russia-Ukraine War: https://events.stanford.edu/event/democ\r\n racy-and-disagreement-ending-the-russiaukraine-war-with-samuel-charap-and-g\r\n abrielius-landsbergis\r\nDTEND:20260304T005000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T230000Z\r\nGEO:37.428584;-122.162763\r\nLOCATION:GSB Knight - Arbuckle / Cemex\r\nSEQUENCE:0\r\nSUMMARY:Democracy and Disagreement: AI and Jobs with Bharat Chander and Rob\r\n  Reich\r\nUID:tag:localist.com\\,2008:EventInstance_51569326858397\r\nURL:https://events.stanford.edu/event/democracy-and-disagreement-ai-and-job\r\n s-with-bharat-chander-and-rob-reich\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This group is designed to support students who wish to have a s\r\n afe healing space through utilization of art. Sessions will include hand bu\r\n ilding clay\\, doodling\\, watercolor painting\\, Turkish lump making\\, Chines\r\n e calligraphy\\, rock painting\\, washi tape art\\, terrarium making\\, origami\r\n  and matcha tea. \\n\\nPre-screening is required. Mari or Marisa will reach o\r\n ut to schedule a confidential pre-screening phone or zoom call. \\n\\nWHEN: E\r\n very Tuesday from 3:00 PM - 4:30 PM in Fall Quarter for 7-8 sessions (start\r\n ing on Tuesday in the beginning of Feb\\, 2026) \\n\\nWHERE: In person @ Room \r\n 306 in Kingscote Gardens (419 Lagunita Drive\\, 3rd floor)\\n\\nWHO: Stanford \r\n undergrad and grad students Facilitators: Mari Evers\\, LCSW & Marisa Pereir\r\n a\\, LCSW from Stanford Confidential Support Team\r\nDTEND:20260304T003000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden \r\nSEQUENCE:0\r\nSUMMARY:Healing with Art group \r\nUID:tag:localist.com\\,2008:EventInstance_51827321268587\r\nURL:https://events.stanford.edu/event/healing-with-art-group-6772\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In this talk\\, several recent developments in the study of frac\r\n tionalized states of matter will be reviewed. The focus will primarily be o\r\n n the condensed matter physics perspective\\, presenting a theoretical appro\r\n ach to the Fractional Chern Insulator (the Fractional Quantum Hall Effect w\r\n ithout a magnetic field)\\, its unique properties\\, and its phase transition\r\n s to neighboring phases. The talk will conclude with a few comments from th\r\n e quantum information perspective\\, discussing features of the entanglement\r\n  hidden in the ground state of a fractionalized phase.\\n\\nAdy Stern is a pr\r\n ofessor of physics in the Department of Condensed Matter Physics at Weizman\r\n n Institute of Science in Rehovot\\, Israel. A theoretical physicist\\, he is\r\n  mostly interested in the way that quantum mechanics interplays with electr\r\n onics. More specifically\\, he is interested in topological states of matter\r\n  and the way they may be used to advance quantum information science\\, all \r\n the way to quantum computation. Stern sees physics as the field where you d\r\n o your best to formulate the rules that govern the system you study\\, and t\r\n hen do your very best to break these rules. His hobby is popularization of \r\n science.\r\nDTEND:20260304T003000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260303T233000Z\r\nGEO:37.428953;-122.172839\r\nLOCATION:Hewlett Teaching Center\\, 201\r\nSEQUENCE:0\r\nSUMMARY:Applied Physics/Physics Colloquium: Ady Stern- \"News From The Fract\r\n ional Arena\" \r\nUID:tag:localist.com\\,2008:EventInstance_51765179321515\r\nURL:https://events.stanford.edu/event/applied-physicsphysics-colloquium-ady\r\n -stern-news-from-the-fractional-arena\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Counseling & Psychological Services is happy to offer Rooted! T\r\n his is a support group for Black-identified Stanford graduate students that\r\n  is designed to be a confidential space for students to speak their minds\\,\r\n  build community\\, rest\\, connect with themselves\\, and learn coping skills\r\n  for managing graduate life at Stanford.\\n\\nFacilitated by Cierra Whatley\\,\r\n  PhD & Katie Ohene-Gambill\\, PsyDThis group meets in-person on Tuesdays fro\r\n m 4-5pm on 1/27\\; 2/3\\; 2/10\\; 2/17\\; 2/24\\; 3/3\\; 3/10All enrolled student\r\n s are eligible to participate in CAPS groups and workshops. A pre-group mee\r\n ting is required prior to participation in this group. Please contact CAPS \r\n at (650) 723-3785 to schedule a pre-group meeting with the facilitators.\r\nDTEND:20260304T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T000000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Rooted! Black Graduate Student Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51579799616544\r\nURL:https://events.stanford.edu/event/copy-of-rooted-black-graduate-student\r\n -support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:What does the U.S.–Israel war with Iran mean for the Arab world\r\n ? How are Arab states responding\\, and what political\\, economic\\, and huma\r\n nitarian consequences might emerge from a prolonged conflict?\\n\\nThe Progra\r\n m on Arab Reform and Development convenes a panel of scholars — Sean Yom\\, \r\n Lisa Blaydes\\, and Hesham Sallam — to examine the regional implications of \r\n the war\\, situating current developments within broader historical and geop\r\n olitical transformations shaping the region today.\r\nDTEND:20260304T011500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T000000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\\, Encina Hall C231\r\nSEQUENCE:0\r\nSUMMARY:War and the Arab World: Regional Responses and Consequences\r\nUID:tag:localist.com\\,2008:EventInstance_52242151819579\r\nURL:https://events.stanford.edu/event/war-and-the-arab-world-regional-respo\r\n nses-and-consequences\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Join us for Game Nights every Tuesday in Green Library from 5pm\r\n -8pm in the IC Classroom (near the Reference Desk) of Green Library! These \r\n Game Nights will be open to all\\, from those who can only stop by briefly t\r\n o those who can be there for the entire time.\\n\\nIf you would like to be ad\r\n ded to the Game Nights @ Green mailing list\\, suggest a game\\, or if you ha\r\n ve other feedback\\, please fill out this contact form.\r\nDTEND:20260304T040000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T010000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, IC Classroom\r\nSEQUENCE:0\r\nSUMMARY:Game Nights @ Green\r\nUID:tag:localist.com\\,2008:EventInstance_51808890591161\r\nURL:https://events.stanford.edu/event/game-nights-green-9218\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260304T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T013000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663077808\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change during Winter Quarter.\\n\\nRelax\r\n  + Center with Yoga Class with Diane Saenz. A traditional\\, easy-to-learn s\r\n ystem of Hatha Yoga which encourages proper breathing and emphasizes relaxa\r\n tion.  A typical class includes breathing exercises\\, warm-ups\\, postures a\r\n nd deep relaxation.  The focus is on a systematic and balanced sequence tha\r\n t builds a strong foundation of basic asanas from which variations may be a\r\n dded to further deepen the practice.  This practice is both for beginners a\r\n nd seasoned practitioners alike to help calm the mind and reduce tension.\\n\r\n \\nDiane Saenz (she/her) is a yoga instructor with more than 20 years of exp\r\n erience in the use of yoga and meditation to improve mental and physical we\r\n ll-being.  Following a classical approach\\, she leans on asana and pranayam\r\n a as tools to invite participants into the present moment.  Diane completed\r\n  her 500 hour level training with the International Sivananda Yoga Vedanta \r\n Organization in South India\\, followed by specializations in adaptive yoga \r\n and yoga for kids.  She has taught adult and youth audiences around the glo\r\n be.\r\nDTEND:20260304T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Old Union\\, Room 302)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932526682179\r\nURL:https://events.stanford.edu/event/yoga-tuesdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Co-Hosted with the Stanford Program in Data Science & Social Sy\r\n stems.\\n\\nWho creates the maps?  How?  And\\, what is at stake?  \\n\\nLong be\r\n fore billions can be invested in clean energy projects\\, a multi-agency pro\r\n cess for Long Range Planning shapes the landscape of opportunity for new re\r\n sources - and the prospects for retiring old ones.\\n\\nEmily Leslie is the f\r\n ounder of Montara Mountain Energy and is a Stanford alumna who also teaches\r\n  in Spring Quarter the course called Spatial Planning for Gigascale Renewab\r\n les & Transmission (CEE 176M / 276M). She is an expert in scenario analysis\r\n  and maps inform decisions at ​the largest scale in California's energy eco\r\n nomy. This is your chance to gain a more vivid perspective on how that work\r\n s\\, and what it means. \\n\\nEmcee:  Explore Energy Peer Advisor and ace in s\r\n patial planning for giga-scale renewables and transmission\\, Ariana Carmody\r\nDTEND:20260304T032000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T020000Z\r\nGEO:37.425097;-122.181554\r\nLOCATION:Lyman Atrium\r\nSEQUENCE:0\r\nSUMMARY:Data Science for Spatial Planning: Mapping for Policy Decisions Abo\r\n ut Gigascale Grid Buildout\r\nUID:tag:localist.com\\,2008:EventInstance_52092764412600\r\nURL:https://events.stanford.edu/event/data-science-for-spatial-planning-map\r\n ping-for-policy-decisions-about-gigascale-grid-buildout\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:Please join us for the screening of \"Animals in War\" and Q&A wi\r\n th the producer Adam Sigel (on zoom). WHEN: March 3\\, 6 p.m.WHERE: Pigott H\r\n all (Bldg. 260)\\, Rm. 113 \"Animals in War\" (2025) is a unique Ukrainian ant\r\n hology film based on true stories of animals affected by the war in Ukraine\r\n . The main characters of its seven novellas are animals that found themselv\r\n es in the midst of war—among them a white rabbit\\, a wolf\\, and a cow. This\r\n  project sheds light on the humanitarian and ecological catastrophe caused \r\n by war\\, portraying it through the perspective of animals who are powerless\r\n  against its consequences. The film was created in collaboration with both \r\n Ukrainian and international artists\\, including Hollywood actor\\, director\\\r\n , and producer Sean Penn\\, who\\, for the first time in the history of Ukrai\r\n nian cinema\\, became part of a domestic film.Directors: Yulia Shashkova\\, S\r\n viatoslav Kostiuk\\, Andrii Lidahovskyi\\, Maksym Tuzov\\, Alexei Mamedov\\, My\r\n roslav SlaboshpytskyiProducers: Oleg Kokhan\\, Oleksiy Makukhin\r\nDTEND:20260304T030000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T020000Z\r\nLOCATION:\\, Pigott Hall (Bldg. 260)\\, Rm. 113\r\nSEQUENCE:0\r\nSUMMARY:Film Screening: Animals in War and Q&A with the producer Adam Sigel\r\n  \r\nUID:tag:localist.com\\,2008:EventInstance_51960474259691\r\nURL:https://events.stanford.edu/event/film-screening-animals-in-war-and-qa-\r\n with-the-producer-adam-sigel\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260304\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294346147\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260304\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355508202\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260304\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353973309\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260305T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T160000Z\r\nGEO:37.484843;-122.204313\r\nLOCATION:Cardinal Hall\\, C108\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (SRWC Cardinal Hall Room C108) (\r\n By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525246608114\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-srwc-cardinal-hall-room-c108-by-appointment-only-7560\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260305T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910821573\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Universities are increasingly reexamining their role as incubat\r\n ors of effective citizenship. An essential yet often overlooked part of thi\r\n s work is strengthening K–12 civic education. This webinar explores how eff\r\n orts within higher education can support civic learning in K–12 schools\\, w\r\n ith particular emphasis on the academy’s role in training the next generati\r\n on of educators.\\n\\nThe Alliance for Civics in the Academy hosts \"How Can U\r\n niversities Strengthen Civic Education in K–12 Schools?\" with Jennifer McNa\r\n bb\\, Joshua Dunn\\, and Jenna Storey on March 4\\, 2026\\, from 9:00-10:00 a.m\r\n . PT.\\n\\nThe Civics in the Academy webinar series features in-depth discuss\r\n ions on the practice\\, pedagogy\\, and state of civics in higher education. \r\n Drawing on the diverse expertise and perspectives within the Alliance netwo\r\n rk\\, each session features topics and panelists sourced directly from our m\r\n embership. The series aims to foster dialogue\\, share practical knowledge a\r\n nd best practices\\, and contribute to a shared\\, pluralistic framework in t\r\n he evolving field of civics in the academy.\r\nDTEND:20260304T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:How Can Universities Strengthen Civic Education in K–12 Schools?\r\nUID:tag:localist.com\\,2008:EventInstance_52074096813431\r\nURL:https://events.stanford.edu/event/how-can-universities-strengthen-civic\r\n -education-in-k12-schools\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:CAS IHAWG brings together graduate students across humanities d\r\n isciplines for sustained\\, collective writing and scholarly exchange. Hoste\r\n d by the Center for African Studies\\, the group meets weekly to combine dis\r\n ciplined co-writing sessions with peer-led workshops and a speaker series t\r\n hat showcases Africanist humanities research. We foster an encouraging\\, pr\r\n oductive environment where members share work-in-progress\\, troubleshoot wr\r\n iting challenges\\, and celebrate milestones in their research. Who should c\r\n onsider joining:\\n\\nGraduate students whose research engages Africa or the \r\n African diaspora in humanities fields\\, including DAAAS/DLCL and other area\r\n  studies\\, art and art history\\, film and media\\, comparative literature\\, \r\n CCSRE\\, education\\, English\\, feminist and gender studies\\, musicology\\, ph\r\n ilosophy\\, linguistics\\, religious studies\\, and theater/performance studie\r\n s. Interdisciplinary and cross-departmental participation is strongly encou\r\n raged.\\n\\nAttendance can be regular or occasional to accommodate academic s\r\n chedules.\\n\\nClick here to receive meeting notices and event updates. \\n\\nF\r\n or questions\\, contact Mpho (mmolefe@stanford.edu) or Seyi (jesuseyi@stanfo\r\n rd.edu).\\n\\nWe welcome you to join our writing community.\r\nDTEND:20260304T193000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T170000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 127\r\nSEQUENCE:0\r\nSUMMARY:Interdisciplinary Humanities Africanist Writing Group (IHAWG)\r\nUID:tag:localist.com\\,2008:EventInstance_52153415599869\r\nURL:https://events.stanford.edu/event/interdisciplinary-humanities-africani\r\n st-writing-group-ihawg\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260304T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353494912\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260304T200000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105019003\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260305T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382766253\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Stanford Woods Institute for the Environment for a dis\r\n cussion with Bruce Cain\\, author of Under Fire and Under Water: Extreme Wea\r\n ther\\, the West\\, and the Fight to Shape America’s Future. \\n\\nBruce E. Cai\r\n n is the author of Under Fire and Under Water: Extreme Weather\\, the West\\,\r\n  and the Fight to Shape America’s Future\\, a timely examination of how clim\r\n ate-driven wildfires\\, droughts\\, and flooding are reshaping the American W\r\n est. Cain\\, a professor of political science at Stanford University and Dir\r\n ector of the Bill Lane Center for the American West\\, is a leading scholar \r\n of U.S. politics and widely recognized for his expertise in political regul\r\n ation\\, representation\\, and state politics\\, with a particular emphasis on\r\n  California and the American West.\\n\\nDrawing on decades of scholarship in \r\n U.S. politics\\, environmental regulations\\, and stakeholder engagement\\, Ca\r\n in analyzes why communities continue to settle and rebuild in high-risk are\r\n as and how fragmented governance\\, infrastructure legacies\\, and political \r\n incentives slow meaningful climate adaptation. In this talk\\, he and Woods \r\n faculty director Chris Field will explore how understanding the political a\r\n nd behavioral roots of inaction is essential to developing durable solution\r\n s for living sustainably in a warming world. \\n\\nFor more information\\, con\r\n tact: woods-events@stanford.edu\\n\\nZoom link: https://stanford.zoom.us/j/91\r\n 464522006?pwd=ilvbnmcskh18ZCYVCBzhXSc7u8HNpP.1\\n\\nSpeakers:\\n\\nBruce Cain\\,\r\n  Charles Louis Ducommun Professor\\, Stanford School of Humanities and Scien\r\n ces\\; Senior Fellow at the Woods Institute for the Environment\\; the Stanfo\r\n rd Institute for Economic Policy Research\\; the Precourt Institute for Ener\r\n gy\\; Professor of Environmental Social Sciences.\\n\\nChris Field\\, Perry L. \r\n McCarty Director\\, Woods Institute for the Environment\\; Melvin and Joan La\r\n ne Professor of Interdisciplinary Environmental Studies\\, Biology\\; and Pro\r\n fessor of Earth System Science\\, Stanford Doerr School of Sustainability\r\nDTEND:20260304T190000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Woods Book Talk: Bruce Cain\\, author of Under Fire and Under Water\r\nUID:tag:localist.com\\,2008:EventInstance_52003954037438\r\nURL:https://events.stanford.edu/event/woods-book-talk-bruce-cain-author-of-\r\n under-fire-and-under-water\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Session Description\\n\\nMid-century Africa was a time full of th\r\n e promise of freedom. It was also a time in which the 'freedom dreams’ of A\r\n frica intersected with those of its diasporas in powerful ways. While stati\r\n st institutions emerged to embody the realization and future of these dream\r\n s\\, various print cultures created platforms for engendering a pan-African \r\n imagination that would bring together anti-colonial resistance\\, civil righ\r\n ts\\, and anti-apartheid imagination\\, towards the new age of decolonization\r\n . In this talk\\, I argue that the small magazine embodies mid-century Afric\r\n a as a time and space of global black possibility through its curation of p\r\n an-African imagination.\\n\\nRSVP Here\\n\\nSpeaker Biography\\n\\nChristopher Ou\r\n ma is an Associate Professor of English at Duke University with a secondary\r\n  appointment in African and African American Studies.  He is the author of \r\n Childhood in Contemporary Diasporic Africa Literature: Memories and Futures\r\n  Past (2020) and co-editor of Spoken Word Project: Stories travelling throu\r\n gh Africa (2014). He is working on a monograph on small magazines and Pan-A\r\n frican imagination in mid-century Africa. In addition\\, he is co-editing a \r\n collection on Black Archival Imagination forthcoming with Duke University P\r\n ress and co-directs a Duke Franklin Humanities Institute Lab with the same \r\n name.\r\nDTEND:20260304T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 123\r\nSEQUENCE:0\r\nSUMMARY: Black Possibility: Small Magazines and Pan-African Imagination - P\r\n rof. Chris Ouma\r\nUID:tag:localist.com\\,2008:EventInstance_51533563198104\r\nURL:https://events.stanford.edu/event/black-possibility-small-magazines-and\r\n -pan-african-imagination-dr-chris-ouma\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join us on March 4th 12-1pm PST to learn about the results of G\r\n aus et al.'s scoping review on the quality of studies on LLMs for mental he\r\n alth support!\\n\\nResults of a Scoping Review on Quality of LLM Mental Healt\r\n h Studies\\n\\nMillions of people around the world are using large language m\r\n odels for mental health support in a de-facto\\, unregulated public health i\r\n ntervention\\, and many specialized LLM applications are being developed for\r\n  this use. Amid reports of both therapeutic benefit and significant harms\\,\r\n  the scientific evidence supporting these applications has remained inconcl\r\n usive.\\n\\nTo create an up-to-date snapshot of the field\\, Gaus and colleagu\r\n es conducted a PRISMA-ScR scoping review of 132 peer-reviewed studies on tr\r\n ansformer-based LLMs used to deliver\\, augment\\, or analyze mental health s\r\n upport and psychotherapy. Data were extracted on sample composition\\, study\r\n  design\\, the adoption of responsible evaluation practices\\, and model and \r\n dataset choices.\\n\\nThe review identified a pronounced gap between widespre\r\n ad public adoption and a limited evidence base. The authors call for more r\r\n obust methodological standards\\, including rigorous clinical trials\\, a foc\r\n us on safety and implementation\\, and standardized\\, clinically meaningful \r\n automated benchmarks. Stronger evidence is needed to document that generati\r\n ve AI systems can safely and meaningfully improve access to mental health t\r\n reatment.\r\nDTEND:20260304T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:CREATE webinar: \"Results of a Scoping Review on Quality of LLM Ment\r\n al Health Studies\" with Richard Gaus\\, MD\r\nUID:tag:localist.com\\,2008:EventInstance_52153547592286\r\nURL:https://events.stanford.edu/event/create-webinar-results-of-a-scoping-r\r\n eview-on-quality-of-llm-mental-health-studies-with-richard-gaus-md\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:OverviewPediatricians play an important role in diagnosing youn\r\n g patients with asthma\\, but it can be difficult to make the diagnosis in c\r\n hildren younger than 5 years old. In this webinar\\, participants will learn\r\n  an approach to asthma diagnosis in this age group. Since lung testing is d\r\n ifficult\\, the diagnosis is often based on identifying signs and symptoms o\r\n f reversible airflow obstruction and the documentation of response to asthm\r\n a medication. The webinar will also discuss the indications for specialized\r\n  care when the diagnosis of asthma is not straightforward or response to th\r\n erapy is not successful. In addition\\, pediatricians will learn about pract\r\n ical day-to-day management issues of patients with asthma and the types of \r\n treatments these patients may be receiving.\\n\\nRegistrationRegistration for\r\n  all practitioners - free\\n\\nTo register for this activity\\, please click H\r\n ERE.\\n\\nCreditsAMA PRA Category 1 Credits™ (1.00 hours)\\, AAPA Category 1 C\r\n ME credits (1.00 hours)\\, ANCC Contact Hours (1.00 hours)\\, Non-Physician P\r\n articipation Credit (1.00 hours)\\n\\nTarget AudienceSpecialties - Family Med\r\n icine & Community Health\\, PediatricsProfessions - Advance Practice Nurse (\r\n APN)\\, Fellow/Resident\\, Nurse\\, Physician\\, Physician Associate\\, Register\r\n ed Nurse (RN) ObjectivesAt the conclusion of this activity\\, learners shoul\r\n d be able to:\\n1. Discuss why it is often difficult to diagnose young child\r\n ren with asthma since it is a heterogeneous disorder with different causes \r\n and triggers.\\n2. Identify the predictors of asthma and how to separate fro\r\n m wheezing with viral illnesses.\\n3. Define the signs\\, symptoms and respon\r\n se to therapy that may indicate asthma in young children.\\n4. Describe when\r\n  to order further testing for patients with suspected asthma.\\n5. Review th\r\n e indications for specialized asthma care and further examination for asthm\r\n a.\\n6. Summarize the daily management of patients with asthma.\\n7. Explain \r\n the treatments for asthma in children including the various medications\\, e\r\n nvironmental control and the role of lifestyle.\\n\\nAccreditationIn support \r\n of improving patient care\\, Stanford Medicine is jointly accredited by the \r\n Accreditation Council for Continuing Medical Education (ACCME)\\, the Accred\r\n itation Council for Pharmacy Education (ACPE)\\, and the American Nurses Cre\r\n dentialing Center (ANCC)\\, to provide continuing education for the healthca\r\n re team. \\n \\nCredit Designation \\nAmerican Medical Association (AMA) \\nSta\r\n nford Medicine designates this Live Activity for a maximum of 1.00 AMA PRA \r\n Category 1 CreditsTM.  Physicians should claim only the credit commensurate\r\n  with the extent of their participation in the activity. \\n\\nAmerican Nurse\r\n s Credentialing Center (ANCC) \\nStanford Medicine designates this Live Acti\r\n vity activity for a maximum of 1.00 ANCC contact hours.  \\n\\nAmerican Acade\r\n my of Physician Associates (AAPA) - Live \\nStanford Medicine has been autho\r\n rized by the American Academy of PAs (AAPA) to award AAPA Category 1 CME cr\r\n edit for activities planned in accordance with AAPA CME Criteria. This live\r\n  activity is designated for 1.00 AAPA Category 1 CME credits. PAs should on\r\n ly claim credit commensurate with the extent of their participation.\r\nDTEND:20260304T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Diagnosing Asthma in Children Under Age 5\r\nUID:tag:localist.com\\,2008:EventInstance_51559309223404\r\nURL:https://events.stanford.edu/event/diagnosing-asthma-in-children-under-a\r\n ge-5\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260305T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561121125\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:It is difficult to be our best\\, more compassionate self\\, espe\r\n cially when we are facing stressors in our daily life. Showing up for our f\r\n riends and loved ones wholeheartedly can require conscious choices and comm\r\n itment. But the good news is that our close relationships are also the best\r\n  resource in facing life’s challenges.\\n\\nThis online workshop will cover s\r\n ome of the common responses to stress and the ways stress can impact relati\r\n onships. Over two sessions\\, we will outline helpful processes for personal\r\n  stress reduction\\, explore ways to have meaningful family time\\, and provi\r\n de tools for compassionate and supportive communication\\, even in conflict.\r\n  Through breakout groups\\, class discussion\\, and exercises\\, you will have\r\n  the opportunity to share your experience and gain support from others. By \r\n learning ways to navigate your relationships with family\\, friends\\, and yo\r\n ur community\\, you can build strength and resilience through difficult time\r\n s.\\n\\nThis class will not be recorded. Attendance requirement for incentive\r\n  points - at least 80% of the live session.  Request disability accommodati\r\n ons and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260304T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Fostering Kind and Compassionate Relationships During Times of Stre\r\n ss (March 4 - 11)\r\nUID:tag:localist.com\\,2008:EventInstance_51388531099385\r\nURL:https://events.stanford.edu/event/fostering-kind-and-compassionate-rela\r\n tionships-during-times-of-stress-march-4-11\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford Department of Medicine would like to invite all Stanfo\r\n rd community members to attend this instance of the Medicine Grand Rounds (\r\n MGR) series\\, which will feature Christopher Murray\\, MD\\, DPhil\\, a promin\r\n ent global health researcher at the University of Washington\\, renowned for\r\n  his innovative work in health metrics and population health that is transf\r\n orming health policy and practice worldwide.\\n\\nView accreditation info her\r\n e.\\n\\nCME Activity ID: 56177\\n\\nText to 844-560-1904 for CME credit.\\n\\nIf \r\n you prefer to claim credit online\\, click here.\\n\\nComplete this FORM after\r\n  each session for MOC credit.\r\nDTEND:20260304T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nLOCATION:Li Ka Shing Center\\, Berg Hall\r\nSEQUENCE:0\r\nSUMMARY:From Data to Destiny: What the Global Burden of Disease Tells Us Ab\r\n out Our Future\r\nUID:tag:localist.com\\,2008:EventInstance_51933540538718\r\nURL:https://events.stanford.edu/event/medicine-grand-rounds-with-christophe\r\n r-murray-md-dphil\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Lunch Club provides affiliates of the Stanford Archaeology Cent\r\n er with a community-oriented forum for engagement with current issues in ar\r\n chaeology. On March 4\\, 2026\\,  we will host Dr. Rodrigo Solinis-Casparius \r\n from the Univeristy of Illiniois at Chicago and Co-curator of Field Museum.\r\n \\n\\nAbstract:\\n\\nPeople move. When we do\\, we shape our cities by creating \r\n networks of movement behaviors in the form of trails\\, roads and pathways. \r\n This is true on every urban settlement in our planet. Thus\\, ancient settle\r\n ments and their ancient roads are essential to understand the roles that mo\r\n vement plays in the spatial configuration of a city and the daily life of i\r\n ts residents. Here\\, I present a novel approach to identify and study >1\\,0\r\n 00-year-old pathways using remote sensing (lidar)\\, computational analyses\\\r\n , and traditional archaeological work like survey and excavation in a massi\r\n ve Mesoamerican urban center in Western Mexico.\r\nDTEND:20260304T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T200000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\\, 106\r\nSEQUENCE:0\r\nSUMMARY:Lunch Club Series | Networks on the Ground: Ancient Roads\\, Movemen\r\n t Practices\\, and Urban Form in a Mesoamerican City\r\nUID:tag:localist.com\\,2008:EventInstance_51836749132400\r\nURL:https://events.stanford.edu/event/lunch-club-series-networks-on-the-gro\r\n und-ancient-roads-movement-practices-and-urban-form-in-a-mesoamerican-city\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The asteroid (16) Psyche may be the metal-rich remnant of a dif\r\n ferentiated planetesimal\\, or it may be a highly reduced\\, metal-rich aster\r\n oidal material that never differentiated. The NASA Psyche mission aims to d\r\n etermine Psyche’s provenance. How did we choose the science instruments we’\r\n d need\\, when there was not even a photo of the surface\\, and how are we pr\r\n eparing the team to interpret the data with an open mind? I’ll describe the\r\n  current state of knowledge about the possible solar system regions of orig\r\n in for Psyche prior to its implantation into the asteroid belt\\, the physic\r\n al and chemical processes that can enrich metal in an asteroid\\, and possib\r\n le meteoritic analogs. Then\\, I’ll show the process our science team is goi\r\n ng through to prepare us to produce the best possible science once the spac\r\n ecraft arrives at the asteroid.\\n\\n \\n\\nLindy Elkins-Tanton is a planetary \r\n scientist and the Principal Investigator of the NASA Psyche space mission. \r\n She is Director of the University of California\\, Berkeley Space Sciences L\r\n aboratory. Previously\\, she held positions at Arizona State University\\, th\r\n e Carnegie Institution for Science\\, and MIT. Elkins-Tanton's research conc\r\n erns the formation and evolution of rocky planets and the art and science o\r\n f creating effective teams and of future-facing educational practices. Aste\r\n roid (8252) Elkins-Tanton is named for her\\, as is the mineral elkinstanton\r\n ite. She is a member of the National Academy of Sciences. Elkins-Tanton rec\r\n eived her B.S.\\, M.S.\\, and Ph.D. from MIT. Her book Mission Ready: How to \r\n Build Teams that Perform under Pressure will be released in April\\, 2026.\r\nDTEND:20260304T212000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T203000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Planetary Science and Exploration Seminar\\, Lindy Elkins-Tanton: \"T\r\n he NASA Psyche mission: Preparing for the Science of an Unknown Object\"\r\nUID:tag:localist.com\\,2008:EventInstance_52127124815020\r\nURL:https://events.stanford.edu/event/planetary-science-and-exploration-sem\r\n inar-lindy-elkins-tanton-the-nasa-psyche-mission-preparing-for-the-science-\r\n of-an-unknown-object\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Bringing together neuroscience and computational perspectives\\,\r\n  the 2026 MBCT symposium explores how recurrence may be a canonical neural \r\n mechanism for integrating past experience\\, present input\\, and future goal\r\n s across multiple behavioral timescales.\\n\\nEvery given moment of our lives\r\n  is some combination of past\\, present\\, and future. While we occupy the cu\r\n rrent moment\\, we integrate sensory information from the recent past\\, draw\r\n  on relevant memories from more distant experience\\, anticipate upcoming ev\r\n ents\\, and make goal-directed decisions that guide our actions. \\n\\nWhat ar\r\n e the neural mechanisms underlying our brain's ability to coordinate inform\r\n ation from such different timescales?\\n\\nIn neuroscience\\, recurrent feedba\r\n ck has long been known to link the recent past and the present by allowing \r\n neuronal computations to be affected not just by current sensory input\\, bu\r\n t by recurrent patterns of activity from the recent past. To what degree is\r\n  such recurrent computation a canonical motif of neural computation that al\r\n lows our brains to integrate multiple timescales required for behavior? In \r\n this symposium\\, we explore emerging views of behaviors that unfold over di\r\n fferent timescales\\, and how recurrent neural computation can support these\r\n  behaviors.\\n\\nSign up to receive future updates about the symposium and ad\r\n ditional events\\n\\nMBCT Symposium 2026 - Featured SpeakersSpeakerInstitutio\r\n nTalk TitleJanice Chen\\n\\nJohns Hopkins University\\n\\nStudying memory for n\r\n atural events across multiple timescalesHidehiko Inagaki\\n\\nMax Planck Flor\r\n ida Institute for Neuroscience\\n\\nPerturbation experiments to dissect attra\r\n ctor dynamics for flexible motor timingCaroline A. Runyan\\n\\nUniversity of \r\n Pittsburgh\\n\\nState-dependent population codes across cortexKohitij KarYork\r\n  UniversityComputational model-guided insights into temporal dynamics of th\r\n e macaque ventral stream\r\nDTEND:20260305T020000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T210000Z\r\nLOCATION:Stanford Neurosciences Building | John A. and Cynthia Fry Gunn Rot\r\n unda\\, E241\r\nSEQUENCE:0\r\nSUMMARY:MBCT Symposium 2026: Linking Timescales of Behavior and Neural Acti\r\n vity through Recurrent Computation\r\nUID:tag:localist.com\\,2008:EventInstance_51910619143311\r\nURL:https://events.stanford.edu/event/mbct-symposium-2026-linking-timescale\r\n s-of-behavior-and-neural-activity-through-recurrent-computation\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Do you have questions about requirements and logistics surround\r\n ing your degree? Drop-In and get answers!\\n\\nThis is for current Earth Syst\r\n ems undergrad and coterm students.\r\nDTEND:20260304T223000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T213000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Drop-In Advising (Undergrad & Coterm majors)\r\nUID:tag:localist.com\\,2008:EventInstance_51932797184040\r\nURL:https://events.stanford.edu/event/earth-systems-drop-in-advising-underg\r\n rad-coterm-majors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Take a seat at a manual typewriter and create a limited edition\r\n \\, uncensored\\, unofficial publication to circulate from hand to hand.  Jus\r\n t like Eastern European dissidents used to do in the 1960's and 70's.  (Her\r\n e's an old-school\\, digitized example from Stanford Libraries' collections.\r\n )  Typewriters\\, carbon paper\\, onionskin paper all provided.  Hohbach Hall\r\n  lobby (Green Library\\, 1st floor\\, near the reference desk)\\, 2 - 4PM.\r\nDTEND:20260305T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T220000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, lobby/interactive zone\r\nSEQUENCE:0\r\nSUMMARY:Drop-In Samizdat* Workshop (*DIY Unofficial\\, Unsanctioned\\, Limite\r\n d Edition Publication)\r\nUID:tag:localist.com\\,2008:EventInstance_52003632623013\r\nURL:https://events.stanford.edu/event/samizdat\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:The Terman Engineering Library is pleased to have therapy dogs \r\n again this quarter. Please join us in the Y2E2 Courtyard on Wednesday\\, Mar\r\n . 4 from 3-4pm. Dog and owner teams from Pet Partners will be providing rel\r\n axation and stress relief. In the event of rain\\, look for us under the cov\r\n ered walkway.\\n\\nImage Credit: Michael Spencer\r\nDTEND:20260305T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260304T230000Z\r\nLOCATION:Science and Engineering Quad\\, Y2E2 Courtyard\r\nSEQUENCE:0\r\nSUMMARY:Take a break\\, pet a dog\r\nUID:tag:localist.com\\,2008:EventInstance_51763546248439\r\nURL:https://events.stanford.edu/event/copy-of-take-a-break-pet-a-dog-8702\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260305T013000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T003000Z\r\nGEO:37.429138;-122.17552\r\nLOCATION:Shriram Center\\, 104\r\nSEQUENCE:0\r\nSUMMARY:CEE 298 Structural Engineering and Mechanics Seminar - Seismic desi\r\n gn approaches for long-span bridges in high seismic zones\r\nUID:tag:localist.com\\,2008:EventInstance_51747587357902\r\nURL:https://events.stanford.edu/event/copy-of-cee-183-structural-engineerin\r\n g-and-mechanics-seminar-2210\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:From expanding affordable housing to governing AI systems\\, lea\r\n rn about the impact you can have by working in local government. Panelists \r\n include Libby Schaaf\\, Former Mayor of Oakland\\, Leila Doty\\, Privacy and A\r\n I Analyst\\, City of San Jose\\, and Dan Rich\\, Former City Manager of Mounta\r\n in View.\r\nDTEND:20260305T020000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T010000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall Central\\, Suite 30\\, Stanford\\, CA 94305-6045\\, Suite \r\n 30\r\nSEQUENCE:0\r\nSUMMARY:Serve Local: Careers in City Government Panel\r\nUID:tag:localist.com\\,2008:EventInstance_52211403373854\r\nURL:https://events.stanford.edu/event/tbd-local-government-panel\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Register Here\\n\\nTrying to choose a major? Interested in both t\r\n echnology and the humanities? Curious about what Science\\, Technology\\, and\r\n  Society (STS) is all about?\\n\\nMaybe you’re wondering how to combine inter\r\n ests like biology and history\\, communications and design\\, or even electri\r\n cal engineering and public policy. Or perhaps you want to know what you can\r\n  do with an STS degree beyond Stanford.\\n\\nJoin us (and enjoy some great fo\r\n od!) at the STS Prospective Majors Dinner\\, where we’ll answer all these qu\r\n estions and more.\\n\\nThe dinner will take place on Wednesday\\, March 4\\, 20\r\n 26\\, from 5:15–6:30 PM in the courtyard in front of Wilbur Dining Hall. Fee\r\n l free to stop by at any time during the event!\r\nDTEND:20260305T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T011500Z\r\nGEO:37.424579;-122.162803\r\nLOCATION:The courtyard in front of Wilbur Dining Hall\r\nSEQUENCE:0\r\nSUMMARY:STS Prospective Majors Dinner\r\nUID:tag:localist.com\\,2008:EventInstance_52083684686564\r\nURL:https://events.stanford.edu/event/sts-prospective-major-dinner\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change in Winter Quarter.\\n\\nThis all-\r\n levels yoga class offers a balanced\\, accessible practice designed to suppo\r\n rt both physical ease and mental clarity. Classes typically integrate mindf\r\n ul movement\\, breath awareness\\, and simple contemplative elements to help \r\n release accumulated tension while maintaining stability and strength. Postu\r\n res are approached with options and modifications\\, making the practice app\r\n ropriate for a wide range of bodies and experience levels. Emphasis is plac\r\n ed on sustainable movement\\, nervous system regulation\\, and cultivating pr\r\n actices that translate beyond the mat and into daily life.\\n\\nSara Elizabet\r\n h Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yoga Philosophy from the\r\n  Graduate Theological Union. Her dissertation\\, In Search of Sleep: A Compr\r\n ehensive Study of Yoga Philosophy\\, Therapeutic Practice\\, and Improving Sl\r\n eep in Higher Education\\, examines the integration of contemplative practic\r\n es within university settings. She joined the Stanford community in Spring \r\n 2024\\, where she has taught Sleep for Peak Performance and Meditation throu\r\n gh Stanford Living Education (SLED)\\, and currently teaches Yoga for Stress\r\n  Management in the Department of Athletics\\, Physical Education\\, and Recre\r\n ation (DAPER). Dr. Ivanhoe is the Founding Director Emeritus of YogaUSC and\r\n  previously lectured in USC’s Mind–Body Department\\, where she also served \r\n on faculty wellness boards. A practitioner and educator since 1995\\, she ha\r\n s completed three 500-hour teacher training programs. She has served as the\r\n  Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga for Dummies\\, and Crunc\r\n h: Yoga\\, and was the yoga columnist for Health magazine for three years. H\r\n er work has appeared in nearly every major yoga and wellness publication. I\r\n n 2018\\, she co-created Just Breathe\\, a yoga\\, breathwork\\, and meditation\r\n  initiative in partnership with Oprah Magazine. She is a recipient of USC’s\r\n  Sustainability Across the Curriculumgrant and the Paul Podvin Scholarship \r\n from the Graduate Theological Union. She currently serves as Interim Direct\r\n or of Events and Operations in Stanford’s Office for Religious and Spiritua\r\n l Life\\, where she also teaches weekly contemplative practice classes.\r\nDTEND:20260305T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Room 302)\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932582044228\r\nURL:https://events.stanford.edu/event/yoga-wednesdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event is co-sponsored by the Center for South Asia and the\r\n  Feminist\\, Gender\\, and Sexuality Studies.\\n\\nAbout the event\\nWhat does i\r\n t mean to describe statues as phallic objects? Taking this everyday observa\r\n tion as a point of departure\\, in this talk I ask what political performati\r\n ve work the putative phallicity of statues does. I will explore the landsca\r\n pe of iconographic rivalry along religious and caste lines in contemporary \r\n India before homing in on the Statue of Unity – currently the tallest statu\r\n e in the world – in the state of Gujarat. Built in the Narmada Valley\\, the\r\n  location of one of the most iconic struggles against the predatory ‘develo\r\n pmental’ state\\, I will suggest that the statue should be read as the trium\r\n phant capstone of a long running extractive project that is emblematic of p\r\n ostcolonial settler-colonial capitalism. In doing so\\, I will attempt to of\r\n fer a reading of the place of statues in ongoing processes of racial capita\r\n lism.  \\n\\nSpeaker's biography\\nRahul Rao is Reader in International Politi\r\n cal Thought in the School of International Relations at the University of S\r\n t Andrews\\, and Professorial Research Associate at SOAS University of Londo\r\n n. Prior to this he taught at SOAS and University College\\, University of O\r\n xford. He has a law degree from the National Law School of India University\r\n  and read for a DPhil in International Relations at Balliol College\\, Unive\r\n rsity of Oxford. He is the author of three books: The Psychic Lives of Stat\r\n ues: Reckoning with the Rubble of Empire (London: Pluto Press\\, 2025)\\, Out\r\n  of Time: The Queer Politics of Postcoloniality (New York: Oxford Universit\r\n y Press\\, 2020)\\, and Third World Protest: Between Home and the World (Oxfo\r\n rd: Oxford University Press\\, 2010). His work has been supported by fellows\r\n hips awarded by the Leverhulme Trust and the Netherlands Institute for Adva\r\n nced Study. He is a member of the Radical Philosophy editorial collective. \r\n His work has appeared in The Caravan and Himal Southasian.\r\nDTEND:20260305T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T013000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:The phallic lives of statues: notes from a Hindutva heartland\r\nUID:tag:localist.com\\,2008:EventInstance_50791392525543\r\nURL:https://events.stanford.edu/event/the-phallic-lives-of-statues-notes-fr\r\n om-a-hindutva-heartland\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Application to Graduate opens for Spring.\r\nUID:tag:localist.com\\,2008:EventInstance_49464216216551\r\nURL:https://events.stanford.edu/event/application-to-graduate-opens-for-spr\r\n ing-7807\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294348196\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355510251\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Axess opens for course enrollment. See Enrollment Groups for more i\r\n nformation (5:30 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464208408743\r\nURL:https://events.stanford.edu/event/axess-opens-for-course-enrollment-see\r\n -enrollment-groups-for-more-information\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353974334\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, Axess opens for undergraduate and graduate students \r\n to enroll in courses.\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Axess Opens for Course Enrollment\r\nUID:tag:localist.com\\,2008:EventInstance_50472522692432\r\nURL:https://events.stanford.edu/event/spring-quarter-axess-opens-for-course\r\n -enrollment-6471\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:With Guests Na'ama Rokem (U Chicago)\\, Simone Stirner (Harvard)\r\n \\,  Lucy Alford (Wake Forest)\\n\\nWorkshop Schedule:\\n\\nThursday\\, March 5\\,\r\n  2026\\n\\n9:45—10:00        Opening Remarks\\, Amir Eshel (Comparative Litera\r\n ture\\, Stanford)\\n10:00—10:45        Ostap Kin (Slavic Languages and Litera\r\n tures)\\, “When a Story Became a Threat: The Holocaust and Its Writing in Uk\r\n rainian Literature\\, 1945”\\n11:00—11:45        Letizia Ghibaudo (French and\r\n  Italian)\\, “What Remains: Visual-Verbal Strategies in the Aesthetics of Hi\r\n storical Trauma”\\n12:00—1:00        Lunch Break\\n1:00—1:45        Ariel Hor\r\n owitz (Comparative Literature)\\, “Jamaica Kincaid’s 'A Small Place' and the\r\n  Philosophy of History”\\n2:00—2:45        Hevin Karakurt (Comparative Liter\r\n ature)\\, “This is a Catastrophe! A Kurdish Poetics of Historiography in Pro\r\n se and Poetry”\\n3:00—3:45        Antje Gebhardt (German Studies)\\, “Entangl\r\n ed (Hi)Stories in Sharon Dodua Otoo’s novel 'Ada’s Realm'”\\n4:00—4:45      \r\n   Gilad Shiram (German Studies)\\, “’Transforming Birds of Prey into Sudden \r\n Angels’: History Transfigured in Zuzanna Ginczanka’s ‘Non omnis moriar’”\\n5\r\n :00—6:15        Round Table: Amir Eshel (Comparative Literature\\, Stanford)\r\n \\, Lucy Alford (English\\, Wake Forest University)\\, Simone Stirner (Germani\r\n c Languages and Literatures\\, Harvard)\\n\\nFriday\\, March 6\\, 2026\\n\\n10:00—\r\n 10:45        Jordan Virtue (History)\\, “’The Lyre of War’: Black Civil War \r\n Memory in Paul Laurence Dunbar”\\n11:00—11:45        Gary Huertas (Iberian a\r\n nd Latin American Cultures)\\, “Epistemologies of the Trace: Decolonial Memo\r\n ry\\, Aporias of Truth\\, and Hybrid Methodologies in post-agreement Colombia\r\n ”\\n12:00—1:00        Lunch Break\\n1:00—1:45        Jon Tadmor (Comparative \r\n Literature)\\, “Historicizing the Aesthetic Event: On the Enigmas of Natan A\r\n lterman’s 'Joy of the Poor' (1941)”\\n2:00—2:45        Anne Gross (English)\\\r\n , “The Newspaper as Aesthetic Form”\\n3:00—3:45        Christian Gonzalez Ho\r\n  (Art and Art History)\\, “Curating Darkness: Isaac Julien and the Politics \r\n of Memory”\\n4:00—4:45        Miri Powell (History)\\, “Has West-Coast Tech L\r\n ost the Mandate of Heaven?: Inquiries into a History-in-the-Making”\\n5:00—6\r\n :15        Round Table: Alexander Nemerov (Art and Art History\\, Stanford)\\\r\n , Na’ama Rokem (Comparative Literature\\, Chicago)\\, Alys George (German Stu\r\n dies\\, Stanford)\r\nDTSTAMP:20260308T083909Z\r\nDTSTART;VALUE=DATE:20260305\r\nLOCATION:\\, Room 216\r\nSEQUENCE:0\r\nSUMMARY:The Contemporary: Aesthetics and Poetics of the Historical Event\r\nUID:tag:localist.com\\,2008:EventInstance_51782298133250\r\nURL:https://events.stanford.edu/event/the-contemporary-aesthetics-and-poeti\r\n cs-of-the-historical-event\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Mark your calendar for an unforgettable day of inspiration\\, br\r\n eakthrough learning\\, and transformative connections at the 2026 Women's Le\r\n adership Summit.\\n\\nThis year\\, we are honored to welcome Yvonne (Bonnie) M\r\n aldonado\\, MD\\, as our keynote speaker. Recently appointed Vice Provost for\r\n  Faculty Advancement\\, Bonnie is a global leader in infectious disease rese\r\n arch\\, vaccine development\\, and public health impact.\\n\\nIn addition to ou\r\n r keynote speaker\\, the day will include engaging presentations and panel d\r\n iscussions with innovators and thought leaders\\, workshops on timely topics\r\n  to drive meaningful change\\, and networking opportunities to connect with \r\n inspiring professionals.\\n\\nThe program topics will include:\\n\\nDiscovering\r\n  Your Potential: Lessons Learned Along Our Leadership JourneysNegotiation: \r\n Getting (More of) What You WantLeadership in Difficult TimesArt and Wellnes\r\n sThe Power of Collaboration in LeadershipCreation\\, Collaboration\\, and Com\r\n municationEmpowering the InvestorCultivating ExcellenceAnd More!\\n Registra\r\n tion:\\n\\nEarly Bird Admission $425.00 (available through February 3\\, 2026)\r\n \\nGeneral Admission $475.00 (available February 4 - February 27\\, 2026\\, or\r\n  until tickets sell out)\\n\\nRegistration includes access to all sessions\\, \r\n continental breakfast\\, lunch and closing reception.\\n\\nThe registration fo\r\n rm includes an opportunity to request accommodations for disabilities and f\r\n or dietary restrictions and allergies.\r\nDTEND:20260306T011500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T150000Z\r\nGEO:37.422836;-122.167936\r\nLOCATION:Paul Brest Hall\r\nSEQUENCE:0\r\nSUMMARY:2026 Women's Leadership Summit\r\nUID:tag:localist.com\\,2008:EventInstance_51968863660985\r\nURL:https://events.stanford.edu/event/2026-womens-leadership-summit\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260306T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51525252087718\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-1376\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:This 6-session support group\\, co-facilitated by two MHT clinic\r\n ians\\, offers a student-centered space to show up as you are\\, connect with\r\n  peers\\, and build community.\\n\\nTogether we’ll explore ways to navigate ac\r\n ademic and professional stress\\, manage anxiety\\, reflect on identity-relat\r\n ed experiences\\, and address impostor feelings- along with other student-le\r\n d topics. The group also fosters moments of joy and connection as part of t\r\n he healing process.\\n\\nThis group is held on Thursdays 8:30-9:30 AM\\, start\r\n ing January 22\\, 2026. Meeting dates for winter quarter are 1/22\\; 1/29\\; 2\r\n /5\\; 2/12\\; 2/26\\; 3/5. Sessions are both virtual and in-person.  In-person\r\n  dates are 1/29\\; 2/12\\; 3/5.\\n\\nA meeting with a facilitator is required t\r\n o join this group. You can sign up on the on \"*INTEREST_LIST_SOM_Students_o\r\n f_Color_GROUP_WINTER_Q\" on the Vaden Portal rosters\\, in the \"Groups and Wo\r\n rkshops\" section. A facilitator will reach out to you to schedule a pre-gro\r\n up meeting.\\n\\nOpen to all registered BioSci PhD/MS\\, MSPA\\, and MD student\r\n s in the School of Medicine.Facilitated by Isela Garcia White\\, LCSW and Ma\r\n riko Sweetnam\\, LCSW\r\nDTEND:20260305T173000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T163000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:(School of Medicine) Students of Color Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51508879960551\r\nURL:https://events.stanford.edu/event/copy-of-school-of-medicine-students-o\r\n f-color-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260306T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910822598\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260305T180000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353495937\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260306T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382768302\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:This is a queer and trans affirming discussion group for staff\\\r\n , faculty\\, and post-docs . The group aims to create a space where LGBTQIA+\r\n  community members can connect and talk about topics of interest\\, moments \r\n of excitement\\, and challenges they are facing. The group centers the exper\r\n ience of LGBTQIA+ people\\, while being open to all. Based on the availabili\r\n ty of Help Center staff\\, group facilitators may or may not be Queer-identi\r\n fying and/or Questioning.\r\nDTEND:20260305T185000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:LGBTQIA+ Conversations with Colleagues\r\nUID:tag:localist.com\\,2008:EventInstance_51456071370200\r\nURL:https://events.stanford.edu/event/lgbtqia-conversations-with-colleagues\r\n -4086\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join the Department of African & African American Studies (DAAA\r\n S) students and staff in the DAAAS Office for a Student Grab-N-Go! Make a q\r\n uick stop to pick-up waffles and boba from Mochi Waffle Co.!Take a break fr\r\n om your studies and “Grab-N-Go” with some delicious treats or stay to join \r\n the fun with games and music in the DAAAS office! All students are welcome!\r\n \\n\\nRSVP HERE\r\nDTEND:20260305T220000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 80\r\nSEQUENCE:0\r\nSUMMARY:DAAAS Student Grab-N-Go! \r\nUID:tag:localist.com\\,2008:EventInstance_52066654429491\r\nURL:https://events.stanford.edu/event/daaas-student-grab-n-go\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260306T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561122150\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Glaciology is driven by two fundamental goals: to understand ho\r\n w ice sheets will evolve in a warming climate and contribute to future sea-\r\n level rise\\, and to understand how ice sheets behaved in the past\\, providi\r\n ng insight into Earth’s possible climate states. Both goals require observi\r\n ng how ice flows and deforms—ideally from within the ice itself—yet doing s\r\n o has long been limited by the difficulty of deploying and coupling borehol\r\n e geophysical instruments in glacial environments. In this talk\\, I present\r\n  borehole fiber-optic sensing experiments from two glaciers at opposite end\r\n s of the cryosphere: Store Glacier\\, a fast-flowing outlet glacier of the G\r\n reenland Ice Sheet central to projections of sea-level rise\\, and the Allan\r\n  Hills of East Antarctica\\, home to the oldest (and perhaps most unusually \r\n preserved) ice on Earth and a critical archive of past climates spanning th\r\n e Mid-Pleistocene Transition and late Miocene. At Store Glacier\\, fiber sen\r\n sing captures signals of active deformation and basal processes in a dynami\r\n cally evolving system. In contrast\\, measurements from the thin\\, cold ice \r\n of the Allan Hills reveal mechanical behavior in an ancient\\, low-strain en\r\n vironment where conventional borehole seismology is especially problematic.\r\n  Together\\, these case studies demonstrate how fiber-optic sensing provides\r\n  a powerful new window into glacier mechanics across both future-facing and\r\n  past-facing glaciological problems.\\n\\n \\n\\n   Speaker-suggested reading: \r\n     \\n\\n\\n\\n\\n\\n\\n\\nMiocene and Pliocene ice and air from the Allan Hills b\r\n lue ice area\\, East Antarctica\\, Proc. Natl. Acad. Sci. U.S.A. 122 (44) e25\r\n 02681122\\, https://doi.org/10.1073/pnas.2502681122 (2025).\r\nDTEND:20260305T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Geophysics Seminar - Brad Lipovsky\\, \"Fiber Sensing at the Bookends\r\n  of Glaciology\"\r\nUID:tag:localist.com\\,2008:EventInstance_52030991350755\r\nURL:https://events.stanford.edu/event/geophysics-seminar-brad-lipovsky-fibe\r\n r-sensing-at-the-bookends-of-glaciology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:How did Taiwan\\, a former Japanese colony and the last fortress\r\n  of the defeated Chinese Nationalists\\, ascend to such heights in high-tech\r\n  manufacturing? Island Tinkerers tells the critical history of how hobbyist\r\n s and enthusiasts in Taiwan\\, including engineers\\, technologists\\, technoc\r\n rats\\, computer users\\, and engineers-turned-entrepreneurs\\, helped transfo\r\n rm the country with their hands-on engagement with computers. Rather than e\r\n ngaging in wholesale imitation of US sources\\, these technologists tinkered\r\n  with imported computing technology and experimented with manufacturing the\r\n ir own versions\\, resulting in their own brand of successful innovation.\\n\\\r\n nIsland Tinkerers challenges the stereotype of “the West innovates\\, and th\r\n e East imitates.” Beginning in the 1960s\\, technologists grappled with the \r\n “black-boxed” computers that were newly available through international tec\r\n hnical-aid programs. Shortly after\\, multinational corporations that outsou\r\n rced transistor and integrated circuit assembly overseas began employing Ta\r\n iwanese engineers and factory workers. Island tinkerers developed strategie\r\n s to adapt\\, modify\\, assemble\\, and work with computers in an inventive ma\r\n nner. It was through this creative and ingenious tinkering with computers t\r\n hat they were able to gain a better understanding of the technology\\, openi\r\n ng the door to future manufacturing endeavors that now include Acer\\, Foxco\r\n nn\\, Asus\\, and Taiwan Semiconductor Manufacturing Company (TSMC).\\n\\nJoin \r\n us at the Shorenstein APARC Taiwan Program as we hear from author and Profe\r\n ssor Honghong Tinn about how Taiwan became one of the leading technology ma\r\n nufacturers of today.\\n\\nSpeaker: Honghong Tinn is an assistant professor i\r\n n the Program in the History of Science\\, Technology\\, and Medicine and the\r\n  Department of Electrical and Computer Engineering at the University of Min\r\n nesota Twin Cities. She is also a McKnight Land-Grant Professor (2025-2027)\r\n  at the University of Minnesota. She received her Ph.D. in Science & Techno\r\n logy Studies from Cornell University. Her publications have appeared in Tec\r\n hnology and Culture\\, Osiris\\, IEEE Annals of the History of Computing\\, an\r\n d East Asian Science\\, Technology and Society. She is author of Island Tink\r\n erers: Innovation and Transformation in the Making of Taiwan’s Computing In\r\n dustry (MIT Press\\, 2025) and a co-author of Computer: A History of the Inf\r\n ormation Machine\\, 4th ed (Routledge\\, 2023). She is an Associate Editor of\r\n  IEEE Annals of the History of Computing\\, and was an elected member of the\r\n  Executive Council (2017-2019) and the Nominating Committee (2023-2025) of \r\n the Society for the History of Technology.\r\nDTEND:20260305T211500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, Philippines Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Island Tinkerers: Innovation and Transformation in the Making of Ta\r\n iwan’s Computing Industry - Book Talk with Honghong Tinn\r\nUID:tag:localist.com\\,2008:EventInstance_52055609659869\r\nURL:https://events.stanford.edu/event/island-tinkerers-innovation-and-trans\r\n formation-in-the-making-of-taiwans-computing-industry-book-talk-with-hongho\r\n ng-tinn\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:ocieties transitioning from conflict and/or authoritarianism ha\r\n ve increasingly built Transitional Justice (TJ) museums to explore their le\r\n gacies of violence and repression\\, and to contribute to a culture of democ\r\n racy\\, pluralism\\, and societal reconciliation. However\\, until recently\\, \r\n the impact of such museums had been assumed and not rigorously evaluated. T\r\n his talk will be presenting results of three different experimental studies\r\n  conducted in TJ museums/exhibits around the world: the Museum of Memory an\r\n d Human Rights in Santiago\\, Chile (with Valeria Palanza and Elsa Voytas)\\,\r\n  the \"Troubles and Beyond\" exhibit in the Ulster Museum in Belfast\\, Northe\r\n rn Ireland (with Elsa Voytas)\\, and the United States Holocaust Memorial Mu\r\n seum in Washington\\, DC (with Francesca Parente and Ethan vanderWilden). Th\r\n e talk will offer comparative lessons from these three studies. In addition\r\n \\, it will present evidence from a recently built TJ museum database (with \r\n vanderWilden and Voytas) with the goal to examine macro-level patterns of p\r\n ost-conflict memorialistic initiatives around the world.\\n\\nABOUT THE SPEAK\r\n ER\\n\\nLaia Balcells is the Christopher F. Gallagher Family Professor of Gov\r\n ernment at Georgetown University\\, where she is also core faculty of the M.\r\n A. in Conflict Resolution\\, and a faculty affiliate of Gui2de\\, the BMW Cen\r\n ter for German and European Studies\\, and the Center for Latin American Stu\r\n dies (CLAS).\\n\\nBalcells's research and teaching are at the intersection of\r\n  comparative politics and international relations. She received my BA (with\r\n  highest distinction) in Political Science from Universitat Pompeu Fabra (B\r\n arcelona)\\, including a full academic year as an Erasmus student at Science\r\n s Po (Toulouse). Balcells began her graduate studies at the Juan March Inst\r\n itute (Madrid)\\, and earned her Ph.D. from Yale University.\\n\\nBalcells has\r\n  been an Assistant Professor of Political Science at Duke University (2012-\r\n 2017)\\, a Niehaus Visiting Associate Research Scholar at the School of Publ\r\n ic and International Affairs at Princeton University (2015-16)\\, and Chair \r\n of Excellence at Universidad Carlos III de Madrid (2017).\\n\\nHer first book\r\n \\, Rivalry and Revenge: the Politics of Violence during Civil War\\, was pub\r\n lished in 2017 by Cambridge University Press (Cambridge Studies in Comparat\r\n ive Politics). The book  was a runner-up for the Conflict Research Society \r\n Book of the Year Award (2018).\r\nDTEND:20260305T211500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Laia Balcells — The Impact of Transitional Justice Museums: Compara\r\n tive Evidence from three Randomized Control Trials\r\nUID:tag:localist.com\\,2008:EventInstance_51808863617025\r\nURL:https://events.stanford.edu/event/laia-balcells-the-impact-of-transitio\r\n nal-justice-museums-comparative-evidence-from-three-randomized-control-tria\r\n ls\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Other\r\nDESCRIPTION:The Molecular Imaging Program at Stanford (MIPS) was establishe\r\n d as an inter-disciplinary program in 2003 by the Dean of the School of Med\r\n icine (Dr. Philip Pizzo) and brings together scientists and physicians who \r\n share a common interest in developing and using state-of-the-art imaging te\r\n chnology and developing molecular imaging assays for studying intact biolog\r\n ical systems. The inaugural director was Dr. Sanjiv Sam Gambhir\\, Virginia \r\n & D.K. Ludwig Professor of Cancer Research and Chair of the Department of R\r\n adiology from 2003 to 2020. MIPS hosts a seminar series that is open and fr\r\n ee to everyone in the Stanford community. Our next seminar will host Peder \r\n Larson\\, PhD\\, for a presentation titled\\, “Cardiopulmonary MRI in Two Part\r\n s: Metabolic Imaging in the Heart with Hyperpolarized 13C MRI\\, and Methods\r\n  for MRI in the Lungs.”\\n\\n \\n\\nLocation: Zoom & Clark\\, S360\\nZoom Webinar\r\n  Details\\nWebinar URL: https://stanford.zoom.us/s/92078802008\\nDial US: +1 \r\n 650 724 9799 or +1 833 302 1536\\nWebinar ID: 920 7880 2008\\nPasscode: 23680\r\n 6\\n\\n \\n\\nHosted by: Michelle James\\, PhD\\nSponsored by: Molecular Imaging \r\n Program at Stanford & the Department of Radiology\r\nDTEND:20260305T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, S360\r\nSEQUENCE:0\r\nSUMMARY:MIPS Seminar - Peder Larson\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_52155203889607\r\nURL:https://events.stanford.edu/event/copy-of-mips-seminar-jorgen-arendt-je\r\n nsen-mscee-phd-drtechn\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The period after the so-called “Golden Age of Islam” has been l\r\n argely dismissed as a time of radical \"decline\\,\" often blamed on the “dogm\r\n atism” of Islam and evidenced by a deluge of derivative commentaries on the\r\n ir more illustrious predecessors\\, with little original work of their own. \r\n Recent trends in post-classical (~14th-18th centuries CE) Islamic intellect\r\n ual history\\, however\\, have sought to reclaim this period as intellectuall\r\n y dynamic\\, with a set of epistemic priorities that were coherent\\, albeit \r\n different from our own. In this talk\\, I examine a set of mathematical manu\r\n scripts on geometry to demonstrate that these were not “mere commentaries” \r\n nor merely Greek mathematics in Arabic (as is routinely claimed). Rather\\, \r\n these texts show that in the postclassical period\\, there was a distinct sh\r\n ift away from Greek epistemologies and discursive traditions to new Islamic\r\n  ones into which they wrote their achievements. \\n\\n \\n\\n\\n\\nJulia Tomasson\r\n  is an Assistant Professor of Premodern Science and Technology at Rice Univ\r\n ersity.  Tomasson is a scholar of global histories of science and mathemati\r\n cs\\, early modernity\\, the post-classical Islamicate world\\, and the histor\r\n y of ideas and knowledge more broadly.  Her work historicizes epistemic con\r\n cepts that we take for granted like reason\\, proof\\, and authority\\, drawin\r\n g upon examples from across Afro-Eurasia\\, grounded in manuscript material \r\n from Fez to Oxford to Isfahan. She recently completed her Ph.D. in History \r\n from Columbia University and her A.B. in HiPSS (History\\, Philosophy\\, and \r\n Social Studies of Science) from the University of Chicago. She is in the pr\r\n ocess of turning her  dissertation into a first monograph tentatively entit\r\n led: “Polygons and Polyphony: Arabic Mathematics after the Golden Age.”\r\nDTEND:20260305T213000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Polygons and Polyphony: Traditions of Arabic Geometry in the Post-C\r\n lassical Islamicate World | Julia Tomasson\r\nUID:tag:localist.com\\,2008:EventInstance_49836476127122\r\nURL:https://events.stanford.edu/event/polygons-and-polyphony\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260305T201500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762176813\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Most 19th-century people enslaved in Africa remained on the Afr\r\n ican continent\\, yet we know relatively little about slavery and freedom in\r\n  Africa. For descendant communities\\, and those around the world who contin\r\n ue to live in slavery’s centuries-long repercussions\\, this project opens a\r\n ccess to sources\\, tools\\, and analysis to craft a fuller and more just nar\r\n rative of this fraught moment in global history. This is especially true in\r\n  Senegal\\, where the stigma in enslaved descent continues to stifle equity \r\n and social mobility. The source for this project is the colonial era Regist\r\n ers of Liberation (1857–1903)\\, which documents 28\\,349 enslaved Africans i\r\n n Senegal who presented themselves to French colonial officials to request \r\n certificates of liberty. Each entry tells an untold story of an enslaved pe\r\n rson actively seeking freedom\\, often through enormous challenges. Taken to\r\n gether\\, they provide crucial evidence on the enslaved population and paths\r\n  they took towards freedom.  \\n\\nLunch at 11:45 a.m. for in-person attendee\r\n s\\n\\nRegister to join online\\n \\n\\nAbout the Speaker\\n\\nRichard Roberts is \r\n the Frances and Charles Field Professor of History Emeritus at Stanford and\r\n  has published widely in the social\\, economic\\, and legal history of Frenc\r\n h West Africa. He has published four monographs\\, two of which have been tr\r\n anslated into French\\, and co-edited 12 books or special editions of journa\r\n ls. His most recent book is Conflicts of Colonialism: The Rule of Law\\, Fre\r\n nch Soudan\\, and Faama Mademba Sèye\\, published by Cambridge University Pre\r\n ss\\, and his most recent collection co-edited with Walter Hawthorne\\, Fatou\r\n mata Seck\\, and Rebecca Wall was “The Politics and Ethics of Naming the Nam\r\n es of Enslaved People in Digital Humanities Projects\\,” was published by Di\r\n gital Humanities Quarterly in 2025.\r\nDTEND:20260305T210000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T201500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 433A\r\nSEQUENCE:0\r\nSUMMARY:Richard Roberts | The Senegal Liberations Project\r\nUID:tag:localist.com\\,2008:EventInstance_52214972989013\r\nURL:https://events.stanford.edu/event/richard-roberts-the-senegal-liberatio\r\n ns-project\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260305T204500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794466069\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260305T230000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491610516\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:“Communication for Action: Doing It and Doing It Socially”\\n\\nT\r\n his talk will begin with the premise that even though humans evolved for ac\r\n tion and social coordination\\, communication programs are often dissociated\r\n  from these principles. I will describe experiments to determine whether an\r\n d how to promote action through the introduction of explicit or implicit be\r\n havioral information\\, recommendations to perform rather than not perform a\r\n  behavior\\, and directions to start rather than stop a behavior. I will the\r\n n show how artificial intelligence can be used to optimize action-oriented \r\n communications aligned with these principles\\, concluding with the results \r\n of a large-scale randomized controlled trial in underserved areas of the Un\r\n ited States.\\n\\nBiography\\n\\nDolores Albarracín studies the impact of commu\r\n nication and persuasion on human behavior and the formation of beliefs\\, at\r\n titudes\\, and goals\\, particularly those that are socially beneficial. In a\r\n ddition to an interest in basic attitudinal processes\\, she is interested i\r\n n finding ways of intervening to promote positive social interactions and p\r\n ublic policies.\r\nDTEND:20260305T223000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T211500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Environmental Behavioral Sciences Seminar with Dolores Albarracin\r\nUID:tag:localist.com\\,2008:EventInstance_50710416809670\r\nURL:https://events.stanford.edu/event/environmental-behavioral-sciences-sem\r\n inar-with-dolores-albarracin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Date and Time: 3:00–4:30PM\\, Thursday\\, March 5\\, 2026Location:\r\n  Velma Denning Room (120F)\\, Bing Wing\\, Green LibraryLead Instructor: Dr. \r\n Jooyeon Hahm (Head of Data Science Training & Consultation)Learn to transfo\r\n rm your data into clear\\, effective visualizations by mastering the fundame\r\n ntals of data visualization and matplotlib syntax\\, with AI as your coding \r\n assistant. This hands-on workshop emphasizes core visualization principles \r\n and practical matplotlib skills\\, teaching you when and why to use differen\r\n t chart types (bar charts\\, line plots\\, scatter plots\\, histograms\\, and m\r\n ore)\\, how to make design choices that enhance clarity (color\\, layout\\, la\r\n bels\\, and annotations)\\, and common visualization mistakes to avoid. You'l\r\n l learn matplotlib's syntax and structure\\, including its object-oriented a\r\n pproach (figures\\, axes\\, subplots)\\, essential plotting commands and custo\r\n mization options. Throughout the workshop\\, you'll leverage AI tools like S\r\n tanford's AI Playground to accelerate your coding by crafting effective pro\r\n mpts for specific visualization needs\\, iterating and refining AI-generated\r\n  code\\, and debugging outputs.\\n\\nBring Your Own Data (BYOD)! This workshop\r\n  works best when you apply concepts to your own datasets. Bring a dataset y\r\n ou'd like to visualize\\, or use provided sample data. Expect hands-on pract\r\n ice creating visualizations with guided AI assistance.\\n\\nPlease register t\r\n o attend. Registration is exclusively open to current Stanford Affiliates a\r\n nd will be offered on a first-come\\, first-served basis. Given the limited \r\n space\\, a waitlist will be available once all spots are filled. (Please can\r\n cel your registration if you can’t make it.)\\n\\nFor those attending the in-\r\n person event\\, please bring your Stanford ID card or mobile ID to enter the\r\n  library.\r\nDTEND:20260306T003000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T230000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Velma Denning Room (120F)\r\nSEQUENCE:0\r\nSUMMARY:Data Visualization in Python (AI-Assisted Coding)\r\nUID:tag:localist.com\\,2008:EventInstance_51773092855268\r\nURL:https://events.stanford.edu/event/data-visualization-in-python-ai-assis\r\n ted-coding\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Offered by Counseling and Psychological Services (CAPS) and the\r\n  Graduate Life Office (GLO)\\, this is a six-session (virtual) group where y\r\n ou can vent\\, meet other graduate students like you\\, share goals and persp\r\n ectives on navigating common themes (isolation\\, motivation\\, relationships\r\n )\\, and learn some helpful coping skills to manage the stress of dissertati\r\n on writing.\\n\\nIf you’re enrolled this fall quarter\\, located inside the st\r\n ate of California\\, and in the process of writing (whether you are just sta\r\n rting\\, or approaching completion) please consider signing up.\\n\\nIdeal for\r\n  students who have already begun the dissertation writing process. All enro\r\n lled students are eligible to participate in CAPS groups and workshops. A g\r\n roup facilitator may contact you for a pre-group meeting prior to participa\r\n tion in Dissertation Support space.\\n\\nFacilitated by Cierra Whatley\\, PhD \r\n & Angela Estrella on Thursdays at 3pm-4pm\\; 2/5\\; 2/12\\; 2/19\\; 2/26\\; 3/5\\\r\n ; 3/12\\, virtualJoin at any point in the Quarter. Sign up on the Graduate L\r\n ife Office roster through this link.\r\nDTEND:20260306T000000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Dissertation Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51782991493055\r\nURL:https://events.stanford.edu/event/copy-of-dissertation-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: This project presents the concept of wartime a\r\n ccess—decisions by states to let other states fight wars from inside their \r\n borders—and establishes its centrality to U.S. power projection. Although p\r\n ermissive wartime access has been a defining feature of the post-1945 world\r\n \\, states do not always let the United States military in. States sometimes\r\n  restrict access sharply or deny it altogether. This project asks\\, why do \r\n states sometimes grant\\, sometimes restrict\\, and sometimes deny wartime ac\r\n cess? It argues that the general trend of permission is attributable to sta\r\n tes’ expectations that they will derive security benefits from the United S\r\n tates in exchange for granting access\\, and that the United States will pro\r\n tect them from retaliation by the target and help them manage any spillover\r\n  from the war. While security factors tend to point states towards granting\r\n  access\\, states tend to deny or heavily restrict access when the domestic \r\n political costs of open alignment with the United States are prohibitively \r\n high. The study develops a new dataset of 85 partner access decisions acros\r\n s eleven U.S.-led wars since 1945 and conducts paired comparisons of wartim\r\n e access decisions within each war. The project concludes with a discussion\r\n  of policy implications\\, with particular attention to wartime access in th\r\n e context of a hypothetical U.S. effort to defend Taiwan.\\n\\nAbout the spea\r\n ker: Rachel Metz is an Assistant Professor of Political Science and Interna\r\n tional Affairs at The George Washington University. Metz’s research and tea\r\n ching focus on international security\\, security assistance and security co\r\n operation\\, military effectiveness\\, nuclear strategy\\, and methods for stu\r\n dying military operations. Her book project examines the United States’ app\r\n roach to building militaries in partner states\\, and her research has been \r\n published in International Organization\\, International Security\\, Security\r\n  Studies\\, International Studies Quarterly\\, Journal of Strategic Studies\\,\r\n  Foreign Affairs\\, The Washington Quarterly\\, H-Diplo\\, War on the Rocks\\, \r\n Lawfare\\, The National Interest\\, and The Washington Post\\, among other out\r\n lets.\\n\\nMetz received her Ph.D. in Political Science from the Massachusett\r\n s Institute of Technology\\, where she was a member of the Security Studies \r\n Program. Her work has received funding from the Smith Richardson Foundation\r\n \\, Defense Security Cooperation University\\, and the Carnegie Corporation. \r\n Previously\\, Metz was a professor at the U.S. Naval War College\\, an adjunc\r\n t researcher for the RAND Corporation\\, and a Eurasia Group Fellow with the\r\n  Eurasia Group Foundation. Metz is a research affiliate at MIT.\r\nDTEND:20260306T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260305T233000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Military Access: The Bedrock of U.S. Power Projection\r\nUID:tag:localist.com\\,2008:EventInstance_52180531784152\r\nURL:https://events.stanford.edu/event/military-access-the-bedrock-of-us-pow\r\n er-projection\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Welcome to QTrees\\, a supportive and inclusive space designed s\r\n pecifically for queer Stanford students navigating their unique journeys.\\n\r\n \\nThis group during Winter quarter provides a safe\\, affirming environment \r\n where members can explore their LGBTQ+ identities\\, share experiences\\, and\r\n  find solidarity with others who understand their struggles and triumphs.\\n\r\n \\nQTrees will meet for 60 mins\\, weekly for 5 weeks\\, with the same people \r\n each week.Facilitated by Christine Catipon\\, PsyDAll enrolled students are \r\n eligible to participate in CAPS groups and workshops.Meeting with a facilit\r\n ator is required to join this group. You can sign up on the INTEREST LIST_Q\r\n Trees_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in the \"Groups and Works\r\n hops\" section. The location of the group will be provided upon completion o\r\n f the pre-group meeting with the facilitator.\r\nDTEND:20260306T010000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:QTrees\r\nUID:tag:localist.com\\,2008:EventInstance_51101143951437\r\nURL:https://events.stanford.edu/event/qtrees-4683\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance,Lecture/Presentation/Talk\r\nDESCRIPTION:Visiting pianist Daniel Shapiro will host a masterclass with St\r\n anford piano students\\, free and open to the public.\\n\\nDaniel Shapiro cont\r\n inues to gain recognition as a leading interpreter of Schubert\\, Mozart\\, S\r\n chumann\\, Brahms and Beethoven\\, and as a teacher and coach at the Clevelan\r\n d Institute of Music. As a chamber musician\\, Shapiro has performed regular\r\n ly with members of The Cleveland Orchestra\\, Chicago Symphony and Los Angel\r\n es Philharmonic. \\n\\nHis musicianship has been enhanced and deepened by ext\r\n ensive collaboration with singers\\; listening to and working with them has \r\n been a source of tremendous inspiration. Over the past twenty-five years\\, \r\n he has built a strong reputation as a dedicated and thoughtful pedagogue wh\r\n o helps students find the paths to penetrating interpretations of the works\r\n  they study.\\n\\nAdmission Information\\n\\nFree admission\r\nDTEND:20260306T020000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T003000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Daniel Shapiro Piano Masterclass\r\nUID:tag:localist.com\\,2008:EventInstance_51463329931257\r\nURL:https://events.stanford.edu/event/daniel-shapiro-masterclass-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Ralf Hotchkiss\\nWhirlwind Wheelchair International\\n\\nAbstract:\r\n  Ralf Hotchkiss will track the design of the Whirlwind Wheelchair from its \r\n beginning thirty years ago to the present and on into the future. From the \r\n first design breakthroughs of barefoot blacksmiths to the high tech testing\r\n  and manufacturing methods of today\\, surprise breakthroughs in basic wheel\r\n chair design have come from the backyard inventors of some forty developing\r\n  countries. These inventors form the Whirlwind Network of wheelchair riders\r\n  and designers. Their goal is not only to make wheelchairs available in the\r\n  poorest of countries\\; it is to radically improve the durability and rough\r\n -ground mobility so that wheelchair riders can live and work in environment\r\n s that they can only dream of visiting today. Ralf will show unfinished des\r\n igns that open wide opportunities for new developments and he will make a p\r\n lea for the innovative designers of Stanford to enter into one of today's m\r\n ost fulfilling areas of invention and international development work. Joini\r\n ng Ralf will be Telma Ramos\\, a wheelchair builder from Nicaragua\\, who wil\r\n l show simplified\\, more efficient fabrication of Whirlwind Wheelchair's la\r\n test designs.\\n\\nBiosketch: Ralf Hotchkiss is an inventor and the lead desi\r\n gner of Whirlwind Wheelchair International\\, a non-profit company located i\r\n n Berkeley. Its mission is \"to make it possible for every person in the dev\r\n eloping world who needs a wheelchair to obtain one that will lead to maximu\r\n m personal independence and integration into society\". At SFSU\\, he taught \r\n \"Wheelchair Design and Construction\"\\, a course in which students built a c\r\n omplete wheelchair in a Third World appropriate shop. Ralf is a graduate of\r\n  Oberlin College (Physics) and a 1989 MacArthur Foundation Fellow.\\n\\nPersp\r\n ectives in Assistive Technology Course Website\\n\\nClassroom Loczation & Acc\r\n essibility Information\\n\\nVisit this website for more information\r\nDTEND:20260306T015000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T003000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, Classroom 282\r\nSEQUENCE:0\r\nSUMMARY:Wheelchair Fabrication in Developing Countries\r\nUID:tag:localist.com\\,2008:EventInstance_52242803112141\r\nURL:https://events.stanford.edu/event/wheelchair-fabrication-in-developing-\r\n countries-3947\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Austin Anderson\\, PhD\\n\\n\\nStudying a work of literature is dis\r\n tinct from reading\\, and literary studies has developed techniques ranging \r\n from close reading to historicism to computational analysis in order to stu\r\n dy and teach works of literature. Similar techniques are required when stud\r\n ying and teaching video games. As part of the inaugural programming for the\r\n  Critical Game Studies Lab\\, this workshop introduces the technique of clos\r\n e playing as a method for analytically playing video games. Originally deve\r\n loped by Ed Chang and Timothy Welsh and subsequently iterated upon by the f\r\n ield of game studies\\, close playing involves analyzing how the structures \r\n of games—visual design\\, audio cues\\, mechanics\\, player interaction\\, gene\r\n ric conventions\\, and more—generate meaning within video games. This intera\r\n ctive workshop will focus on gaming pedagogy by looking at three excerpts o\r\n f games and asking participants to close play them. We will leave the works\r\n hop with a better understanding of the study of games and the key technique\r\n s required for gaming pedagogy. \\n\\nRSVP\\n \\n\\nAbout the Speaker\\n\\nAustin \r\n Anderson (he/him) is a Provostial Fellow\\, housed in the English Department\r\n \\, at Stanford University who studies video games\\, race\\, and class. His f\r\n irst book project\\, Racial Recursivity: Play\\, Race\\, and Neoliberalism in \r\n Contemporary Video Games\\, creates a ludic-textual framework for reading vi\r\n deo games as racial cultural projects. His work has appeared in the Journal\r\n  of Gaming & Virtual Worlds\\, The Comparatist\\, Popular Culture Review\\, an\r\n d other outlets. He is currently is co-organizing a volume (with David Hall\r\n ) that explores Japanese videogame perspectives on Western aesthetics. He r\r\n eceived his PhD in English from Howard University in 2025.\r\nDTEND:20260306T020000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T010000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 428\r\nSEQUENCE:0\r\nSUMMARY:Austin Anderson | Close Playing Video Games Workshop \r\nUID:tag:localist.com\\,2008:EventInstance_52216497254762\r\nURL:https://events.stanford.edu/event/austin-anderson-close-playing-video-g\r\n ames-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Paper 1 : Optimal Payment Levels for Reference-Dependent Physic\r\n ians\\n\\nAbstract: Prospective payment policies\\, which set a fixed payment \r\n for a bundle of services regardless of providers’ actual costs\\, are widely\r\n  used across sectors. However\\, when the fixed payment level deviates from \r\n providers’ familiar\\, preexisting revenue\\, the introduction of such polici\r\n es may induce behavioral distortions if providers exhibit reference-depende\r\n nt preferences. This study investigates the optimal payment level under thi\r\n s policy by leveraging the healthcare context. We develop a collective mode\r\n l of medical decision-making and incorporate physicians’ reference-dependen\r\n t preferences into this collective framework. Our structural estimates reve\r\n al that both patients and physicians play active roles in medical decisions\r\n \\, with physicians placing 3.5 times more weight on perceived losses than g\r\n ains. The fixed payment level\\, by shaping physicians’ perceptions of gains\r\n  and losses\\, crucially affects both treatment and welfare outcomes. Throug\r\n h welfare analysis\\, we derive the optimal payment level that reduces healt\r\n hcare expense while maintaining patient health benefits.\\n\\nSpeaker: Wei Ya\r\n n is an Assistant Professor at the School of Finance\\, Renmin University of\r\n  China. She received her Ph.D. in Economics from the National University of\r\n  Singapore. Her research in health economics studies the interactions among\r\n  healthcare providers\\, patients\\, and insurers\\, with a focus on understan\r\n ding how differing incentive structures and information asymmetries between\r\n  these key players affect their decisions and generate inefficiencies in he\r\n althcare markets.\\n\\nPaper 2: Fear and Risk Perception: Understanding Physi\r\n cians' Dynamic Responses to Malpractice Lawsuits\\n\\nAbstract: Using linked \r\n health insurance claims and malpractice lawsuit records from a Chinese city\r\n \\, we study how lawsuits shape physicians’ behavior. After lawsuits\\, physi\r\n cians practice more defensively—rejecting high-risk patients\\, reducing sur\r\n geries\\, and increasing diagnostic tests and traditional Chinese medicine—w\r\n ithout improving outcomes. The effects spread to unaffected departments and\r\n  fade in eight weeks. Evidence suggests psychological rather than financial\r\n  drivers: similar responses regardless of hospitals’ prior exposure or liti\r\n gation outcomes\\; reactions to patient deaths vary with the recency of the \r\n lawsuit\\; and responses intensify after violent incidents against physician\r\n s. Overall\\, lawsuits trigger short-lived\\, fear-driven defensive medicine.\r\n \\n\\nSpeaker: Jia Xiang is Assistant Professor of Business Economics and Pub\r\n lic Policy at the Kelley School of Business\\, Indiana University. She recei\r\n ved her Ph.D. in Economics from Penn State in 2020. She was a Post-Doctoral\r\n  Research Fellow at Harvard School of Public Health from 2020 to 2021. Her \r\n areas of expertise include Industrial Organization\\, Health Economics\\, and\r\n  Applied Microeconomics. Her work has been published in The Rand Journal of\r\n  Economics.\r\nDTEND:20260306T022000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T010000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Behavioral Responses in Physician Decision-Making: Evidence from Pa\r\n yment and Litigation Policies\r\nUID:tag:localist.com\\,2008:EventInstance_52082929283382\r\nURL:https://events.stanford.edu/event/behavioral-responses-in-physician-dec\r\n ision-making-evidence-from-payment-and-litigation-policies\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Co-sponsored by the Center for South Asia\\, the Department of A\r\n rt and Art History\\, and the Chair in Feminist Studies\\, UCSC.\\n\\nAbout the\r\n  Film\\nWorking Girls is a vivid\\, genre-defying documentary that traverses \r\n India to uncover the invisible yet essential work performed by women — from\r\n  care work and domestic work to surrogacy and sex work. Filmed in Kolkata\\,\r\n  Mumbai\\, Shillong\\, Latur\\, Thiruvananthapuram\\, Hyderabad and Madurai\\, t\r\n he film meets domestic workers\\, farmers\\, mothers\\, ASHA workers\\, dancers\r\n \\, and organisers whose labour sustains society but is rarely acknowledged.\r\n \\n\\nWith biting humour\\, powerful music\\, and a deep dive into the historie\r\n s of law and gender\\,Working Girls challenges dominant ideas about labour\\,\r\n  value\\, and visibility.\\n\\nDirected by Paromita Vohra and created in colla\r\n boration with the Laws of Social Reproduction project\\, building on their r\r\n esearch\\, the film invites us to rethink what it means to work — and who ge\r\n ts to be seen as a worker.\\n\\nThe event will be moderated by Anjali Arondek\r\n ar (UCSC) and Usha Iyer (Faculty Director\\, Center for South Asia). \\n\\nCre\r\n dits\\nWriter-Director: Paromita Vohra\\nConcept: Prabha Kotiswaran\\nCamera: \r\n Avijit Mukul Kishore\\nEditing: Nishant Radhakrishnan\\, Sankalp Meshram\\nSou\r\n nd: Achuth Sahadevan\\, Namshad Hameed\\, Rajesh Saseendran\\, Sneha Sundar an\r\n d others \\nMusic: Bonnie Chakraborty\\nSound Mix: Gissy Michael\\n\\nAbout the\r\n  Director\\n\\nParomita Vohra is a filmmaker and writer whose work focuses on\r\n  gender\\, feminism\\, urban life\\, love\\, desire and popular culture and spa\r\n ns many forms including documentary\\, fiction\\, print\\, video and sound ins\r\n tallation. Her work as director includes the path-breaking documentaries Un\r\n limited Girls and Q2P as well as Partners in Crime\\, Morality TV and the Lo\r\n ving Jehad\\, Where’ Sandra\\, Cosmopolis:Two Tales of A City and A Woman’s P\r\n lace\\; the television series Connected Hum Tum and several music videos. In\r\n  2015 she founded the path-breaking Agents of Ishq\\, a platform about sex\\,\r\n  love and desire for Indians. \\n\\nShe has written the fiction feature Khamo\r\n sh Pani (Silent Waters) the play IshqiyaDharavi Ishtyle\\, the comic Priya’s\r\n  Mirror and several documentaries. Her fiction and non-fiction have been wi\r\n dely published and her weekly column Paronormal Activity is in its 15th yea\r\n r.\r\nDTEND:20260306T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T013000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, 115\r\nSEQUENCE:0\r\nSUMMARY:Documentary Screening: Working Girls\r\nUID:tag:localist.com\\,2008:EventInstance_51473430720354\r\nURL:https://events.stanford.edu/event/working-girls-documentary-screening\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change in Winter Quarter.\\n\\nEvening G\r\n uided Meditation is designed to offer basic meditation skills\\, to encourag\r\n e regular meditation practice\\, to help deepen self-reflection\\, and to off\r\n er instructions on how meditation can be useful during stressful and uncert\r\n ain times.  All sessions are led by Andy Acker.\\n\\nOpen to Stanford Affilia\r\n tes. Free\\, no pre-registration is required.\r\nDTEND:20260306T023000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T013000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Room 302)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932607152896\r\nURL:https://events.stanford.edu/event/meditation-thursdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Social Event/Reception\r\nDESCRIPTION:Interested in civic issues and the questions shaping public lif\r\n e today?\\n\\nJoin Stanford faculty and instructors for conversations that bu\r\n ild on the topics of COLLEGE 102. Civic Salons are open to all undergraduat\r\n e students\\, and refreshments are provided.\\n\\nSchedule:\\n\\nThursday\\, Janu\r\n ary 15\\, 6:00 p.m. at Castaño and CedroThursday\\, January 22\\, 6:00 p.m. at\r\n  Crothers and RobleThursday\\, January 29\\, 6:00 p.m. at Larkin and PotterTh\r\n ursday\\, February 5\\, 6:00 p.m. at Casa ZapataThursday\\, February 12\\, 6:00\r\n  p.m. at Robinson and West Florence MooreTuesday\\, February 17\\, 7:00 p.m. \r\n at DonnerThursday\\, February 26\\, 6:00 p.m. at Arroyo and PotterThursday\\, \r\n March 5\\, 6:00 p.m. at Trancos and West Florence Moore\r\nDTEND:20260306T030000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T020000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Civic Salons: Winter 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51785130949462\r\nURL:https://events.stanford.edu/event/civic-salons-winter-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:With Guest Speaker Richard Maron Professor of Philosophy\\, Harv\r\n ard university\\n\\nAbstract:\\n\\nThe following is a set of notes concerned wi\r\n th how we are to interpret the Final Volume of Proust’s novel. One theme I \r\n discussed in a previous paper\\, “Swann’s Medical Philosophy\\,” is the ambig\r\n uous position of philosophy in the novel as a whole. Sometimes it represent\r\n s the aspiration to a kind of wisdom\\, but just as often it represents a ki\r\n nd of sophistry that some character employs as a prop for a kind of disillu\r\n sioned view of life that is a reaction to disappointment (in love) or self-\r\n doubt (about one’s artistic capacities). The Narrator himself shifts betwee\r\n n these two relations to ‘philosophy’\\, which creates issues for how we as \r\n readers are to relate ourselves to this or that philosophical pronouncement\r\n  in the novel. The presence of such explicitly ‘philosophical’ statements i\r\n ncreases in the Final Volume\\, along with the clash between the various per\r\n spectives that have structured the novel from the beginning: Childhood v. A\r\n dulthood\\; Naïve faith v. disillusion or cynicism\\; a kind of Realism or at\r\n tachment to what is outside oneself v. a kind of Subjectivism when such att\r\n achment is disappointed or seems impossible\\; an attachment to individuals \r\n (whether persons\\, places or works of art) v. a reduction of individuals to\r\n  general types expressing general laws. And throughout there is the relatio\r\n n of these conflicting responses to life to the appearance of ecstatic expe\r\n riences (of nature\\, of music\\, etc.) which come to a kind of crescendo in \r\n the succession of involuntary memories in the Guermantes library. \\n\\nThis \r\n crescendo is usually thought of as central to a redemptive reading of the n\r\n ovel: time is not lost after all\\, the Narrator’s time has not been lost in\r\n  the sense of wasted\\, but will be redeemed\\, indeed has been redeemed by t\r\n he creation of the very book we are reading. This redemptive reading\\, thus\r\n \\, is tied to the paradoxical idea of the identity of the book we are readi\r\n ng with the book that the Narrator feels finally in a position to write. Jo\r\n sh Landy has of course challenged this reading and I think there are other \r\n problems with in addition to the ones he lays out. And yet I also think tha\r\n t the existence of and experience of the very book we are reading does play\r\n  a role in how we are to interpret any redemptive reading and in how we are\r\n  to see the Narrator’s journey from Childhood to Adulthood\\, Faith to Disil\r\n lusion\\, and possibly back again. I don’t believe we arrive at a resolution\r\n  of these conflicts. The philosophical expressions following the episodes o\r\n f involuntary memory both diminish the distance between the Narrator and th\r\n e author Marcel Proust\\, and show the continued grip of an essentially disi\r\n llusioned perspective\\, even if that perspective is belied by the existence\r\n  and the experience of the book itself. \\n\\nRSVP HERE for Philosophy and Li\r\n terature Event\r\nDTEND:20260306T034500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T021500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Room 252\r\nSEQUENCE:0\r\nSUMMARY:Philosophy and Literature: The Last Temptation of Proust Notes on R\r\n edemption and Translation in the Final Volume\r\nUID:tag:localist.com\\,2008:EventInstance_52066784462912\r\nURL:https://events.stanford.edu/event/philosophy-and-literature-the-last-te\r\n mptation-of-proust-notes-on-redemption-and-translation-in-the-final-volume\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Abstract: Andrey will discuss two active research areas at the \r\n intersection of economics and AI. First\\, Fradkin draws on their work about\r\n  the market for LLMs to outline the open questions regarding competition am\r\n ong models\\, creators\\, and providers. Second\\, they will discuss the idea \r\n of a Coasean Singularity and some barriers to existing agentic technologies\r\n  in fulfilling this ideal. Throughout\\, Fradkin poses open questions that w\r\n e should be working on as a community.\\n\\nSpeaker: Andrey Fradkin\\, Associa\r\n te Professor of Marketing\\, Boston University Questrom School of Business\\;\r\n  Economics of AI\\, Amazon (on leave)\\n\\nSpeaker Bio: Andrey Fradkin is an a\r\n ssociate professor of marketing at the Boston University Questrom School of\r\n  Business and an affiliate of the Boston University Economics Department\\, \r\n currently on leave working on the economics of AI at Amazon. His research f\r\n ocuses on the economics of digital markets and AI\\, quantitative marketing\\\r\n , and search and matching markets\\, and has been published in top marketing\r\n \\, economics\\, and computer science outlets. He has provided expert input o\r\n n the digital economy to the President's Council on Science and Technology \r\n and the Federal Trade Commission. He worked as a data scientist at Airbnb w\r\n hile completing his Ph.D. in Economics at Stanford University. He co-hosts \r\n the podcast Justified Posteriors.\\n\\nThe logistics details for each session\r\n  will be provided to registered participants.  Sign up here to be included \r\n on the mailing list and learn about future events.\\n\\nThis talk is co-spons\r\n ored by USF's Master's in Applied Economics and the Stanford Causal Science\r\n  Center. For additional information and abstracts from past talks\\, please \r\n click here. \\n\\nThe BATES events are completely free to attend. If you’d li\r\n ke to support future events and our research\\, please consider making a gif\r\n t to Stanford Data Science: https://bit.ly/supportSDS.\r\nDTEND:20260306T043000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T023000Z\r\nGEO:37.430043;-122.171561\r\nLOCATION:Simonyi Conference Center\\, CoDa\\, 389 Jane Stanford Way\\, Stanfor\r\n d\\, CA 94305\r\nSEQUENCE:0\r\nSUMMARY:Bay Area Tech Economics Seminar with Andrey Fradkin\\, Boston Univer\r\n sity / Amazon\r\nUID:tag:localist.com\\,2008:EventInstance_52189099048505\r\nURL:https://events.stanford.edu/event/bay-area-tech-economics-seminar-with-\r\n andrey-fradkin-boston-university-amazon\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:In an era defined by political friction and social fragmentatio\r\n n\\, how do we move from \"us vs. them\" to  \"we\"? Join  the Palo Alto Library\r\n  and Silicon Valley Reads for an insightful evening at Stanford’s Hauck Aud\r\n itorium as part of Silicon Valley Reads\\, Bridges to Belonging.\\n\\nWorld-re\r\n nowned social psychologist Dr. Jennifer Eberhardt (Biased: Uncovering the H\r\n idden Prejudice That Shapes What We See\\, Think\\, and Do) joins visionary l\r\n egal scholar john a. powell ( The Power of Bridging: How to Build a World W\r\n here we all Belong) to explore the roots of implicit bias and the architect\r\n ure of \"othering.\"  Join us to learn how  to soothe tensions\\, bridge divid\r\n es\\, and foster a sense of belonging in a complex world.\\n\\njohn a. powell \r\n is Director of the Othering and Belonging Institute and Professor of Law\\, \r\n African American\\, and Ethnic Studies at the University of California\\, Ber\r\n keley.\\n\\nA social psychologist at Stanford University\\, Jennifer L. Eberha\r\n rdt conducts research on race and inequality. She not only highlights the n\r\n egative impact that racial bias can have on us in these settings — she prov\r\n ides clear direction on what we can do about it. \\n\\nThis event is in partn\r\n ership with the Palo Alto City Library and Stanford University.\\n\\nBooks wi\r\n ll be available for sale from 6:00pm with a book signing opportunity at the\r\n  end of the event.\\n\\nRegistration is recommended to receive event updates \r\n and venue/parking directions.\\n\\nREGISTER HERE\r\nDTEND:20260306T034500Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T023000Z\r\nGEO:37.427563;-122.167691\r\nLOCATION:Traitel Building\\, Hauck Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Beyond the Divide: A Conversation on Belonging with john a. powell \r\n & Dr. Jennifer Eberhardt\r\nUID:tag:localist.com\\,2008:EventInstance_52075489462443\r\nURL:https://events.stanford.edu/event/beyond-the-drive-a-conversation-on-be\r\n longing-with-john-a-powell-dr-jennifer-eberhardt\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:There’s no place like home—I mean\\, the Cantor Arts Center! 🏠❤️\r\n 🏛️🖼️\\n\\nJoin us for Home Videos\\, an immersive evening of student films pre\r\n sented by the Cantor Arts Center\\, Flying Horse Films\\, and Cardinal Nights\r\n . Inspired by the Cantor exhibition Dwelling: New Acquisitions\\, this event\r\n  invites students to explore home in its every manifestation.\\n\\nTaking pla\r\n ce at the Cantor Arts Center on Thursday\\, March 5\\, 7pm–9pm\\, the festival\r\n  will feature recent and past films produced by Flying Horse. Attendees are\r\n  encouraged to wander between screening spaces\\, engage with the Dwelling e\r\n xhibition\\, and enjoy a cozy atmosphere complete with popcorn and warm beve\r\n rages.\\n\\nThe festival also features a short film competition\\, showcasing \r\n original student submissions inspired by Dwelling. Submissions will be scre\r\n ened alongside Flying Horse projects\\, offering a snapshot into the collect\r\n ive’s evolving creative voice. At the end of the night\\, Flying Horse will \r\n announce the contest winners\\, who will receive a prize. Film submissions a\r\n re due on Friday\\, February 27 at 11:59pm and instructions to submit your f\r\n ilm can be found here.\\n\\nAn ode to our happy places and the art that honor\r\n s them\\, Home Videos is a celebration of movies\\, imagination\\, and the Sta\r\n nford filmmaking community.\\n\\nStudents must show their Stanford ID to chec\r\n k in\\, and may bring one guest. Plus ones must be accompanied by a Stanford\r\n  student at the time of check-in. RSVP here.\\n\\nWe look forward to seeing y\r\n ou there!\\n\\nWith Love\\,\\n\\nFlying Horse Films\\, Cardinal Nights\\, and the \r\n Cantor Student Advisory Committee. 💋\\n\\n________\\n\\nParking\\n\\nFree visitor\r\n  parking is available along Lomita Drive as well as on the first floor of t\r\n he Roth Way Garage Structure\\, located at the corner of Campus Drive West a\r\n nd Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. From the Palo Alto C\r\n altrain station\\, the Cantor Arts Center is about a 20-minute walk or there\r\n  the free Marguerite shuttle will bring you to campus via the Y or X lines.\r\n \\n\\nDisability parking is located along Lomita Drive near the main entrance\r\n  of the Cantor Arts Center. Additional disability parking is located on Mus\r\n eum Way and in Parking Structure 1 (Roth Way & Campus Drive). Please click \r\n here to view the disability parking and access points.\\n\\nAccessibility Inf\r\n ormation or Requests\\n\\nCantor Arts Center at Stanford University is commit\r\n ted to ensuring our programs are accessible to everyone. To request access \r\n information and/or accommodations for this event\\, please complete this for\r\n m at least one week prior to the event: museum.stanford.edu/access.\\n\\nFor \r\n questions\\, please contact disability.access@stanford.eduor Vivian Sming\\, \r\n vsming@stanford.edu\\, (650) 725-7789.\\n\\n________\\n\\nImage: Jindrich Streit\r\n  (Czech\\, b. 1946). A Chance to Dream (I Snít se Nedky Musi) from the Villa\r\n ge Life series. Gelatin silver print\\, 11 5/16 x 15 3/8 in. Gift of the Art\r\n ist. 1993.31.25.\r\nDTEND:20260306T050000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T030000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Home Videos: An Evening of Student Films — STANFORD STUDENTS ONLY\r\nUID:tag:localist.com\\,2008:EventInstance_51941902389253\r\nURL:https://events.stanford.edu/event/home-videos\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The latest science is transforming how we think about aging. Re\r\n search now shows that muscle acts as a dynamic organ—fueling metabolism\\, p\r\n rotecting brain health\\, strengthening immunity\\, and driving recovery. Sar\r\n ita Khemani\\, MD\\, shares the latest research and insights on how muscle st\r\n rength predicts healthspan\\, the evidence-based strategies that can help yo\r\n u build resilience\\, and where future discoveries in muscle and longevity r\r\n esearch are leading us.\\n\\nThis webinar will be presented by Sarita Khemani\r\n \\, MD\\, who is a clinical associate professor of Medicine at Stanford Unive\r\n rsity specializing in perioperative medicine. Her clinical expertise focuse\r\n s on the prevention\\, early detection\\, and management of medical complicat\r\n ions in surgical patients. She also serves as Director of the Stanford Resi\r\n lience and Longevity Initiative (STRIVE) in Hospital Medicine\\, which aims \r\n to enhance physical and cognitive resilience and promote long-term healthsp\r\n an.\r\nDTEND:20260306T040000Z\r\nDTSTAMP:20260308T083909Z\r\nDTSTART:20260306T030000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Longevity Advantage: How Strength Determines Healthspan\r\nUID:tag:localist.com\\,2008:EventInstance_51967772646570\r\nURL:https://events.stanford.edu/event/the-longevity-advantage-how-strength-\r\n determines-healthspan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260306\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294349221\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260306\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355511276\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260306\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249803194\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260306\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353975359\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:schedule build for priority room scheduling: deadline to submit\r\n  schedule changes to be included in priority room scheduling for summer qua\r\n rter in main campus spaces.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260306\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Phase 2 main campus room request deadline \r\nUID:tag:localist.com\\,2008:EventInstance_49270275692387\r\nURL:https://events.stanford.edu/event/summer-phase-2-main-campus-room-reque\r\n st-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:With Guests Na'ama Rokem (U Chicago)\\, Simone Stirner (Harvard)\r\n \\,  Lucy Alford (Wake Forest)\\n\\nWorkshop Schedule:\\n\\nThursday\\, March 5\\,\r\n  2026\\n\\n9:45—10:00        Opening Remarks\\, Amir Eshel (Comparative Litera\r\n ture\\, Stanford)\\n10:00—10:45        Ostap Kin (Slavic Languages and Litera\r\n tures)\\, “When a Story Became a Threat: The Holocaust and Its Writing in Uk\r\n rainian Literature\\, 1945”\\n11:00—11:45        Letizia Ghibaudo (French and\r\n  Italian)\\, “What Remains: Visual-Verbal Strategies in the Aesthetics of Hi\r\n storical Trauma”\\n12:00—1:00        Lunch Break\\n1:00—1:45        Ariel Hor\r\n owitz (Comparative Literature)\\, “Jamaica Kincaid’s 'A Small Place' and the\r\n  Philosophy of History”\\n2:00—2:45        Hevin Karakurt (Comparative Liter\r\n ature)\\, “This is a Catastrophe! A Kurdish Poetics of Historiography in Pro\r\n se and Poetry”\\n3:00—3:45        Antje Gebhardt (German Studies)\\, “Entangl\r\n ed (Hi)Stories in Sharon Dodua Otoo’s novel 'Ada’s Realm'”\\n4:00—4:45      \r\n   Gilad Shiram (German Studies)\\, “’Transforming Birds of Prey into Sudden \r\n Angels’: History Transfigured in Zuzanna Ginczanka’s ‘Non omnis moriar’”\\n5\r\n :00—6:15        Round Table: Amir Eshel (Comparative Literature\\, Stanford)\r\n \\, Lucy Alford (English\\, Wake Forest University)\\, Simone Stirner (Germani\r\n c Languages and Literatures\\, Harvard)\\n\\nFriday\\, March 6\\, 2026\\n\\n10:00—\r\n 10:45        Jordan Virtue (History)\\, “’The Lyre of War’: Black Civil War \r\n Memory in Paul Laurence Dunbar”\\n11:00—11:45        Gary Huertas (Iberian a\r\n nd Latin American Cultures)\\, “Epistemologies of the Trace: Decolonial Memo\r\n ry\\, Aporias of Truth\\, and Hybrid Methodologies in post-agreement Colombia\r\n ”\\n12:00—1:00        Lunch Break\\n1:00—1:45        Jon Tadmor (Comparative \r\n Literature)\\, “Historicizing the Aesthetic Event: On the Enigmas of Natan A\r\n lterman’s 'Joy of the Poor' (1941)”\\n2:00—2:45        Anne Gross (English)\\\r\n , “The Newspaper as Aesthetic Form”\\n3:00—3:45        Christian Gonzalez Ho\r\n  (Art and Art History)\\, “Curating Darkness: Isaac Julien and the Politics \r\n of Memory”\\n4:00—4:45        Miri Powell (History)\\, “Has West-Coast Tech L\r\n ost the Mandate of Heaven?: Inquiries into a History-in-the-Making”\\n5:00—6\r\n :15        Round Table: Alexander Nemerov (Art and Art History\\, Stanford)\\\r\n , Na’ama Rokem (Comparative Literature\\, Chicago)\\, Alys George (German Stu\r\n dies\\, Stanford)\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260306\r\nLOCATION:\\, Room 216\r\nSEQUENCE:0\r\nSUMMARY:The Contemporary: Aesthetics and Poetics of the Historical Event\r\nUID:tag:localist.com\\,2008:EventInstance_51782298134275\r\nURL:https://events.stanford.edu/event/the-contemporary-aesthetics-and-poeti\r\n cs-of-the-historical-event\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Event Details:\\n\\nThis workshop is designed for all Clinical Ed\r\n ucators who are seeking to better understand their role in the Appointment \r\n and Promotion review process\\, including the best practices regarding the C\r\n V and candidate statement.\\n\\nPrimary Moderator & Presenter (1): Dr. Pedro \r\n Tanaka\\, Clinical Professor of Anesthesiology\\, Perioperative\\, and Pain Me\r\n dicine & Associate Dean for Academic Affairs.\\n\\nQ&A Session Moderator (1):\r\n  Dr. Carol Marquez\\, Clinical Professor of Radiation Oncology & Associate D\r\n ean for Academic Affairs.\\n\\nPanelists / Speakers (3): Dr. Robert D. Boutin\r\n \\, Clinical Professor of Radiology\\; Dr. Ann Caroline Fisher\\, Clinical Pro\r\n fessor of Ophthalmology\\; and Dr. Sarah Williams\\, Clinical Professor of Em\r\n ergency Medicine.\\n\\nTargeted audience: All Clinician Educators [including \r\n Affiliates]\\n\\nPresented Material & Recording\r\nDTEND:20260306T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY: Candidates role in the A&P process/CV and Candidate statement\r\nUID:tag:localist.com\\,2008:EventInstance_49792538494434\r\nURL:https://events.stanford.edu/event/candidates-role-in-the-ap-processcv-a\r\n nd-candidate-statement-6977\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260307T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T160000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 139\r\nSEQUENCE:0\r\nSUMMARY:Canceled: Financial Counseling with Fidelity (Main Campus\\, Huang B\r\n ldg\\, Room 139) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525257771495\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-main-campus-huang-bldg-room-139-by-appointment-only-1362\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260307T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910823623\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260306T180000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353496962\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260307T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T170000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382770351\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium,Film/Screening\r\nDESCRIPTION:The William & Louise Greaves Filmmaker Seminar is a gathering d\r\n edicated to artists working in cinematic realms. Hosted by BlackStar in par\r\n tnership with Stanford University’s Institute for Diversity in the Arts\\, t\r\n his seminar provides an immersive space where filmmakers\\, curators\\, schol\r\n ars\\, critics\\, and cultural workers can explore both the technical and cre\r\n ative dimensions of media-making.\\n\\nNamed after William and Louise Greaves\r\n \\, visionary documentarians whose work broke new ground in truth-telling an\r\n d representation the seminar is built around honest conversations: success\\\r\n , struggle\\, craft\\, theory\\, innovation\\, and community!\r\nDTEND:20260307T060000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T180000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\\, Various Locations at Stanford\r\nSEQUENCE:0\r\nSUMMARY:2025 The William & Louise Greaves Filmmaker Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_50731771513470\r\nURL:https://events.stanford.edu/event/2025-greaves-filmmaker-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260306T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802450176\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260306T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699828408\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The ancient Indian healing system of Ayurveda provides profound\r\n  insights into how to balance the body and mind to be in harmony with natur\r\n e. These holistic principles have much to offer to help us navigate the str\r\n esses of modern life.\\n\\nJoin us for an exploration of the Ayurvedic princi\r\n ples of stress reduction in this enriching webinar. We will explore the imp\r\n act of daily routines\\, seasonal changes\\, and dietary choices on your ment\r\n al and emotional well-being. Additionally\\, we will discuss specific herbs \r\n and dietary practices recommended in Ayurveda to support mental clarity and\r\n  emotional stability.\\n\\nWhether you are seeking to address specific imbala\r\n nces or simply aiming to cultivate a deeper sense of mindfulness and well-b\r\n eing\\, this webinar will equip you with practical wisdom drawn from Ayurved\r\n a's 5\\,000-year-old tradition.\\n\\n This class will be recorded and a one-we\r\n ek link to the recording will be shared with all registered participants. T\r\n o receive incentive points\\, attend at least 80% of the live session or lis\r\n ten to the entire recording within one week.  Request disability accommodat\r\n ions and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260306T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Build Resilience and Restore Balance with Ayurveda\r\nUID:tag:localist.com\\,2008:EventInstance_51388531204869\r\nURL:https://events.stanford.edu/event/build-resilience-and-restore-balance-\r\n with-ayurveda-9999\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Talk Title: Designing Between Humans and Nature: Bridging Inten\r\n t and Performance with AI\\n\\nAbstract:\\n\\nDesign mediates the relationship \r\n between humans and nature. In the built environment\\, engineering decisions\r\n  about form\\, structure\\, and material shape how people inhabit space and h\r\n ow natural systems are engaged\\, preserved\\, or transformed. Today\\, the en\r\n vironmental impact of construction is one of the defining challenges of our\r\n  time. Buildings account for nearly forty percent of global carbon emission\r\n s\\, much of it embedded in materials and construction. This positions desig\r\n n as a powerful lever for shaping environmental outcomes. When performance \r\n is treated as a creative framework rather than a constraint\\, design can co\r\n ntribute to decarbonization while expanding the possibilities of architectu\r\n ral expression.\\n\\nThis talk presents a research and teaching program that \r\n advances design as a mode of engineering inquiry. Emerging computational\\, \r\n artificial intelligence\\, and fabrication tools are integrated directly int\r\n o design workflows so that human intent\\, engineering performance\\, and mat\r\n erial constraints can be considered simultaneously. Generative and multi-ob\r\n jective methods enable designers to explore trade-offs among structural eff\r\n iciency\\, spatial quality\\, and environmental impact. Multimodal AI systems\r\n  interpret sketches\\, language\\, and qualitative goals\\, translating them i\r\n nto alternatives grounded in physics-based analysis. Interactive interfaces\r\n  connect geometric exploration with real-time performance feedback\\, reshap\r\n ing the relationship between creative reasoning and engineering evaluation.\r\n \\n\\nThe work extends beyond digital models into physical realization. Robot\r\n ic assembly\\, low-carbon concrete geometries\\, and algorithmic reuse of sal\r\n vaged materials demonstrate how computational design can operate within rea\r\n l supply chains\\, new policy landscapes\\, and evolving construction economi\r\n cs. Across scales from material components to building and urban systems\\, \r\n these projects suggest that responding to the climate crisis is not only a \r\n technical challenge but a design opportunity. By integrating human creativi\r\n ty\\, engineering rigor\\, and material intelligence\\, design becomes a means\r\n  of negotiating the future of the built environment in balance with natural\r\n  systems.\\n\\nBio:\\n\\nCaitlin Mueller is an Associate Professor at MIT with \r\n appointments in Architecture and Civil and Environmental Engineering. She l\r\n eads the Digital Structures research group\\, directs the Building Technolog\r\n y program\\, and serves as Associate Director of the MIT Climate and Sustain\r\n ability Consortium. Trained at MIT and Stanford in architecture\\, structura\r\n l engineering\\, computation\\, and building technology\\, she joined the MIT \r\n faculty in 2014.\\n\\nHer research advances computational design and digital \r\n fabrication methods that integrate engineering performance\\, material syste\r\n ms\\, and artificial intelligence to shape innovative\\, high-performing buil\r\n dings and structures. Across research and teaching\\, she develops design ap\r\n proaches that connect structural efficiency\\, sustainability\\, and expressi\r\n ve form.\\n\\nHer work has received major recognition\\, including the ACADIA \r\n Innovative Research Award of Excellence\\, the ACSA Diversity Achievement Aw\r\n ard\\, seven best paper awards\\, and Architectural Record’s inaugural Innova\r\n tor of the Year distinction in 2025. She has published more than 150 peer-r\r\n eviewed papers\\, and her research has been realized in built projects inclu\r\n ding the Sueños con Tierra y Concreto pavilion (Mexico City\\, 2022)\\, four \r\n installations at the 2025 Venice Biennale\\, and Janet Echelman’s Rememberin\r\n g the Future sculpture at the MIT Museum (2025). She is co-founder of Forma\r\n  Systems and Pixelframe\\, startups translating computational and circular s\r\n tructural design research into practice.\r\nDTEND:20260306T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T200000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 111\r\nSEQUENCE:0\r\nSUMMARY:Civil & Environmental Engineering Seminar Series\r\nUID:tag:localist.com\\,2008:EventInstance_52243970376379\r\nURL:https://events.stanford.edu/event/civil-environmental-engineering-semin\r\n ar-series-8251\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260307T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T200000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561123175\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Peter Jackson\\, PhD\\nProfessor\\, Departments of Microbiology an\r\n d Immunology\\, and Pathology\\, Stanford University\\n\\n\"Primary Cilia as Met\r\n abolic Signaling Hubs in Obesity and Type 2 Diabetes: How Proteomics Transl\r\n ates Human Genetics into Mechanism\"\r\nDTEND:20260306T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T200000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, B302\r\nSEQUENCE:0\r\nSUMMARY:SDRC Friday Seminar- Peter Jackson\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_51626863376469\r\nURL:https://events.stanford.edu/event/sdrc-friday-seminar-peter-jackson-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Stanford Sustainability Accelerator\\, the Center for Sustai\r\n nability Data Science\\, and the Institute for Human-Centered Artificial Int\r\n elligence invite you to join our Data Science for Sustainability series. Th\r\n is session is a Lunch & Learn on Computer Vision for Sustainability.\\n\\nThi\r\n s session will cover:\\n\\nCore computer vision methods and emerging approach\r\n es (e.g.\\, image segmentation\\, object detection\\, foundation models)Applic\r\n ations across climate adaptation\\, energy systems\\, agriculture\\, urban res\r\n ilience\\, conservation\\, and moreOpportunities for cross-disciplinary colla\r\n boration\\n Why this matters: Many sustainability challenges depend on extra\r\n cting insights from visual data at scale—from monitoring ecosystem change t\r\n o assessing climate risk. This session will explore how advances in compute\r\n r vision are expanding what we can measure\\, validate\\, and act on\\, and ma\r\n y offer relevant tools and collaborations for your own research.\\n\\n \\n\\nDa\r\n te: March 6th\\, 2026\\n\\nTime: 12:00 PM - 1:30 PM\\n\\nLocation: CoDa E160\r\nDTEND:20260306T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T200000Z\r\nGEO:37.428936;-122.1721\r\nLOCATION:Computing and Data Science Building (CoDa)\\, CoDa E160\r\nSEQUENCE:0\r\nSUMMARY:Stanford Lunch & Learn - Computer Vision for Sustainability Researc\r\n h\r\nUID:tag:localist.com\\,2008:EventInstance_52179425780615\r\nURL:https://events.stanford.edu/event/stanford-lunch-learn-computer-vision-\r\n for-sustainability-research\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The TAPS Graduate Students host Dr. W. B. Worthen for the March\r\n  First Friday in Roble Gym 137. \\n\\nABOUT THE LECTURE\\n\\nAlthough theater i\r\n s conventionally seen as an essentially human or humanizing art form\\, acti\r\n ng represents the human as richly technologized: whether using masks and ko\r\n thurnoi\\, the teapot stance\\, or the Zoom camera\\, acting is suspended in t\r\n he apparatus of theater. How is this recognition framed in contemporary per\r\n formance? In Jordan Harrison’s plays\\, actors play “inorganics” with the sl\r\n ightest nuance of difference (“Organic\\, inorganic\\,” says a character in T\r\n he Antiquities\\, “A false dichotomy\\, meant to give you comfort.”)\\; for Th\r\n e Wooster Group or in the recent Picture of Dorian Gray\\, “live” acting is \r\n inseparable from digital mediation\\; in Prometheus Firebringer\\, Annie Dors\r\n en’s impassioned critique of LLM is phrased as a kind of artisanal intellig\r\n ence\\, individual expression as digital citation. How does acting explore t\r\n he interface of the technologized human\\, and\\, in challenging the happily \r\n captive fantasies of the theater’s originary human essence\\, how does this \r\n kind of work also engage a critique of theater as what Leif Weatherby has c\r\n alled “remainder humanism?” \\n\\n \\n\\nABOUT THE SPEAKER\\n\\nDr. W. B. Worthen\r\n  is Professor of Theatre at Barnard College\\, and Professor of English and \r\n Comparative Literature at Columbia University\\, where he also co-chairs the\r\n  Ph.D. in Theatre and Performance. Worthen has often written from the inter\r\n section of dramatic writing\\, theoretical inquiry\\, and the materiality of \r\n performance: among many articles\\, books\\, and edited collections\\, his mos\r\n t recent books include Print and the Poetics of Modern Drama (2010)\\, Drama\r\n : Between Poetry and Performance (2010)\\, Shakespeare Performance Studies (\r\n 2014)\\, Shakespeare\\, Technicity\\, Theatre (2020)\\, and last month\\, Theatr\r\n e as Technology: Apparatus\\, Nostalgia\\, Obsolescence. (2026). He is workin\r\n g now on acting as technology.\r\nDTEND:20260306T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T203000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, 137\r\nSEQUENCE:0\r\nSUMMARY:FIRST FRIDAY | The Actor’s Tech\r\nUID:tag:localist.com\\,2008:EventInstance_52091849193798\r\nURL:https://events.stanford.edu/event/march-first-friday-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260306T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T203000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Piano Students of Melinda Lee Masur\r\nUID:tag:localist.com\\,2008:EventInstance_51463242161229\r\nURL:https://events.stanford.edu/event/noon-lee-masur-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260306T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682830740\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The El Niño–Southern Oscillation (ENSO) is a major source of in\r\n terannual climate variability\\, shaping rainfall\\, drought\\, and weather ex\r\n tremes. Yet even state-of-the-art climate models show substantial biases in\r\n  reproducing ENSO amplitude\\, spectral behavior\\, and the frequency of extr\r\n eme events. Pinpointing which processes are misrepresented is difficult in \r\n comprehensive models because strong coupling between the ocean and atmosphe\r\n re obscures causality.\\n\\n \\n\\n In this talk\\, we introduce the Recharge Os\r\n cillator (RO) framework—a reduced-order model that represents ENSO with two\r\n  coupled equations for two state variables (Jin 1997). We show that the RO \r\n reproduces key ENSO features while linking physical processes to a small se\r\n t of interpretable parameters. Its low dimensionality enables large ensembl\r\n es to quantify ENSO internal variability and highlight pitfalls in inferrin\r\n g greenhouse-warming trends from limited records.\\n\\n\\n\\n Finally\\, we exte\r\n nd the RO-style framework beyond ENSO to describe oscillatory convection re\r\n gimes. Prior work (e.g.\\, Seeley & Wordsworth 2021) suggests warming may sh\r\n ift rainfall from quasi-steady precipitation to episodic deluges. We show h\r\n ow an RO-type mechanism reproduces this transition through changes in a sin\r\n gle parameter\\, providing a compact physical interpretation of episodic rai\r\n nfall. Overall\\, this two-equation framework offers a powerful tool to unde\r\n rstanding diverse modes of climate variability.\r\nDTEND:20260306T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T210000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, 350/372\r\nSEQUENCE:0\r\nSUMMARY:Special Geophysics Seminar - Sooman Han\\, \"Same Equations\\, differe\r\n nt applications: The Recharge Oscillator View of ENSO and Episodic Convecti\r\n on\"\r\nUID:tag:localist.com\\,2008:EventInstance_52242731276581\r\nURL:https://events.stanford.edu/event/special-geophysics-seminar-sooman-han\r\n -same-equations-different-applications-the-recharge-oscillator-view-of-enso\r\n -and-episodic-convection\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:PhD Defense\r\nDESCRIPTION:Geophysics has entered an era of rapidly expanding data availab\r\n ility across a wide range of spatial scales. During my PhD journey\\, I have\r\n  explored data-driven approaches to tackle geophysical challenges at each s\r\n cale\\, from pore to regional levels. Pore scale (∼10-6 m): High-resolution \r\n image dataChapter 2: GNN for effective elastic moduli prediction.Chapter 3:\r\n  Diffusion-based multiphase flow generation given fracture geometries.Chapt\r\n er 4: Image registration of a thin section in a CT image (In revision for G\r\n eophysics)Decameter scale (∼10 m): EGS Collab hydraulic stimulation and mic\r\n roearthquake history dataChapter 5: Forecasting fluid-induced microearthqua\r\n kesRegional scale (∼105 m): Machine learning and routine-based seismicity c\r\n atalog dataChapter 6: Quantifying spatial detectability of a machine-learni\r\n ng-based seismicity catalog (Accepted/In press for Seismological Research L\r\n etters) Given the limited time\\, the public defense presentation will prima\r\n rily focus on one study at each scale: Chapters 2\\, 5\\, and 6.\r\nDTEND:20260306T230000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T220000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Hartley Conference Center\r\nSEQUENCE:0\r\nSUMMARY:Geophysics PhD Defense\\, Jaehong Chung: \"Data-driven multiscale geo\r\n physical modeling and analysis from pore to regional scales\"\r\nUID:tag:localist.com\\,2008:EventInstance_52240987736116\r\nURL:https://events.stanford.edu/event/geophysics-phd-defense-jaehong-chung-\r\n data-driven-multiscale-geophysical-modeling-and-analysis-from-pore-to-regio\r\n nal-scales\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The experience of OCD (Obsessive Compulsive Disorder) can be is\r\n olating and stressful.\\n\\nThis is an open and ongoing group for students wh\r\n o live with OCD to support each other and have a safe space to connect. The\r\n  group will focus on providing mutual support\\, sharing wisdom\\, increasing\r\n  self-compassion\\, and enhancing overall coping and wellness.\\n\\nMeeting wi\r\n th a facilitator is required to join this group. You can sign up on the INT\r\n EREST LIST_LIVING_WITH_OCD_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in \r\n the \"Groups and Workshops\" section. This group will take place in-person on\r\n  Fridays from 3-4pm on 1/23\\; 1/30\\; 2/6\\; 2/13\\; 2/20\\; 2/27\\; 3/6\\; 3/13.\r\n Facilitated by Jennifer Maldonado\\, LCSWAll enrolled students are eligible \r\n to participate in CAPS groups and workshops. A pre-group meeting is require\r\n d prior to participation in this group. Please contact CAPS at (650) 723-37\r\n 85 to schedule a pre-group meeting with the facilitators\\, or sign up on th\r\n e portal as instructed above.\r\nDTEND:20260307T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T230000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Living with OCD\r\nUID:tag:localist.com\\,2008:EventInstance_51782951096619\r\nURL:https://events.stanford.edu/event/copy-of-living-with-ocd-3482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join the Race and Gender in the Global Hispanophone rese\r\n arch group for a talk entitled \"Black Women and the Rebellious Act of Being\r\n  in Argentina\" by Erika Denise Edwards (Associate Professor of Latin Americ\r\n an History\\, University of Texas at El Paso). \\n\\nRSVP for the Race and Gen\r\n der talk by Erika Denise Edwards\r\nDTEND:20260307T003000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260306T230000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, 252\r\nSEQUENCE:0\r\nSUMMARY:Race and Gender in the Global Hispanophone: \"Black Women and the Re\r\n bellious Act of Being in Argentina\" by Erika Denise Edwards (Associate Prof\r\n essor of Latin American History\\, University of Texas at El Paso)\r\nUID:tag:localist.com\\,2008:EventInstance_52021715741462\r\nURL:https://events.stanford.edu/event/race-and-gender-in-the-global-hispano\r\n phone-black-women-and-the-rebellious-act-of-being-in-argentina-by-erika-den\r\n ise-edwards-associate-professor-of-latin-american-history-university-of-tex\r\n as-at-el-paso\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us for the First Fridays event series at the EVGR Pub & Be\r\n er Garden! \\n\\nWe provide pub food until it runs out.\\n\\nThe first Friday o\r\n f each month from 5:00 p.m. to 7:00 p.m.\\, with our kick-off event occurrin\r\n g THIS FRIDAY\\, 11.7.2025.\r\nDTEND:20260307T030000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T010000Z\r\nGEO:37.426705;-122.157614\r\nLOCATION:EVGR Pub & Beer Garden\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at the EVGR Pub & Beer Garden\r\nUID:tag:localist.com\\,2008:EventInstance_51757169759582\r\nURL:https://events.stanford.edu/event/evgr-first-fridays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Symphony Orchestra\\, Stanford Symphonic Chorus\\, a\r\n nd Stanford University Singers come together to present a special Winter Qu\r\n arter concert from the main stage of Bing Concert Hall.\\n\\nProgram\\n\\nBenja\r\n min Britten – Passacaglia from Peter GrimesWilliam Grant Still – In Memoria\r\n m: The Colored Soldiers Who Died for DemocracyJohn Eells\\, conductorGiusepp\r\n e Verdi – Messa da RequiemMikayla Sager\\, sopranoLaurel Semerdjian\\, altoBe\r\n njamin Liupaogo\\, tenorAshraf Sewailam\\, bass-baritoneStephen M. Sano\\, con\r\n ductorAdmission Information\\n\\nGeneral – $37 | Seniors (65+) and Non-Stanfo\r\n rd Students – $32\\nPrice shown reflects total cost including $4 online/phon\r\n e per-ticket fee.FREE admission for Stanford University students. One ticke\r\n t per ID\\, available beginning one hour prior to curtain at the venue.\r\nDTEND:20260307T050000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T033000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Symphony Orchestra\\, Symphonic Chorus\\, and University Sin\r\n gers\r\nUID:tag:localist.com\\,2008:EventInstance_51464342880874\r\nURL:https://events.stanford.edu/event/sso-ssc-usingers-1\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260307\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294350246\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260307\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355512301\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260307\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353976384\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260308T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T170000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910824648\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260307T180000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T170000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353496963\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260307T193000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T173000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078570421\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium,Film/Screening\r\nDESCRIPTION:The William & Louise Greaves Filmmaker Seminar is a gathering d\r\n edicated to artists working in cinematic realms. Hosted by BlackStar in par\r\n tnership with Stanford University’s Institute for Diversity in the Arts\\, t\r\n his seminar provides an immersive space where filmmakers\\, curators\\, schol\r\n ars\\, critics\\, and cultural workers can explore both the technical and cre\r\n ative dimensions of media-making.\\n\\nNamed after William and Louise Greaves\r\n \\, visionary documentarians whose work broke new ground in truth-telling an\r\n d representation the seminar is built around honest conversations: success\\\r\n , struggle\\, craft\\, theory\\, innovation\\, and community!\r\nDTEND:20260308T060000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T180000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\\, Various Locations at Stanford\r\nSEQUENCE:0\r\nSUMMARY:2025 The William & Louise Greaves Filmmaker Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_50731771515519\r\nURL:https://events.stanford.edu/event/2025-greaves-filmmaker-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join this virtual event hosted by the Stanford Undergraduate As\r\n sociation of Veterans and Service to School for information regarding the a\r\n pplication process\\, important contacts\\, and a Q & A will be faciliated by\r\n  our current student veterans. \\n\\nRSVP: https://docs.google.com/forms/d/e/\r\n 1FAIpQLSezStbNgf3RYCxvjFkH_CqHwtXTkXREeN7HyUeMXMOBR_yrlw/viewform\\n\\nAn ema\r\n il link for the zoom will be sent to the email you provide.\r\nDTEND:20260307T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Information Session for Military Veterans\r\nUID:tag:localist.com\\,2008:EventInstance_52276776926143\r\nURL:https://events.stanford.edu/event/undergraduate-information-session-for\r\n -military-veterans-9692\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260307T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699830457\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260307T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T203000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691954974\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260307T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682832789\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260307T233000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T223000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708322065\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260308T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260307T230000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668841975\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us at Harmony House for IDA’s monthly First Fridays! A gat\r\n hering space for artists\\, students\\, and community to connect\\, unwind\\, a\r\n nd create together. Each month\\, we open our doors at the Harmony House  fo\r\n r an evening of conversation\\, art-making\\, and chill vibes over food and d\r\n rinks. Whether you’re here to meet new people\\, share your work\\, or just h\r\n ang out\\, First Fridays are a chance to slow down and be in creative commun\r\n ity.\r\nDTEND:20260308T030000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T010000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at IDA (Social)\r\nUID:tag:localist.com\\,2008:EventInstance_50731549500881\r\nURL:https://events.stanford.edu/event/first-fridays-at-ida-social\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260308T023000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T013000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52196932457151\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The acclaimed Stanford Afro-Latin Jazz Ensemble\\, directed by M\r\n urray Low\\, presents their Winter Concert titled \"Tribute to the Mambo\" fea\r\n turing special guest saxophonist/flautist Mitch Frohman.  The program showc\r\n ases both classic and original repertoire paying homage to classic New York\r\n  Salsa and Latin Jazz repertoire during its golden era.\\n\\nA seven-time Gra\r\n mmy winner\\, Mr. Frohman literally \"lived\" the New York Salsa/Latin Jazz sc\r\n ene through his 25-year stint as a key member of the legendary Tito Puente \r\n Orchestra as also as part of the Mongo Santamaria band for many years.   He\r\n  is now a bandleader in his own right as a founder of the Mambo Legends Orc\r\n hestra and as a leader of his own Latin Jazz Quartet\\, which released a cri\r\n tically acclaimed CD \"From Daddy With Love\".\\n\\nMr. Frohman is internationa\r\n lly recognized as a pioneer in the idiom\\, having been awarded Latin Jazz U\r\n SA's Lifetime Achievement Award in 2016.  He has collaborated with all of t\r\n he greats - Celia Cruz\\, Joe Cuba\\, Chico O'Farrill\\, Machito\\, Eddie Palmi\r\n eri\\, and the Spanish Harlem Orchestra - to name just a few!  You've probab\r\n ly heard his signature sound on commercial recordings also\\, such as the th\r\n eme song from Sex In The City\\, or songs performed by Paul Simon\\, the Talk\r\n ing Heads\\, and Cyndi Lauper.\\n\\nDon't miss this special chance to hear thi\r\n s legendary music directly from the source!   .\\n\\nAdmission Information\\n\\\r\n nGeneral – $32 | Seniors (65+) and Non-Stanford Students – $27\\nPrice shown\r\n  reflects total cost including $4 online/phone per-ticket fee.FREE admissio\r\n n for Stanford University students. One ticket per ID\\, available beginning\r\n  one hour prior to curtain at the venue.This event will be livestreamed.\r\nDTEND:20260308T050000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T033000Z\r\nGEO:37.424086;-122.16997\r\nLOCATION:Dinkelspiel Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Afro-Latin Jazz Ensemble –  \"Tribute to the Mambo\" with gu\r\n est Mitch Frohman\r\nUID:tag:localist.com\\,2008:EventInstance_51464521517095\r\nURL:https://events.stanford.edu/event/salje-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Guzheng Ensemble is made up of Stanford students f\r\n rom all disciplines\\, drawn together by their interest in Chinese music. Le\r\n d by renowned guzheng player Hui You\\, the ensemble explores both tradition\r\n al and contemporary pieces.\\n\\nAdmission Information\\n\\nFree admission\r\nDTEND:20260308T050000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T033000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Guzheng Ensemble Concert\r\nUID:tag:localist.com\\,2008:EventInstance_51463343069527\r\nURL:https://events.stanford.edu/event/guzheng-ensemble-concert-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Symphony Orchestra\\, Stanford Symphonic Chorus\\, a\r\n nd Stanford University Singers come together to present a special Winter Qu\r\n arter concert from the main stage of Bing Concert Hall.\\n\\nProgram\\n\\nBenja\r\n min Britten – Passacaglia from Peter GrimesWilliam Grant Still – In Memoria\r\n m: The Colored Soldiers Who Died for DemocracyJohn Eells\\, conductorGiusepp\r\n e Verdi – Messa da RequiemMikayla Sager\\, sopranoLaurel Semerdjian\\, altoBe\r\n njamin Liupaogo\\, tenorAshraf Sewailam\\, bass-baritoneStephen M. Sano\\, con\r\n ductorAdmission Information\\n\\nGeneral – $37 | Seniors (65+) and Non-Stanfo\r\n rd Students – $32\\nPrice shown reflects total cost including $4 online/phon\r\n e per-ticket fee.FREE admission for Stanford University students. One ticke\r\n t per ID\\, available beginning one hour prior to curtain at the venue.This \r\n event will be livestreamed.\r\nDTEND:20260308T050000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T033000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Symphony Orchestra\\, Symphonic Chorus\\, and University Sin\r\n gers\r\nUID:tag:localist.com\\,2008:EventInstance_51464380135258\r\nURL:https://events.stanford.edu/event/sso-ssc-usingers-2\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260308\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294351271\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260308\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355513326\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260308\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353977409\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260309T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910825673\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260308T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T160000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353497988\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium,Film/Screening\r\nDESCRIPTION:The William & Louise Greaves Filmmaker Seminar is a gathering d\r\n edicated to artists working in cinematic realms. Hosted by BlackStar in par\r\n tnership with Stanford University’s Institute for Diversity in the Arts\\, t\r\n his seminar provides an immersive space where filmmakers\\, curators\\, schol\r\n ars\\, critics\\, and cultural workers can explore both the technical and cre\r\n ative dimensions of media-making.\\n\\nNamed after William and Louise Greaves\r\n \\, visionary documentarians whose work broke new ground in truth-telling an\r\n d representation the seminar is built around honest conversations: success\\\r\n , struggle\\, craft\\, theory\\, innovation\\, and community!\r\nDTEND:20260309T050000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T170000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\\, Various Locations at Stanford\r\nSEQUENCE:0\r\nSUMMARY:2025 The William & Louise Greaves Filmmaker Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_50731771517568\r\nURL:https://events.stanford.edu/event/2025-greaves-filmmaker-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260308T190000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809524592\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Season of Lent: Lent is the forty-day period (excluding Sundays\r\n ) of prayer\\, repentance and self-denial that precedes Easter.\\n\\nUniversit\r\n y Public Worship gathers weekly for the religious\\, spiritual\\, ethical\\, a\r\n nd moral formation of the Stanford community. Rooted in the history and pro\r\n gressive Christian tradition of Stanford’s historic Memorial Church\\, we cu\r\n ltivate a community of compassion and belonging through ecumenical Christia\r\n n worship and occasional multifaith celebrations.\r\nDTEND:20260308T190000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Season of Lent Ecumenical Christian Serv\r\n ice \r\nUID:tag:localist.com\\,2008:EventInstance_51958449963463\r\nURL:https://events.stanford.edu/event/upw-lent-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260308T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691958047\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260308T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682833814\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:在博物馆导览员的带领下，探索坎特艺术中心的收藏品。导览员将为您介绍来自不同文化和不同时期的精选作品。\\n\\n欢迎您参与对话，分\r\n 享您对游览过程中所探讨主题的想法，或者按照自己的舒适程度参与互动。\\n\\n导览免费，但需提前登记。请通过以下链接选择并 RSVP 您希望参加的日期。\\\r\n n\\nFebruary 8\\, 2026: https://thethirdplace.is/event/February\\n\\nMarch 8\\, \r\n 2026: https://thethirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thet\r\n hirdplace.is/event/April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/M\r\n ay\\n\\nJune 14\\, 2026: https://thethirdplace.is/event/June\\n\\n______________\r\n _____________________________\\n\\nExplore the Cantor's collections with a mu\r\n seum engagement guide who will lead you through a selection of works from d\r\n ifferent cultures and time periods.\\n\\n Participants are welcomed to partic\r\n ipate in the conversation and provide their thoughts on themes explored thr\r\n oughout the tour but are also free to engage at their own comfort level. \\n\r\n \\n Tours are free of charge but require advance registration. Please select\r\n  and RSVP for your preferred date using the links below.\\n\\nFebruary 8\\, 20\r\n 26: https://thethirdplace.is/event/February\\n\\nMarch 8\\, 2026: https://thet\r\n hirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thethirdplace.is/event\r\n /April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/May\\n\\nJune 14\\, 20\r\n 26: https://thethirdplace.is/event/June\r\nDTEND:20260308T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Chinese \r\nUID:tag:localist.com\\,2008:EventInstance_51897285069897\r\nURL:https://events.stanford.edu/event/public-tour-cantor-highlights-chinese\r\n -language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260308T223000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708324114\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260308T230000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260308T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668844024\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260309T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T003000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52196934057522\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for an enchanting evening of vocal music featuring tale\r\n nted students from Kathryne Jennings' studio as they present a diverse prog\r\n ram spanning classical art songs\\, operatic arias\\, and show-stopping music\r\n al theater favorites.\\n\\nAdmission Information\\n\\nFree admission\r\nDTEND:20260309T040000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T023000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:The Voice Studio of Kathryne Jennings – Sing On!\r\nUID:tag:localist.com\\,2008:EventInstance_51463363907381\r\nURL:https://events.stanford.edu/event/sing-on-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260309\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249805243\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260309\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510326633\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260309\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353978434\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day of law classes. See the Law School academi\r\n c calendar website for more information.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260309\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Last Day of Law Classes\r\nUID:tag:localist.com\\,2008:EventInstance_50472522885988\r\nURL:https://events.stanford.edu/event/winter-quarter-last-day-of-law-classe\r\n s-5949\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260310T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098398569\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260310T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910826698\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260309T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T160000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353499013\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260310T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382773424\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260310T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T190000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561123176\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join a live conversation with education researcher Isabelle Hau\r\n  about her Spring 2026 Stanford Social Innovation Review cover story “Welco\r\n me to the Era of Relational Intelligence.” The author will talk with Profes\r\n sor Mitchell Stevens of the Stanford Graduate School of Education about her\r\n  vision of developing and expanding human capacities for flourishing in the\r\n  age of AI.\\n\\nSign up to join us on Monday\\, March 9\\, at 12 p.m. PST.\\n\\n\r\n  \\n\\nAbout the SSIR Author\\n\\nIsabelle C. Hau is a visionary leader who is \r\n dedicated to transforming the way we nurture and educate our children. \\n\\n\r\n As executive director of the Stanford Accelerator for Learning\\, she levera\r\n ges brain science and technology to champion innovative\\, effective\\, and i\r\n nclusive learning solutions. \\n\\nPreviously a successful impact investor\\, \r\n Isabelle led the US education practice at Omidyar Network and Imaginable Fu\r\n tures\\, where she invested in mission-driven organizations that have reache\r\n d millions of learners. She is the author of Love to Learn: The Transformat\r\n ive Power of Care and Connection in Early Childhood. At Stanford University\r\n \\, Isabelle teaches the class Design to Equip Learners in Under-Resourced C\r\n ommunities. She serves on the board of EDC and Design Tech High School\\, on\r\n  the steering committee of the EdSAFE AI Alliance\\, the Brookings Instituti\r\n on Global AI Taskforce\\, and the World Economic Forum’s 4.0 education allia\r\n nce.\\n\\nNamed as one of the 100 most inspiring women by Harvard Business Sc\r\n hool and a World Education Medal finalist\\, Isabelle has also received dist\r\n inctions in early childhood education and human-centered artificial intelli\r\n gence. She co-starred with Grover of Sesame Street. Her lifelong profession\r\n al goal is to bring the love of learning to each and every child.\r\nDTEND:20260309T194500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Dawn of Relational Intelligence: An SSIR Author Conversation\r\nUID:tag:localist.com\\,2008:EventInstance_52178862546042\r\nURL:https://events.stanford.edu/event/dawn-of-relational-intelligence\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Despite the rapid adoption of LLM chatbots\\, little is known ab\r\n out how they are used. We approach this question theoretically and empirica\r\n lly\\, modeling a user who chooses whether to complete a task herself\\, ask \r\n the chatbot for information that reduces decision noise\\, or delegate execu\r\n tion to the chatbot.\\n\\nThe model—a rational inattention problem with a noi\r\n sy delegation option—predicts that querying is favored for high-stakes\\, hi\r\n gh-context decisions\\, while delegation is favored for routine\\, low-contex\r\n t tasks where the chatbot has a productivity advantage. Empirically\\, we st\r\n udy the growth of ChatGPT’s consumer product from its launch in November 20\r\n 22 through July 2025\\, combining usage logs with a privacy-preserving pipel\r\n ine that classifies a representative sample of conversations. We document r\r\n apid global diﬀusion—reaching around 10% of the world’s adult population—wi\r\n th work use concentrated among highly educated\\, highly paid professionals \r\n and an increasing share of non-work use\\, which has risen from 53% to more \r\n than 70% of all messages.\\n\\nConversations are dominated by “Practical Guid\r\n ance\\,” “Seeking Information\\,” and “Writing\\,” and users with more complex\r\n \\, knowledge-intensive jobs—managers\\, highly educated\\, and higher-paid pr\r\n ofessionals—are more likely to use ChatGPT as a decision aide than as an ag\r\n ent\\, consistent with the model’s predictions.\r\nDTEND:20260309T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T190000Z\r\nGEO:37.429987;-122.17333\r\nLOCATION:Gates Computer Science Building\\, 119\r\nSEQUENCE:0\r\nSUMMARY:Zoë Hitzig | How People Use ChatGPT\r\nUID:tag:localist.com\\,2008:EventInstance_52179619800629\r\nURL:https://events.stanford.edu/event/zoe-hitzig-how-people-use-chatgpt\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour,Lecture/Presentation/Talk\r\nDESCRIPTION:Join Jason Linetzky\\, Museum Director at the Anderson Collectio\r\n n\\, on this special tour of Spotlights. \\n\\nThe Anderson Collection debuts \r\n spotlight installations of two celebrated artists—Susan Rothenberg and Robe\r\n rt Therrien. For the first time\\, visitors can experience focused presentat\r\n ions of their work at the museum\\, with multiple pieces by each artist brou\r\n ght into focus in dedicated gallery spaces. From Rothenberg’s dynamic figur\r\n ation to Therrien’s playful graphic and sculptural forms\\, these spotlights\r\n  showcase the power and range of modern and contemporary American art.\\n\\nR\r\n SVP here.\r\nDTEND:20260309T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, Upstairs Galleries\r\nSEQUENCE:0\r\nSUMMARY:Curator Talk | Spotlights with Jason Linetzky\r\nUID:tag:localist.com\\,2008:EventInstance_51305029670121\r\nURL:https://events.stanford.edu/event/curator-talk-spotlights-with-Jason_Li\r\n netzky\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260310T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T230000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, Clark S360\r\nSEQUENCE:0\r\nSUMMARY:Biology Seminar Series: Barnabas Daru\\, \"The biogeography of plants\r\n  on land and in the sea\"\r\nUID:tag:localist.com\\,2008:EventInstance_51455901815679\r\nURL:https://events.stanford.edu/event/biology-seminar-series-barnabas-daru-\r\n the-biogeography-of-plants-on-land-and-in-the-sea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Continue the conversation: Join the speaker for a complimentary\r\n  dinner in the Theory Center (second floor of the neurosciences building) a\r\n fter the seminar\\n\\nThis seminar event will feature two talks presented by \r\n Stanford PhD students Siddharth Doshi and Lara Weed.\\n\\nBio-inspired adapti\r\n ve photonic interfaces from nanostructured soft matterAbstract\\n\\nDevices t\r\n hat deliver and collect light are enabling key biotechnologies such as endo\r\n scopic imagers\\, spectrometers and optogenetic probes. The next generation \r\n of these photonic bio-interfaces will require mechanically adaptive\\, minim\r\n ally invasive devices that can dynamically manipulate the shape of optical \r\n wavefronts and their spectral properties in situ. However\\, realizing such \r\n devices presents a substantial materials challenge - optical devices are ty\r\n pically made of rigid bulk materials such as glass that interface poorly wi\r\n th soft tissue\\, have limited prospects for miniaturization and static prop\r\n erties. To address this challenge\\, we drew inspiration from living systems\r\n \\, where shape changes in soft materials are frequently used to shape optic\r\n al wavefronts.\\n\\nIn this talk\\, I will discuss how we addressed this chall\r\n enge by drawing inspiration from living systems\\, where shape changes in so\r\n ft matter are frequently used to control optical wavefronts. I will introdu\r\n ce how combining dynamic soft matter with engineered nanophotonic structure\r\n s allows for control of light through nanoscale manipulation of geometry. B\r\n y capitalizing on the electrochemical swelling of the conductive polymer\\, \r\n PEDOT:PSS\\, we were able to alter the shape and associated resonant respons\r\n e of nanophotonic elements. This allowed us to steer light beams and change\r\n  their spectral properties at low voltages ( 1.5V) that are compatible with\r\n  widely used CMOS electronics. Our devices can be realised as ultra-thin\\, \r\n sub-micron coatings\\, and provide a building block for a new generation of \r\n active opto-electronic devices amenable for integration with the human body\r\n \\, potentially enabling new applications in implantable light guiding and b\r\n io-imaging.\\n\\n \\n\\nSiddharth DoshiMelosh and Brongersma Labs\\, Stanford Un\r\n iversity \\n\\nSiddharth is a Kavli Presidential Postdoctoral Fellow at Calte\r\n ch\\, where he is working to develop a new generation of human-technology in\r\n terfaces. Until recently\\, Siddharth was a PhD student in Materials Science\r\n  at Stanford where he was a Meta PhD Fellow in Photonics and MBCT Trainee. \r\n His research with Nicholas Melosh and Mark Brongersma focused on developing\r\n  electrically tunable active bio-photonic devices using soft polymers. He r\r\n eceived his undergraduate degree in Engineering from the University of New \r\n South Wales (Sydney\\, Australia).\\n\\nVisit Lab Website \\n\\nCircadian AI: Wh\r\n at we can learn from mathematically modeling human sleep and circadian rhyt\r\n hmsAbstract\\n\\nHuman sleep and circadian clock timing emerge from interacti\r\n ons between endogenous biological oscillators\\, sleep debt\\, and environmen\r\n tal cues such as light. This talk explores how mathematical models\\, combin\r\n ed with modern AI approaches\\, can be used to study emergent timing propert\r\n ies\\, circadian misalignment\\, and intervention design\\, offering new insig\r\n ht into the factors influencing physiological timekeeping.\\n\\n \\n\\nLara Wee\r\n dZeitzer Circadian Research Lab\\, Stanford University \\n\\nLara is a bioengi\r\n neering PhD Candidate at Stanford University and NIH F31 Predoctoral Fellow\r\n  funded through the National Heart\\, Lung\\, and Blood Institute (NHLBI). He\r\n r research is centered on understanding human health and performance throug\r\n h interpreting the hidden language of the body using wearable sensors measu\r\n ring physiology\\, behavior\\, and biomechanics. Her thesis work\\, advised by\r\n  Dr. Jamie Zeitzer in the Zeitzer Circadian Research Laboratory\\, explores \r\n the interplay between sleep\\, circadian rhythms\\, and the menstrual cycle\\,\r\n  focusing on their influence on neuromuscular performance in women. Her res\r\n earch and training has previously been funded through the NeuroTech Trainin\r\n g Program and Wu Tsai Human Performance Alliance. Prior to Stanford\\, she o\r\n btained my bachelor's in biomedical engineering\\, with minors in mathematic\r\n s and chemistry\\, at the University of Vermont in 2020 and earned a Master’\r\n s in Bioengineering from Stanford University in 2022. She is expecting to c\r\n omplete her PhD in 2026.\\n\\nVisit Lab Website \\n\\n \\n\\nAbout the Mind\\, Bra\r\n in\\, Computation\\, and Technology (MBCT) Seminar SeriesThe Stanford Center \r\n for Mind\\, Brain\\, Computation and Technology (MBCT) Seminars explore ways \r\n in which computational and technical approaches are being used to advance t\r\n he frontiers of neuroscience. \\n\\nThe series features speakers from other i\r\n nstitutions\\, Stanford faculty\\, and senior training program trainees. Semi\r\n nars occur about every other week\\, and are held at 4:00 pm on Mondays at t\r\n he Cynthia Fry Gunn Rotunda - Stanford Neurosciences E-241. \\n\\nQuestions? \r\n Contact neuroscience@stanford.edu\\n\\nSign up to hear about all our upcoming\r\n  events\r\nDTEND:20260310T001500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T230000Z\r\nLOCATION:Stanford Neurosciences Building | Gunn Rotunda (E241)\r\nSEQUENCE:0\r\nSUMMARY:MBCT Seminar: Talks from Siddharth Doshi &amp\\; Lara Weed\r\nUID:tag:localist.com\\,2008:EventInstance_51910619060361\r\nURL:https://events.stanford.edu/event/mbct-seminar-talks-from-siddharth-dos\r\n hi-amp-lara-weed\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Stanford Energy Seminar has been a mainstay of energy engag\r\n ement at Stanford for nearly 20 years and is one of the flagship programs o\r\n f the Precourt Institute for Energy. We aim to bring a wide variety of pers\r\n pectives to the Stanford community – academics\\, entrepreneurs\\, utilities\\\r\n , non-profits\\, and more. \\n\\n \\n\\nAbout the talk\\n\\nThis session will prov\r\n ide an overview of different ways that a climate technology startup can rai\r\n se capital and obtain other support at the pre-seed and seed/series a stage\r\n  of its development.\\n\\n \\n\\nCraig Tighe is a partner in DLA Piper’s Silico\r\n n Valley office. He focuses his practice on representing emerging growth co\r\n mpanies and their investors and lenders\\, with a concentration on the Clima\r\n te Technology sector. He has worked with companies and financing parties in\r\n  a wide range of Climate Technology businesses\\, including solar\\, batterie\r\n s\\, electric and autonomous vehicles and energy and water conservation. He \r\n represents a number of venture capital firms as well as the corporateventur\r\n e arms of energy and\\nutility companies and handles investments from the se\r\n ed stage to exit events. In addition\\, Craig assists several startup accele\r\n rators. He regularly counsels clients on fiduciary and environmental\\, soci\r\n al and governance matters.\\nCraig serves on the advisory boards of several \r\n climate and environmental nonprofits and is a former member of the Board of\r\n  Directors of the San Francisco Zoological Society.\\nHe regularly teaches a\r\n  clinical course on representing startups at UC Law San Francisco (formerly\r\n  Hastings Law School). Craig also teaches international business negotiatio\r\n ns to government lawyers in East Africa through DLA’s New Perimeter program\r\n .\\nHe is a graduate of Stanford Law School and Wesleyan University.\\n\\n \\n\\\r\n nAnyone with an interest in energy is welcome to join! You can enjoy semina\r\n rs in the following ways:\\n\\nAttend live. The auditorium may change quarter\r\n  by quarter\\, so check each seminar event to confirm the location. Explore \r\n the current quarter's schedule.Watch live in a browser livestream if availa\r\n ble. Check each seminar event for its unique livestream URL.Watch recording\r\n s of past seminars Available on the Past Energy Seminars page and the Energ\r\n y Seminars playlist of the Stanford Energy YouTube channel(For students) Ta\r\n ke the seminar as a 1-unit class (CEE 301/ENERGY 301/MS&E 494) \\n\\nIf you'd\r\n  like to join the Stanford Energy Seminar mailing list to hear about upcomi\r\n ng talks\\, sign up here.\r\nDTEND:20260310T002000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260309T233000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 370\\, 370\r\nSEQUENCE:0\r\nSUMMARY:Stanford Energy Seminar | Financing a Climate Technology Startup | \r\n Craig Tighe\\, DLA Piper\r\nUID:tag:localist.com\\,2008:EventInstance_51489928600197\r\nURL:https://events.stanford.edu/event/stanford-energy-seminar-craig-tighe-d\r\n istinguished-careers-institute\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260310T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430655344\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260310\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510338922\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260310\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353978435\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T150000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 139\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Main Campus\\, Huang Bldg\\, Room\r\n  139) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525325991476\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-main-campus-huang-bldg-room-139-by-appointment-only-5749\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for SHE Talks on Tuesday\\, March 10—an impactful mornin\r\n g of health insights from sources you can trust. Hear from four leading Sta\r\n nford experts who will discuss the topics that matter to you most\\, from th\r\n e foods you eat and how they influence your health to the power of movement\r\n  as medicine\\, preventive health screenings at every age\\, and more. You’ll\r\n  come away with simple habits you can implement today to add years to your \r\n life and life to your years.\\n\\nSign up now to attend for free at Bing Conc\r\n ert Hall or watch the livestream: shetalksregister.stanford.edu.\r\nDTEND:20260310T184500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T153000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:SHE Talks\r\nUID:tag:localist.com\\,2008:EventInstance_52127812233120\r\nURL:https://events.stanford.edu/event/she-talks\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098399594\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910827723\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260310T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T160000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353500038\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382777521\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260310T202000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T190000Z\r\nLOCATION:Turing Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Atmosphere & Energy Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_52011065149779\r\nURL:https://events.stanford.edu/event/atmosphere-energy-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T190000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561124201\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Bio:\\n\\nGenna is a Mendenhall postdoctoral fellow with the USGS\r\n  California Volcano Observatory. She obtained her PhD at Vanderbilt Univers\r\n ity where she worked on supereruption-sized\\, crystal-rich rhyolites from t\r\n he Ora Caldera in Northern Italy. At the USGS\\, she has been working to und\r\n erstand the eruptive history at Mono Craters (CA) and associated volcanic h\r\n azards. She uses radiometric dating and field observations to constrain eru\r\n ptive chronologies\\, glass and mineral compositions to find unique geochemi\r\n cal signatures of volcanic units\\, and textural analysis of glasses and min\r\n erals to understand the magmatic processes that occurred prior to eruption.\r\n \\n\\n \\n\\nAbstract:\\n\\nWith ~30 high-silica rhyolite domes and flows and a t\r\n otal eruptive volume of ~5—8.5 km3(DRE)\\, the Mono Craters volcanic chain i\r\n s one of the youngest and most active silicic systems in North America. Eff\r\n usive products range in age from ~42 ka to 0.7 ka and exhibit changes in mi\r\n neralogy (biotite-\\, orthopyroxene-\\, or fayalite-bearing) and crystallinit\r\n y through time. Ion microprobe 238U-230Th dating of allanite and zircon sur\r\n faces was previously used to obtain final crystallization ages for the four\r\n  older biotite-bearing domes (~40—20 ka) and two orthopyroxene-bearing dome\r\n s (~12—9 ka). Whole-rock trace-element compositions and zircon-saturation t\r\n emperatures from these domes reveal compositional trends and provide insigh\r\n ts on changing magmatic conditions through time. We report new ion micropro\r\n be 238U-230Th isochron ages for all nine fayalite-bearing Mono domes from p\r\n aired allanite and zircon surfaces\\, which are assumed to be eruption ages.\r\n  Whole-rock and titanomagnetite compositions reveal that the fayalite-beari\r\n ng domes are compositionally indistinguishable despite having the largest s\r\n patial distribution of all the Mono dome types\\, stretching over ~12 km fro\r\n m the northernmost to the southernmost dome. Overall\\, our results reveal a\r\n n unprecedented change in eruptive frequency over the history of the volcan\r\n ic chain\\, with all fayalite-bearing domes erupting 6 ± 0.4 ka and evacuati\r\n ng >0.3 km3 of high-silica rhyolite lava.\r\nDTEND:20260310T201500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T190000Z\r\nLOCATION:Building 320\\, Geology Corner\\, Room 220\r\nSEQUENCE:0\r\nSUMMARY:Earth Planetary Science Seminar - Dr Genna Chiaro \"An extensive and\r\n  short-lived venting of fayalite-bearing high-silica rhyolite at Mono Crate\r\n rs during the mid-Holocene\".\".\r\nUID:tag:localist.com\\,2008:EventInstance_52275988338613\r\nURL:https://events.stanford.edu/event/earth-planetary-science-seminar-dr-ge\r\n nna-chiaro-an-extensive-and-short-lived-venting-of-fayalite-bearing-high-si\r\n lica-rhyolite-at-mono-craters-during-the-mid-holocene\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:Producer Samuel Dameus will discuss his film\\, The Heroes of th\r\n e Massacre River\\, a powerful documentary that chronicles the stories of th\r\n e pioneers behind the construction of the historic Canal of Ouanaminthe\\, a\r\n  project that united Haitians across the nation and the diaspora. This film\r\n  celebrates the groundbreaking efforts of key figures\\, including Dr. Bertr\r\n ude Albert\\, Dr. Naismy-Mary Fleurant\\, Architect Wideline Pierre\\, Economi\r\n st Etzer Emile\\, and dedicated canal workers Milourie Sylfrard\\, Theodore J\r\n ohnson\\, and Joseph Pressoir\\, guided by the investigative journey of Max A\r\n ngie Clervil.\\n\\nThis event is part of the \"Haiti: Past\\, Present\\, and Fut\r\n ures\" event series organized by Professor Rachel Jean-Baptiste (History and\r\n  African & African American Studies).\r\nDTEND:20260310T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 200\\, History Corner\\, Room 307\r\nSEQUENCE:0\r\nSUMMARY:Film Screening and Q&A with Producer of The Heroes of the Massacre \r\n River\r\nUID:tag:localist.com\\,2008:EventInstance_52081756532493\r\nURL:https://events.stanford.edu/event/film-screening-and-qa-with-producer-o\r\n f-the-heroes-of-the-massacre-river\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDTEND:20260310T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Honors in the Arts Info Session\r\nUID:tag:localist.com\\,2008:EventInstance_50323416412041\r\nURL:https://events.stanford.edu/event/honors-in-the-arts-info-session-8677\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please join us for a workshop with Junior Professor Margit Dahm\r\n  (Kiel University) entitled\\, \"Female Writers\\, Female Writing: Markings of\r\n  Female Textual Production in German-Language Manuscripts\"\\n\\nThe workshop \r\n addresses the question of female participation in medieval writing\\, which \r\n is explored on the basis of an evaluation of scribal colophons from German-\r\n language manuscripts of the Middle Ages. After outlining what information v\r\n alue colophons provide about medieval scribes\\, the workshop adresses the q\r\n uestion of gender-specific information. How did female scribes articulate t\r\n hemselves in a male-dominated writing tradition? What specific strategies h\r\n ave they used to mark the manuscripts for which they were responsible? What\r\n  conclusions can be drawn from these observations about female professional\r\n ism in medieval writing?\\n\\nThe lecture will be followed by a joint reading\r\n  and discussion of selected colophons written by female writers. By examini\r\n ng these texts for signs of female writing and gender-specific forms of col\r\n ophon design\\, the traces of female agency in medieval writing are investig\r\n ated.\\n\\nRSVP for the Margit Dahm Workshop\r\nDTEND:20260310T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Rm 252\r\nSEQUENCE:0\r\nSUMMARY:SCRIPTA: JProf. Margit Dahm: Female Writers\\, Female Writing: Marki\r\n ngs of Female Textual Production in German-Language Manuscripts\r\nUID:tag:localist.com\\,2008:EventInstance_52056585068463\r\nURL:https://events.stanford.edu/event/scripta-jprof-margit-dahm-female-writ\r\n ers-female-writing-markings-of-female-textual-production-in-german-language\r\n -manuscripts\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:This talk does what it says on the box: it aims to give student\r\n s\\, faculty\\, and academic administrators useful language for defending the\r\n  humanities\\, the idea of a liberal arts education\\, and the university.\\n\\\r\n nLunch at 11:45 a.m. for in-person attendees\\n\\nRegister to join online\\n \\\r\n n\\nAbout the Speaker\\n\\nEric Hayot is Distinguished Professor of Comparativ\r\n e Literature and Asian Studies at Penn State University. He is the author o\r\n f five books\\, including On Literary Worlds (2012)\\, The Elements of Academ\r\n ic Style (2014)\\, and Humanist Reason (2021). He is the co-creator of the A\r\n gainst AI and Humanities Works websites\\, the co-translator of Peter Janich\r\n ’s What Is Information?\\, and the co-editor of collections on modernism\\, E\r\n ast/West comparison\\, and information studies.\r\nDTEND:20260310T201500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, 433A\r\nSEQUENCE:0\r\nSUMMARY:Eric Hayot | How to Defend the Humanities in Five Steps\r\nUID:tag:localist.com\\,2008:EventInstance_52259177844946\r\nURL:https://events.stanford.edu/event/eric-hayot-how-to-defend-the-humaniti\r\n es-in-five-steps\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260310T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491611541\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This month’s Special\\, Unique\\, and Rare pop-up exhibit offers \r\n a glimpse into world CINEMA through Stanford Libraries’ collections: poster\r\n s\\, stills\\, scrapbooks\\, artists' books\\, directors' archives and more!\\n\\\r\n nDrop in any time between 2-4 PM on Tuesday\\, March  10th\\, Hohbach 123 (Si\r\n licon Valley Archive classroom\\, Green Library).\\n\\nFor once-a-monthly noti\r\n fications about upcoming Special\\, Unique & Rare pop-up exhibits\\, join our\r\n  mailing list.\r\nDTEND:20260310T230000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T210000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Hohbach Hall 123 (1st floor\\, East Win\r\n g)\r\nSEQUENCE:0\r\nSUMMARY:Special\\, Unique\\, and Rare: CINEMA\r\nUID:tag:localist.com\\,2008:EventInstance_52215583547904\r\nURL:https://events.stanford.edu/event/special-unique-and-rare-cinema\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Samuel Charap\\, Distinguished Chair in Russia and Eurasia Polic\r\n y and senior political scientist at RAND\\, and Gabrielius Landsbergis\\, for\r\n mer foreign affairs minister of Lithuania\\, discuss the Russia–Ukraine war.\r\n   \\n\\nDeep disagreement pervades our democracy\\, from arguments over immigr\r\n ation\\, gun control\\, abortion\\, and the Middle East crisis\\, to the functi\r\n on of elite higher education and the value of free speech itself. Loud voic\r\n es drown out discussion. Open-mindedness and humility seem in short supply \r\n among politicians and citizens alike. Yet constructive disagreement is an e\r\n ssential feature of a democratic society. This class explores and models re\r\n spectful civic disagreement. Each week features scholars who disagree — som\r\n etimes quite strongly — about major policy issues. Each class will be focus\r\n ed on a different topic and have guest speakers. Students will have the opp\r\n ortunity to probe those disagreements\\, to understand why they persist even\r\n  in the light of shared evidence\\, and to improve their own understanding o\r\n f the facts and values that underlie them.\\n\\nThis course is offered in the\r\n  spirit of the observation by Hanna Holborn Gray\\, former president of the \r\n University of Chicago\\, that “education should not be intended to make peop\r\n le comfortable\\, it is meant to make them think. Universities should be exp\r\n ected to provide the conditions within which hard thought\\, and therefore s\r\n trong disagreement\\, independent judgment\\, and the questioning of stubborn\r\n  assumptions\\, can flourish in an environment of the greatest freedom.”\\n\\n\r\n The speakers in this course are the guests of the faculty and students alik\r\n e and should be treated as such. They are aware that their views will be su\r\n bject to criticism in a manner consistent with our commitment to respectful\r\n  critical discourse. We will provide as much room for students’ questions a\r\n nd comments as is possible for a class of several hundred. For anyone who f\r\n eels motivated to engage in a protest against particular speakers\\, there a\r\n re spaces outside the classroom for doing so.\\n\\nWhen/Where?: Tuesdays 3:00\r\n -4:50PM in Cemex Auditorium\\n\\nWho?: This class will be open to students\\, \r\n faculty and staff to attend and will also be recorded.\\n\\n1/6 Administrativ\r\n e State: https://events.stanford.edu/event/the-administrative-state-with-br\r\n ian-fletcher-and-saikrishna-prakash\\n\\n1/13 Israel-Palestine: https://event\r\n s.stanford.edu/event/democracy-and-disagreement-israel-palestine-the-future\r\n -of-palestine\\n\\n1/20 COVID Policies in Retrospect: https://events.stanford\r\n .edu/event/democracy-and-disagreement-covid-policies-in-retrospect-with-sar\r\n a-cody-and-stephen-macedo\\n\\n1/27 Gender-Affirming Care: https://events.sta\r\n nford.edu/event/democracy-and-disagreement-gender-affirming-care-with-alex-\r\n byrne-and-amy-tishelman\\n\\n2/3 Fetal Personhood: https://events.stanford.ed\r\n u/event/democracy-and-disagreement-fetal-personhood-with-rachel-rebouche-an\r\n d-chris-tollefsen\\n\\n2/10 Internet Regulation: https://events.stanford.edu/\r\n event/democracy-and-disagreement-internet-regulation-the-take-it-down-act-w\r\n ith-eric-goldman-and-jim-steyer\\n\\n2/17 Restrictions on College Protests: h\r\n ttps://events.stanford.edu/event/democracy-and-disagreement-restrictions-on\r\n -college-protests-with-richard-shweder-and-shirin-sinnar\\n\\n2/24 Proportion\r\n al Representation: https://events.stanford.edu/event/democracy-and-disagree\r\n ment-proportional-representation-with-bruce-cain-and-lee-drutman \\n\\n3/3 AI\r\n  and Jobs: https://events.stanford.edu/event/democracy-and-disagreement-ai-\r\n and-jobs-with-bharat-chander-and-rob-reich\r\nDTEND:20260310T235000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T220000Z\r\nGEO:37.428584;-122.162763\r\nLOCATION:GSB Knight - Arbuckle / Cemex\r\nSEQUENCE:0\r\nSUMMARY:Democracy and Disagreement: Ending the Russia–Ukraine War with Samu\r\n el Charap and Gabrielius Landsbergis\r\nUID:tag:localist.com\\,2008:EventInstance_51569338386234\r\nURL:https://events.stanford.edu/event/democracy-and-disagreement-ending-the\r\n -russiaukraine-war-with-samuel-charap-and-gabrielius-landsbergis\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This group is designed to support students who wish to have a s\r\n afe healing space through utilization of art. Sessions will include hand bu\r\n ilding clay\\, doodling\\, watercolor painting\\, Turkish lump making\\, Chines\r\n e calligraphy\\, rock painting\\, washi tape art\\, terrarium making\\, origami\r\n  and matcha tea. \\n\\nPre-screening is required. Mari or Marisa will reach o\r\n ut to schedule a confidential pre-screening phone or zoom call. \\n\\nWHEN: E\r\n very Tuesday from 3:00 PM - 4:30 PM in Fall Quarter for 7-8 sessions (start\r\n ing on Tuesday in the beginning of Feb\\, 2026) \\n\\nWHERE: In person @ Room \r\n 306 in Kingscote Gardens (419 Lagunita Drive\\, 3rd floor)\\n\\nWHO: Stanford \r\n undergrad and grad students Facilitators: Mari Evers\\, LCSW & Marisa Pereir\r\n a\\, LCSW from Stanford Confidential Support Team\r\nDTEND:20260310T233000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T220000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden \r\nSEQUENCE:0\r\nSUMMARY:Healing with Art group \r\nUID:tag:localist.com\\,2008:EventInstance_51827321269612\r\nURL:https://events.stanford.edu/event/healing-with-art-group-6772\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Counseling & Psychological Services is happy to offer Rooted! T\r\n his is a support group for Black-identified Stanford graduate students that\r\n  is designed to be a confidential space for students to speak their minds\\,\r\n  build community\\, rest\\, connect with themselves\\, and learn coping skills\r\n  for managing graduate life at Stanford.\\n\\nFacilitated by Cierra Whatley\\,\r\n  PhD & Katie Ohene-Gambill\\, PsyDThis group meets in-person on Tuesdays fro\r\n m 4-5pm on 1/27\\; 2/3\\; 2/10\\; 2/17\\; 2/24\\; 3/3\\; 3/10All enrolled student\r\n s are eligible to participate in CAPS groups and workshops. A pre-group mee\r\n ting is required prior to participation in this group. Please contact CAPS \r\n at (650) 723-3785 to schedule a pre-group meeting with the facilitators.\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T230000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Rooted! Black Graduate Student Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51579799617569\r\nURL:https://events.stanford.edu/event/copy-of-rooted-black-graduate-student\r\n -support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, March 10\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\, o\r\n r Zoom for a presentation by Reuben Shaw\\, PhD\\, director of the Salk Insti\r\n tute Cancer Center. \\n\\nDr. Shaw’s research has been instrumental in defini\r\n ng how tumor suppressor and oncogene signaling pathways interact to regulat\r\n e cellular metabolism. His lab discovered that LKB1\\, a gene frequently mut\r\n ated in cancer\\, regulates the AMPK enzyme\\, establishing the LKB1–AMPK pat\r\n hway as a central energy-sensing mechanism that reprograms cell growth and \r\n metabolism under nutrient stress. His lab has focused on how various kinase\r\n s sense changes in cellular energy and coordinate that with mitochondrial f\r\n unction and turnover. His work has illuminated how exercise\\, diet\\, and me\r\n tformin suppress diabetes and cancer\\, and has helped identify therapeutic \r\n strategies targeting metabolic vulnerabilities in cancer.The event is open \r\n to Stanford Cancer Institute members\\, postdocs\\, fellows\\, and students\\, \r\n as well as Stanford University and Stanford Medicine faculty\\, trainees\\, a\r\n nd staff interested in basic\\, translational\\, clinical\\, and population-ba\r\n sed cancer research.\\n\\nRegistration is encouraged.\r\nDTEND:20260311T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T230000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: 25 Years of the \r\n LKB1/STK11 Tumor Suppressor: From Immunotherapy Resistance to Cachexia\r\nUID:tag:localist.com\\,2008:EventInstance_51288416173548\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-25-years-of-the-lkb1stk11-tumor-suppressor-from-immunotherapy-\r\n resistance-to-cachexia\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:In this talk and workshop\\, we’ll go over some of the basic rea\r\n sons why writing at the graduate and professional levels is so difficult. W\r\n e’ll cover material from Elements of Academic Style\\, and focus on two part\r\n icular areas of interest: the Uneven U\\, and how to produce dynamic amplitu\r\n de in your writing.\\n\\nThe session will begin with a 30-minute talk\\, follo\r\n wed by a 15-minute exercise\\, and will conclude with time for questions and\r\n  conversation. \\n\\nRSVP for writing workshop with Prof. Eric Hayot\r\nDTEND:20260311T003000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T230000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Rm 252\r\nSEQUENCE:0\r\nSUMMARY:Talk / Writing Workshop: “Why Writing is Hard\\, And What to Do Abou\r\n t It” with Prof. Eric Hayot (Distinguished Prof. of Comparative Literature \r\n and Asian Studies\\, Penn State)\r\nUID:tag:localist.com\\,2008:EventInstance_52208309045722\r\nURL:https://events.stanford.edu/event/writing-workshop-prof-eric-hayot-dist\r\n inguished-professor-of-comparative-literature-and-asian-studies-pennstate\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Beginning in the late nineteenth century\\, Japan burst onto the\r\n  world stage as the first society outside the West to undergo a modern indu\r\n strial revolution. What role did earlier developments play in this striking\r\n  take-off? This talk delves into this enduring question of Japanese history\r\n  through the lens of iron: a material as fundamental to modern trains and a\r\n rtillery as it was to earlier farming tools and samurai swords. Before the \r\n Meiji Restoration of 1868\\, distinctive methods of ironmaking flourished in\r\n  the mountains of Japan’s southwestern region of Chūgoku\\, with distinctive\r\n  forms of labor\\, technology\\, and environmental effects. After the Meiji R\r\n estoration\\, Japan’s ironmakers struggled to find a place in a world domina\r\n ted by European and American ironmakers who relied on different materials\\,\r\n  different geographies\\, and different forms of technology. Yet\\, surprisin\r\n gly\\, local pathways of ironmaking maintained significance deep into the tw\r\n entieth century. This talk explores two places\\, both called “Yawata\\,” to \r\n examine how and why homegrown modes of ironmaking persisted alongside moder\r\n n mass production\\, and what this can tell us about continuity and disconti\r\n nuity in the history of Japan. (Image: Governmental Yawata Iron & Steel Wor\r\n ks from the book \"Showa History of 100 million people Vol.14\" published by \r\n Mainichi Newspapers Company.)\\n\\nThis event is free and open to the public.\r\n  Please RSVP here. \\n\\nAbout the speaker:\\n\\nJoanna Linzer is an Assistant \r\n Professor in history at the College of the Holy Cross in Worcester\\, Massac\r\n husetts. An environmental historian with a focus on Japan\\, she received he\r\n r Ph.D. in history from Yale University in 2021 and was a 2021-2023 Environ\r\n mental Fellow at the Harvard University Center for the Environment. Her boo\r\n k manuscript\\, Iron Archipelago: Environment and Industry in Early Modern a\r\n nd Modern Japan\\, places industrial activity at the heart of Japan’s early \r\n modern economy\\, arguing that political negotiations over industry's enviro\r\n nmental impacts have a deeper and more global history than commonly acknowl\r\n edged. In 17th-19th-century Japan\\, conflicts and compromises over the dram\r\n atic environmental effects of iron mining were part and parcel of a society\r\n  that has been prominently cast as a sustainable exception in an increasing\r\n ly destructive early modern world. The unequal social burden of pollution f\r\n rom Japan’s iron mines during this period featured in an article in Environ\r\n mental History. Linzer’s other research interests include Japan's pivotal r\r\n ole in the silver trade that linked the world during the early modern \"firs\r\n t global age\" and the modern history of renewable energy in Japan.\r\nDTEND:20260311T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260310T233000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, 224\r\nSEQUENCE:0\r\nSUMMARY:The Two Yawatas: The Modern Afterlives of Japan’s Early Modern Iron\r\n  Industry\r\nUID:tag:localist.com\\,2008:EventInstance_51595877346875\r\nURL:https://events.stanford.edu/event/the-two-yawatas-the-modern-afterlives\r\n -of-japans-early-modern-iron-industry\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Join us for Game Nights every Tuesday in Green Library from 5pm\r\n -8pm in the IC Classroom (near the Reference Desk) of Green Library! These \r\n Game Nights will be open to all\\, from those who can only stop by briefly t\r\n o those who can be there for the entire time.\\n\\nIf you would like to be ad\r\n ded to the Game Nights @ Green mailing list\\, suggest a game\\, or if you ha\r\n ve other feedback\\, please fill out this contact form.\r\nDTEND:20260311T030000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T000000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, IC Classroom\r\nSEQUENCE:0\r\nSUMMARY:Game Nights @ Green\r\nUID:tag:localist.com\\,2008:EventInstance_51808898345573\r\nURL:https://events.stanford.edu/event/game-nights-green-5524\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Co-Hosted by Stanford Climate Ventures and Stanford Ecopreneurs\r\n hip \\n\\nOn the eve before the top teams in Stanford Climate Ventures pitch \r\n their start-ups to venture capitalists the next morning\\, they will be pitc\r\n hing to you!  Because the finale in their class will not accommodate all wh\r\n o are interested\\, this is your chance to see what the teams in 2025 are pi\r\n tching. It’s also a great opportunity to scout the capstone experience of S\r\n CV and consider whether you would want to join a team in a future year.\\n\\n\r\n Solving the global climate challenge will require the creation and successf\r\n ul scale-up of hundreds of new ventures. Stanford Climate Ventures is a thr\r\n ee-quarter project-based course sequence that practices the creation of tra\r\n nsformational climate ventures and innovation models. Since autumn 2016\\, t\r\n he course has been the launchpad for 103 distinct projects\\, resulting in 5\r\n 2 new companies. These companies have raised over $1.13B to pursue further \r\n development\\, and SCV companies currently employ more than 750 people in 19\r\n  different countries on 5 different continents.\\n\\nThe lineup:\\n\\n5:20pm: E\r\n -Flex — Unlocking industrial energy flexibility\\n\\n5:40pm: DualWell — Drill\r\n  once\\, decarbonize twice.\\n\\n6:00pm: BYOT — Enabling large loads to interc\r\n onnect faster by bringing their own transmission upgrades\\n\\n6:20pm: ODIN —\r\n  Stabilizing renewable energy production one module at a time\\n\\n6:40pm: Fl\r\n ex Pool — Turning swimming pools into flexible grid assets\\n\\n7:00pm: Green\r\n hill — Building high efficiency commercial heat pumps\\n\\n7:20pm: End\\n\\nRSV\r\n P Required.\r\nDTEND:20260311T022000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T002000Z\r\nGEO:37.424189;-122.177964\r\nLOCATION:Elliott Program Center\r\nSEQUENCE:0\r\nSUMMARY:Stanford Climate Ventures: Investor-Eve Pitches\r\nUID:tag:localist.com\\,2008:EventInstance_52092789394058\r\nURL:https://events.stanford.edu/event/stanford-climate-ventures-investor-ev\r\n e-pitches\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260311T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663078833\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change during Winter Quarter.\\n\\nRelax\r\n  + Center with Yoga Class with Diane Saenz. A traditional\\, easy-to-learn s\r\n ystem of Hatha Yoga which encourages proper breathing and emphasizes relaxa\r\n tion.  A typical class includes breathing exercises\\, warm-ups\\, postures a\r\n nd deep relaxation.  The focus is on a systematic and balanced sequence tha\r\n t builds a strong foundation of basic asanas from which variations may be a\r\n dded to further deepen the practice.  This practice is both for beginners a\r\n nd seasoned practitioners alike to help calm the mind and reduce tension.\\n\r\n \\nDiane Saenz (she/her) is a yoga instructor with more than 20 years of exp\r\n erience in the use of yoga and meditation to improve mental and physical we\r\n ll-being.  Following a classical approach\\, she leans on asana and pranayam\r\n a as tools to invite participants into the present moment.  Diane completed\r\n  her 500 hour level training with the International Sivananda Yoga Vedanta \r\n Organization in South India\\, followed by specializations in adaptive yoga \r\n and yoga for kids.  She has taught adult and youth audiences around the glo\r\n be.\r\nDTEND:20260311T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Old Union\\, Room 302)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932526683204\r\nURL:https://events.stanford.edu/event/yoga-tuesdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260311\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294355370\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260311\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355515375\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260311\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510347115\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260311\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539259045\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260311\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353979460\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260312T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098399595\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260312T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910828748\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:CAS IHAWG brings together graduate students across humanities d\r\n isciplines for sustained\\, collective writing and scholarly exchange. Hoste\r\n d by the Center for African Studies\\, the group meets weekly to combine dis\r\n ciplined co-writing sessions with peer-led workshops and a speaker series t\r\n hat showcases Africanist humanities research. We foster an encouraging\\, pr\r\n oductive environment where members share work-in-progress\\, troubleshoot wr\r\n iting challenges\\, and celebrate milestones in their research. Who should c\r\n onsider joining:\\n\\nGraduate students whose research engages Africa or the \r\n African diaspora in humanities fields\\, including DAAAS/DLCL and other area\r\n  studies\\, art and art history\\, film and media\\, comparative literature\\, \r\n CCSRE\\, education\\, English\\, feminist and gender studies\\, musicology\\, ph\r\n ilosophy\\, linguistics\\, religious studies\\, and theater/performance studie\r\n s. Interdisciplinary and cross-departmental participation is strongly encou\r\n raged.\\n\\nAttendance can be regular or occasional to accommodate academic s\r\n chedules.\\n\\nClick here to receive meeting notices and event updates. \\n\\nF\r\n or questions\\, contact Mpho (mmolefe@stanford.edu) or Seyi (jesuseyi@stanfo\r\n rd.edu).\\n\\nWe welcome you to join our writing community.\r\nDTEND:20260311T183000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T160000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 127\r\nSEQUENCE:0\r\nSUMMARY:Interdisciplinary Humanities Africanist Writing Group (IHAWG)\r\nUID:tag:localist.com\\,2008:EventInstance_52153415601918\r\nURL:https://events.stanford.edu/event/interdisciplinary-humanities-africani\r\n st-writing-group-ihawg\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260311T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T160000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353501063\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260311T190000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105020028\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260312T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382779570\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Historically\\, external threats have tended to unite Israelis a\r\n nd impose a measure of national cohesion on its fractured politics. Yet two\r\n  years after the worst external attack in the country's history\\, and in th\r\n e face of multiple external challenges\\, Israel is internally divided as ne\r\n ver before. Indeed\\, the country can now be said to be in the midst of a co\r\n nstitutional crisis centered on competing interpretations of democracy and \r\n Jewish identity. Few scholars are better placed to analyze this crisis than\r\n  Dr. Masua Sagiv\\, a leading analyst of Israeli political culture and const\r\n itutional order. Join Amichai Magen in conversation with Masua Sagiv.\\n\\nDr\r\n . Masua Sagiv is Senior Faculty at the Shalom Hartman Institute and Senior \r\n Fellow at the Helen Diller Institute for Jewish Law and Israel Studies at U\r\n C Berkeley School of Law. Masua’s scholarly work focuses on the development\r\n  of contemporary Judaism in Israel\\, as a culture\\, religion\\, nationality\\\r\n , and as part of Israel’s identity as a Jewish and democratic state. Her re\r\n search explores the role of law\\, state actors\\, and civil society organiza\r\n tions in promoting social change across diverse issues: shared society\\, re\r\n ligion and gender\\, religion and state\\, and Jewish peoplehood. Her recentl\r\n y published book Radical Conservatism (Carmel\\, 2024) examines the use of l\r\n aw in the Halachic Feminist struggle in Israel.\\n\\nVirtual Event Only.\r\nDTEND:20260311T181500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Israel Insights Webinar with Masua Sagiv – Who Stands for Democracy\r\n ? Understanding Israel’s Constitutional Crisis\r\nUID:tag:localist.com\\,2008:EventInstance_51208985442025\r\nURL:https://events.stanford.edu/event/israel-insights-webinar-with-masua-sa\r\n giv-who-stands-for-democracy-understanding-israels-constitutional-crisis\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Part of the Feminism in Theory and Practice Series.\\n\\nSex and \r\n Dissent: Stories of Feminist Resistance in Argentina\\, Chile\\, Mexico\\, and\r\n  Spain offers four electrifying and hopeful accounts of feminist uprising t\r\n hat have swept through Latin America and Spain in the wake of #MeToo—and wh\r\n at we can learn from these protest cultures in a fraught moment for democra\r\n cy in the U.S.\\n\\nAs women’s rights have faced alarming rollbacks in the Un\r\n ited States over the past decade\\, mass feminist movements beyond our borde\r\n rs have achieved historic victories. Award-winning journalist Meaghan Beatl\r\n ey takes us to the frontlines to tell inspiring stories of resistance and p\r\n olitical imagination that will be a vital roadmap in the years to come. A n\r\n ational reckoning over abortion in Argentina\\; a constitutional rewrite con\r\n fronting structural inequality in Chile\\; a high-profile sexual assault cas\r\n e in Spain that sparked wide debate about consent\\; and in Mexico\\, student\r\n  protesters forcing a national spotlight on the epidemic of femicide. \\n\\nT\r\n he product of a decade of immersive reporting\\, Beatley captures the urgenc\r\n y and creativity of these movements and the women who led a motley crew of \r\n former guerrilla fighters\\, student occupiers\\, and mothers standing down n\r\n arco violence. \\n\\nOrganized by Writer in Residence Moira Donegan\\, the Fem\r\n inism in Theory and Practice series welcomes contemporary creators\\, writer\r\n s\\, scholars\\, and activists whose work challenges gender inequality in urg\r\n ent and innovative ways.\\n\\nRSVP for this online event\\n\\nAuthor Bio:\\n\\nMe\r\n aghan Beatley is a French and U.S. journalist covering feminist movements a\r\n cross Latin America and Spain. Her reporting has appeared in Time\\, The Gua\r\n rdian\\, The Atlantic\\, The Nation\\, and Foreign Policy. Formerly an editor \r\n in Chile and Argentina\\, she has reported from seven countries and won the \r\n One World Media Award for Best Feature. She is fluent in French\\, English\\,\r\n  and Spanish\\, and her work bridges languages\\, cultures\\, and continents.\r\nDTEND:20260311T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:\"Sex and Dissent: Stories of Feminist Resistance in Argentina\\, Chi\r\n le\\, Mexico\\, and Spain\" by Meaghan Beatley\r\nUID:tag:localist.com\\,2008:EventInstance_52197218966523\r\nURL:https://events.stanford.edu/event/feminism-in-theory-and-practice-featu\r\n ring-meaghan-beatley-author-sex-and-dissent\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260312T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T190000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561125226\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Learning by Creating: A Human-Centered Vision for AI in Educati\r\n on\\n\\nGenerative AI is entering classrooms at a breathtaking pace\\, often p\r\n resented as a solution for efficiency by automating tasks such as writing\\,\r\n  grading\\, feedback\\, and even classroom management. While convenient\\, the\r\n se uses risk promoting a shallow\\, transmission-oriented model of education\r\n \\, one where teachers become content moderators\\, students become prompt en\r\n gineers\\, and learning collapses into producing answers rather than develop\r\n ing understanding.  In this talk\\, I offer a different vision that I call l\r\n earning by creating. Decades of learning sciences research show that unders\r\n tanding deepens when students actively engage in creative work such as mode\r\n ling systems\\, designing solutions\\, and constructing artifacts that make t\r\n hinking visible and open to reflection. Drawing on my work at the intersect\r\n ion of AI\\, design\\, and education\\, I will show how human-centered AI syst\r\n ems can support learners as thinkers\\, creators\\, and problem-solvers.  By \r\n moving beyond shallow automation toward AI that supports learner agency\\, w\r\n e can build learning experiences that invite deeper engagement and work for\r\n  a broader range of students.\r\nDTEND:20260311T201500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T190000Z\r\nGEO:37.429987;-122.17333\r\nLOCATION:Gates Computer Science Building\\, 119\r\nSEQUENCE:0\r\nSUMMARY:HAI & SDS Seminar with Hari Subramonyam\r\nUID:tag:localist.com\\,2008:EventInstance_51569650149073\r\nURL:https://events.stanford.edu/event/hai-seminar-with-hari-subramonyam\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:ReproducibiliTea is an international community of journal clubs\r\n  dedicated to advancing Open Science and improving academic research cultur\r\n e. \\n\\nReproducibiliTea at Stanford was launched at 26 October 2022 and wel\r\n comes new members. Information on upcoming meetings is presented below\\, an\r\n d you can find us on our slack channel\\, and join our mailing list reproduc\r\n ibilitea@lists.stanford.edu. The meetings are held every second Wednsday of\r\n  the month\\, at 12:00.\\n\\nTo help us prepare for the meetings\\, and order l\r\n unch for everyone (free lunches provided) please register for the next meet\r\n ing using the registration form. \\n\\nThe next meeting is March 11th\\, 12:00\r\n  in LK308 Seminar Classroom (see map plan of the building).\\n\\nWe will be d\r\n iscussing Use as directed? A comparison of software tools intended to check\r\n  rigor and transparency of published work.\r\nDTEND:20260311T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T190000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, LK308\r\nSEQUENCE:0\r\nSUMMARY:ReproducibiliTea - Stanford \r\nUID:tag:localist.com\\,2008:EventInstance_50658127992753\r\nURL:https://events.stanford.edu/event/copy-of-reproducibilitea-stanford-210\r\n 8\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260311T201500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51586828258794\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Bollyky and Dassam\r\n a Labs\\, Arya Khosravi\\, \"Phage-Mediated Iron Acquisition by Pseudomonas ae\r\n ruginosa\"/Isaac Paddy\\, \"Deciphering the molecular and structural framework\r\n  of bacterial HMG-CoA Reductases in isoprenoid biosynthesis\"\r\nDTEND:20260311T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Bollyky and Dassama La\r\n bs\\, Arya Khosravi\\, \"Phage-Mediated Iron Acquisition by Pseudomonas aerugi\r\n nosa\"/Isaac Paddy\\, \"Deciphering the molecular and structural framework of \r\n bacterial HMG-CoA Reductases in isoprenoi\r\nUID:tag:localist.com\\,2008:EventInstance_52091862620505\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-bollyky-and-dassama-labs-arya-khosravi-phage-mediated-iron-acquisition\r\n -by-pseudomonas-aeruginosaisaac-paddy-tbd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260311T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T193000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Piano Students of Elizabeth Schumann\r\nUID:tag:localist.com\\,2008:EventInstance_51463260140523\r\nURL:https://events.stanford.edu/event/noon-schumann-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Carlotta Wright de la Cal will workshop her dissertation chapte\r\n r in progress\\, \"Rails of Rebellion: Infrastructure\\, Law\\, and Indigenous \r\n Mobility in the Sonora-Arizona Borderlands\\, 1880-1930.\"\\n\\nPaper abstract:\r\n  This dissertation chapter in progress examines the use of labor migration \r\n by Indigenous communities at the turn of the twentieth century. During this\r\n  period\\, Wright de la Cal argues\\, Yaqui workers in the Arizona-Sonora bor\r\n derlands strategically leveraged labor in extractive industries to sustain \r\n communities\\, evade state surveillance\\, and support anticolonial resistanc\r\n e in the face of Mexican state genocide and U.S. immigration restriction. F\r\n ocusing on the railroad and mining industries\\, this chapter explores how Y\r\n aqui laborers embedded community into infrastructure designed for disposses\r\n sion. Drawing on Mexican Foreign Affairs archives\\, U.S. Immigration and Na\r\n turalization Service records\\, Southern Pacific corporate files\\, and oral \r\n histories\\, this chapter is part of a larger dissertation on railroad labor\r\n  and migration.\r\nDTEND:20260311T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T200000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, SHC Board Room\r\nSEQUENCE:0\r\nSUMMARY:Carlotta Wright de la Cal | \"Rails of Rebellion: Infrastructure\\, L\r\n aw\\, and Indigenous Mobility in the Sonora-Arizona Borderlands\\, 1880-1930\"\r\nUID:tag:localist.com\\,2008:EventInstance_52198754929391\r\nURL:https://events.stanford.edu/event/carlotta-wright-de-la-cal-rails-of-re\r\n bellion-infrastructure-law-and-indigenous-mobility-in-the-sonora-arizona-bo\r\n rderlands-1880-1930\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Please join us for E-IPER's Winter Joint & Dual MS Capstone Sym\r\n posium\\, where our graduating MS students will present their capstone proje\r\n cts! The event will be held in Y2E2 382 or on Zoom.\\n\\nE-IPER Winter Capsto\r\n ne Symposium\\n\\nWelcome Remarks \\n\\nStudent Presentations\\n\\nNanea AldenJoã\r\n o Pedro AlmeidaNico deLunaIain EdmundsonHamza FarrukhYaqi GroverZac MasliaA\r\n gustin VillarealClosing Remarks \\n\\nReception following Capstone Symposium.\r\nDTEND:20260311T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T200000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 382\r\nSEQUENCE:0\r\nSUMMARY:E-IPER Winter MS Capstone Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_52208095602979\r\nURL:https://events.stanford.edu/event/eiper-winter-capstone-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Do you have questions about requirements and logistics surround\r\n ing your degree? Drop-In and get answers!\\n\\nThis is for current Earth Syst\r\n ems undergrad and coterm students.\r\nDTEND:20260311T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T203000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Drop-In Advising (Undergrad & Coterm majors)\r\nUID:tag:localist.com\\,2008:EventInstance_51932797185065\r\nURL:https://events.stanford.edu/event/earth-systems-drop-in-advising-underg\r\n rad-coterm-majors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Learn how to experience a profound state of awareness through t\r\n he practice of yoga nidra. In this online class\\, you will be introduced to\r\n  this ancient form of mindfulness meditation and experience its profound he\r\n aling effects throughout the mind\\, body\\, and spirit.\\n\\nThis course is a \r\n combination of lecture and guided practice where you will learn how to tap \r\n into your body's own relaxation and restoration response via the parasympat\r\n hetic nervous system. The physiological benefits of activating this part of\r\n  the nervous system include slowing heart rate\\, dampening of the \"fight or\r\n  flight\" hormones\\, deep relaxation\\, and improved sleep. In this state\\, t\r\n he body is able to do what it is wired to do: rejuvenate\\, repair\\, and res\r\n tore at a cellular and energetic level.\\n\\nPlease plan on being in a quiet \r\n and private space during the course where you can lie comfortably on your b\r\n ack or relax in a chair with back support. No experience is necessary.\\n\\nT\r\n his class will not be recorded. Attendance requirement for incentive points\r\n  - at least 80% of the live session.  Request disability accommodations and\r\n  access info.\\n\\nClass details are subject to change.\r\nDTEND:20260312T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T223000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Introduction to Yoga Nidra\r\nUID:tag:localist.com\\,2008:EventInstance_51388531311377\r\nURL:https://events.stanford.edu/event/introduction-to-yoga-nidra-2698\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260312T003000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260311T233000Z\r\nGEO:37.429138;-122.17552\r\nLOCATION:Shriram Center\\, 104\r\nSEQUENCE:0\r\nSUMMARY:CEE 298 Structural Engineering and Mechanics Seminar\r\nUID:tag:localist.com\\,2008:EventInstance_51747594993301\r\nURL:https://events.stanford.edu/event/copy-of-cee-183-structural-engineerin\r\n g-and-mechanics-seminar-1653\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change in Winter Quarter.\\n\\nThis all-\r\n levels yoga class offers a balanced\\, accessible practice designed to suppo\r\n rt both physical ease and mental clarity. Classes typically integrate mindf\r\n ul movement\\, breath awareness\\, and simple contemplative elements to help \r\n release accumulated tension while maintaining stability and strength. Postu\r\n res are approached with options and modifications\\, making the practice app\r\n ropriate for a wide range of bodies and experience levels. Emphasis is plac\r\n ed on sustainable movement\\, nervous system regulation\\, and cultivating pr\r\n actices that translate beyond the mat and into daily life.\\n\\nSara Elizabet\r\n h Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yoga Philosophy from the\r\n  Graduate Theological Union. Her dissertation\\, In Search of Sleep: A Compr\r\n ehensive Study of Yoga Philosophy\\, Therapeutic Practice\\, and Improving Sl\r\n eep in Higher Education\\, examines the integration of contemplative practic\r\n es within university settings. She joined the Stanford community in Spring \r\n 2024\\, where she has taught Sleep for Peak Performance and Meditation throu\r\n gh Stanford Living Education (SLED)\\, and currently teaches Yoga for Stress\r\n  Management in the Department of Athletics\\, Physical Education\\, and Recre\r\n ation (DAPER). Dr. Ivanhoe is the Founding Director Emeritus of YogaUSC and\r\n  previously lectured in USC’s Mind–Body Department\\, where she also served \r\n on faculty wellness boards. A practitioner and educator since 1995\\, she ha\r\n s completed three 500-hour teacher training programs. She has served as the\r\n  Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga for Dummies\\, and Crunc\r\n h: Yoga\\, and was the yoga columnist for Health magazine for three years. H\r\n er work has appeared in nearly every major yoga and wellness publication. I\r\n n 2018\\, she co-created Just Breathe\\, a yoga\\, breathwork\\, and meditation\r\n  initiative in partnership with Oprah Magazine. She is a recipient of USC’s\r\n  Sustainability Across the Curriculumgrant and the Paul Podvin Scholarship \r\n from the Graduate Theological Union. She currently serves as Interim Direct\r\n or of Events and Operations in Stanford’s Office for Religious and Spiritua\r\n l Life\\, where she also teaches weekly contemplative practice classes.\r\nDTEND:20260312T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Room 302)\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932582045253\r\nURL:https://events.stanford.edu/event/yoga-wednesdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Bridget Algee\\, PhD \\n\\nIn Conversation with Dr. Rajeev Kelkar\\\r\n n\\nThe U.S.-Mexico borderlands form a landscape of absence—inhabited only b\r\n y the nameless\\, fragmented remains of missing migrants once in search of r\r\n efuge el Norte. Algee argues that identifying these remains demands integra\r\n ting scientific data—from biology and recovery contexts—with social insight\r\n s into shifting gateways\\, historical migration patterns\\, migration driver\r\n s\\, and the weight of lived and inherited trauma on behaviors. This approac\r\n h recognizes that to study the dead is to first understand the living. Alge\r\n e posits it is critical to treat the deceased as whole\\, complex individual\r\n s\\, weaving together diverse data sources to reveal their lived experiences\r\n  and motivations. This multidisciplinary strategy must incorporate communit\r\n ybased engagement and confounding factors like public perception and politi\r\n cal rhetoric. While probabilities dominate courtroom forensics\\, Algee cont\r\n ends that real-world success is a complex fusion of science and society. Ho\r\n listic work holds the greatest potential to restore identities\\, uphold dig\r\n nity\\, honor the living's wishes\\, and to support petitions for survivor sa\r\n fety in this humanitarian crisis.\\n\\nThis workshop challenges participants \r\n to redefine data\\, exploring the information embedded in how we narrate hum\r\n an experience\\, express trauma\\, and resolve emotions. Each participant wil\r\n l construct their own ofrenda—an altar to remember\\, honor\\, and celebrate \r\n the dead—and write a short contextual description of their work. This act s\r\n erves as data on the individual\\, the dedicant\\, their interpretation of a \r\n larger cultural tradition\\, and the workshop's time and place. Ofrendas wil\r\n l contribute to the \"Memory as Data\" exhibition at CESTA in Spring quarter.\r\n \\n\\nTALK | 5:30 p.m.\\nNETWORKING | 6:30p.m.\\nWORKSHOP | 7 p.m.\\n\\nRegistrat\r\n ion required >> \\nNo virtual attendance due to the sensitive nature of this\r\n  topic\\n\\nAbout the Speaker\\n\\nDr. Bridget Algee is the Senior Associate Di\r\n rector of the CCSRE Research Institute and a computational biologist and an\r\n thropologist whose work advances social justice for underserved\\, immigrant\r\n  and Indigenous\\, communities. Integrating data science with community-base\r\n d research\\, she models complex patterns of human biology and behavior usin\r\n g genetic\\, skeletal\\, linguistic\\, and social-context data. As a forensic \r\n biologist\\, she supports medico-legal investigations to identify missing pe\r\n rsons across the U.S.\\, Latin America\\, Middle East\\, and Southeast Asia.\\n\r\n \\nAbout the Series\\n\\n(Delta)Data is a new CESTA Seminar series that invite\r\n s academics and industry leaders to explore through a shared lens the evolv\r\n ing landscape of data and to advance the academic-private partnerships crit\r\n ical to the future of innovation.\r\nDTEND:20260312T033000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, Fourth Floor\r\nSEQUENCE:0\r\nSUMMARY:En la Frontera  y la intersección: Scientific and Social Data for F\r\n orensic Identification in the Borderlands\r\nUID:tag:localist.com\\,2008:EventInstance_52267686014873\r\nURL:https://events.stanford.edu/event/copy-of-en-la-frontera-y-la-intersecc\r\n ion-scientific-and-social-data-for-forensic-identification-in-the-borderlan\r\n ds\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Students from Music 183C \"Interpretation of Musical Theater Rep\r\n ertoire\" perform a selection of musical theater favorites! \\n\\nAmission Inf\r\n ormation\\n\\nFree admission\r\nDTEND:20260312T020000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T003000Z\r\nGEO:37.424305;-122.170842\r\nLOCATION:Tresidder Union\\, CoHo\r\nSEQUENCE:0\r\nSUMMARY:That’s Entertainment! – MUSIC 183C\r\nUID:tag:localist.com\\,2008:EventInstance_52208195310766\r\nURL:https://events.stanford.edu/event/thats-entertainment-2\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event \\nIn 1803 the Maratha king Serfoji II\\, who rul\r\n ed the south Indian city-kingdom of Tanjore from 1798 to 1832 under English\r\n  East India Company control\\, ordered Bhonslevaṃśacaritra\\, a Marathi-langu\r\n age genealogical history of the Bhonsles\\, the lineage of Shivaji and Marat\r\n has\\, to be inscribed on the walls of the city’s ancient Chola temple to Sh\r\n iva. This was the grandest of Serfoji’s many Marathi inscriptions. The king\r\n  also established south India’s first Devanagari press and printed first ed\r\n itions of Sanskrit and Marathi classics\\, as well as the first complete pro\r\n se translation of Aesop’s Fables in an Indian language (Marathi). This talk\r\n  examines Serfoji’s objectives and strategies in the promotion of Marathi\\,\r\n  a minority language in the Tamil region\\, in heterogeneous forms and genre\r\n s of writing\\, in linkage with Sanskrit as well as English\\, and in the non\r\n -standard Devanagari script. The king’s “writing” initiatives toward shapin\r\n g Marathi into a local and translocal modern\\, public vernacular language f\r\n ormed part of his ambitious project\\, through innovations in multiple India\r\n n and European languages\\, knowledge systems\\, arts and sciences\\, of becom\r\n ing the foremost princely leader of modernity in colonial India. The talk i\r\n lluminates princely agency in the remaking of language\\, scribal practice\\,\r\n  scripts\\, textuality and education before the colonial interventions of th\r\n e nineteenth century.\\n\\nAbout the speaker\\nIndira Viswanathan Peterson is \r\n David B. Truman Professor of Asian Studies Emerita\\, Mount Holyoke College.\r\n  She has been Professor of Sanskrit at Columbia University\\, and Fortieth A\r\n nniversary Professor in the Five College Consortium of Western Massachusett\r\n s. She has a B.A. (honours) in English Literature from Bombay University\\, \r\n and A.M. and Ph.D. degrees in Sanskrit and Indian Studies from Harvard Univ\r\n ersity. Dr. Peterson specializes in Indian literature in Sanskrit and Tamil\r\n \\, Hinduism\\, and South Indian cultural history and performing arts\\, espec\r\n ially Karnatak music and early modern dance drama. Other interests include \r\n translation\\, European-Indian culture contact\\, and comparative literature.\r\n  She has published widely on these subjects. ​Indira Peterson has held a nu\r\n mber of research fellowships\\, including fellowships from the Guggenheim Fo\r\n undation\\, the American Council of Learned Societies\\, the National Endowme\r\n nt for the Humanities\\, The American Institute for Indian Studies\\, the Soc\r\n ial Science ResearchCouncil\\, the Alexander von Humboldt Foundation\\, and t\r\n he Rockefeller Foundation.  Dr.Peterson is completing Tanjore Renaissance: \r\n King Serfoji II and Indian Modernity\\, a biography of the 19th-century roya\r\n l polymath and innovator Serfoji II of Tanjore (forthcoming in HarperCollin\r\n s India’s Indian Lives series\\, edited by Ramachandra Guha).\r\nDTEND:20260312T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T003000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:The Marathi Inscriptions and Imprints of King Serfoji of Tanjore: W\r\n riting Power and Vernacular Modernity in Colonial South India\r\nUID:tag:localist.com\\,2008:EventInstance_52030524049073\r\nURL:https://events.stanford.edu/event/the-marathi-inscriptions-and-imprints\r\n -of-king-serfoji-of-tanjore-writing-power-and-vernacular-modernity-in-colon\r\n ial-south-india\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Hear the remarkable story of Omer Shem Tov\\, who survived 505 d\r\n ays in Hamas captivity after being abducted during the October 7th Terroris\r\n t Attack. His journey of resilience\\, faith\\, and courage has made his voic\r\n e essential in raising awareness and advocating for the safe return of all \r\n hostages and Jewish people around the world. Join us for an inspiring eveni\r\n ng and a rare opportunity for the Stanford community to connect with a powe\r\n rful story of survival\\, strength\\, and hope.\r\nDTEND:20260312T030000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T010000Z\r\nGEO:37.428128;-122.161478\r\nLOCATION:GSB Cemex Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Hostage Survivor Lecture: Omer Shem Tov 505 Days in Hamas Captivity\r\n  \r\nUID:tag:localist.com\\,2008:EventInstance_52091332460653\r\nURL:https://events.stanford.edu/event/hostage-survivor-lecture-omer-shem-to\r\n v-505-days-in-hamas-captivity\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Composer and sound artist Davor Vincze presents an evening of i\r\n mmersive electronic and audiovisual works that blur the boundaries between \r\n concert music\\, video art\\, and interactive technology. The program feature\r\n s Current24\\, an AI-generated visual and musical collaboration with the art\r\n ist collective current.cam\\, originally created for the transdisciplinary w\r\n ork manteia (2024). This is followed by We’re in this together\\, a 4-channe\r\n l electronic piece developed for NIME 2025\\, inviting the audience to parti\r\n cipate via smartphones in shaping the sonic outcome. The concert concludes \r\n with a live set by Vincze in which he will use his voice to create generati\r\n ve soundscapes. The concert offers a playful yet intricate exploration of t\r\n he recent electronic and interdisciplinary works by Vincze.\\n\\nAdmission In\r\n formation\\n\\nFree admission.Livestream\r\nDTEND:20260312T033000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T023000Z\r\nGEO:37.421012;-122.172383\r\nLOCATION:The Knoll\\, CCRMA Stage\r\nSEQUENCE:0\r\nSUMMARY:CCRMA Presents: Davor Vincze\r\nUID:tag:localist.com\\,2008:EventInstance_52276457775847\r\nURL:https://events.stanford.edu/event/ccrma-davor-vincze\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford Early Music Singers\\, under the direction of Eric \r\n Tuan\\, present a program of rarely heard music from the colonial period in \r\n what is now Mexico and Guatemala. The program opens with a processional in \r\n Quechua from Peru\\; continues with a recreation of a \"Salve\" service agains\r\n t the plague as it may have been sung at Guatemala City Cathedral\\; shares \r\n music by Juan de Lienas\\, thought to be a prominent composer of indigenous \r\n descent in colonial Mexico\\; and concludes with three pieces featuring text\r\n  in Nahuatl\\, one of the most prominent indigenous languages in colonial Me\r\n xico.\\n\\nPhoto by Stephen M. Sano\\n\\nAdmission Information\\n\\nFree admissio\r\n nThis event will be livestreamed.\r\nDTEND:20260312T040000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T023000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Early Music Singers – Imperial Polyphonies: Renaissance Music from \r\n Guatemala and Mexico\r\nUID:tag:localist.com\\,2008:EventInstance_51464602089960\r\nURL:https://events.stanford.edu/event/early-music-singers-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The Stanford New Ensemble\\, under the direction of Joo-Mee Lee\\\r\n , presents an evening concert in Campbell Recital Hall.\\n\\nAdmission Inform\r\n ation\\n\\nFree Admission\r\nDTEND:20260312T040000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T023000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford New Ensemble\r\nUID:tag:localist.com\\,2008:EventInstance_51463601195046\r\nURL:https://events.stanford.edu/event/stanford-new-ensemble-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewStanford Otology Update 2026 is designed to advance the\r\n  knowledge and clinical skills of healthcare providers specializing in adul\r\n t and pediatric otologic disorders. This comprehensive program will focus o\r\n n the latest advances in the diagnosis\\, medical management\\, and surgical \r\n treatment of common and complex ear conditions. Participants will gain prac\r\n tical insights into risk reduction strategies\\, effective ordering and inte\r\n rpretation of diagnostic tests\\, and the application of evidence-based prac\r\n tices to improve patient outcomes. The course consists of a blend of didact\r\n ic lectures\\, interactive panel discussions\\, real-word case studies\\, and \r\n hands-on skills sessions led by expert faculty.\\n\\nRegistrationAll three da\r\n ys which includes three hands-on skills session on Saturday\\, March 14\\, 20\r\n 26. \\n\\nNEW THIS YEAR FOR AUDIOLOGISTS\\nThere will be an all day Audiology \r\n program included with your registration - space is limited.\\n\\nPhysicians: \r\n $945.00\\nAudiologists\\, RN\\, PA\\, SLP & Residents: $300.00\\nStanford Audiol\r\n ogists/Staff: $0.00 (Must register with Stanford email address)\\nCalifornia\r\n  Fellows/Residents ONLY - $0.00 (Must email svittori@stanford.edu for disco\r\n unt code)\\n\\nClick HERE to submit your challenging cases panel discussion. \r\n Please submit a brief description of the case\\, remove all PHI and label th\r\n e document(s) beginning with your last name.\\n\\nPlease rank the hands-on se\r\n ssions you'd like to attend during the registration process.  We will do be\r\n st to accommodate your request.  You will be able to attend 3 sessions on S\r\n aturday\\, March 14\\, 2026. \\n\\nHands On Sessions Include:\\nEndoscopic Ear S\r\n urgery/Ossiculoplasty\\nImplantable Devices (limit 10 learners per session)\\\r\n nVestibular Assessment and Physical Therapy\\nOtologic Imaging\\nOffice Manag\r\n ement of Otologic Disorders\\nAudiology: Speech in Noise Update:  The Presen\r\n t & Future\\nAudiology: AI in Audiology Panel\\nAudiology: Lightening Rounds:\r\n   Hearing Aids & Cochlear Implants\\n\\nCreditsAMA PRA Category 1 Credits™ (1\r\n 8.75 hours)\\, AAPA Category 1 CME credits (18.75 hours)\\, ABOHNS MOC Part I\r\n I (18.75 hours)\\, ANCC Contact Hours (18.75 hours)\\, Non-Physician Particip\r\n ation Credit (18.75 hours)\\n\\nTarget AudienceSpecialties - Otolaryngology (\r\n ENT)Professions - Advance Practice Nurse (APN)\\, Fellow/Resident\\, Nurse\\, \r\n Physician\\, Physician Associate\\, Registered Nurse (RN)\\, Speech Language P\r\n athologist\\, Student ObjectivesAt the conclusion of this activity\\, learner\r\n s should be able to:\\n1. Diagnose hearing loss and balance disorders based \r\n on specific patient characteristic and practice setting\\n2. Develop skills \r\n in understanding\\, selecting\\, and performing otologic surgical procedures\\\r\n n3. Apply risk reduction techniques in otologic surgery to reduce clinical \r\n errors\\n4. Develop strategies to optimally establish and perform multi-spec\r\n ialty approach care for complex otologic disorders\\n\\nAccreditationIn suppo\r\n rt of improving patient care\\, Stanford Medicine is jointly accredited by t\r\n he Accreditation Council for Continuing Medical Education (ACCME)\\, the Acc\r\n reditation Council for Pharmacy Education (ACPE)\\, and the American Nurses \r\n Credentialing Center (ANCC)\\, to provide continuing education for the healt\r\n hcare team. \\n\\nCredit Designation \\nAmerican Medical Association (AMA) \\nS\r\n tanford Medicine designates this Live Activity for a maximum of 18.75 AMA P\r\n RA Category 1 CreditsTM.  Physicians should claim only the credit commensur\r\n ate with the extent of their participation in the activity. \\n\\nAmerican Nu\r\n rses Credentialing Center (ANCC) \\nStanford Medicine designates this [inser\r\n t learning format] activity for a maximum of 18\\,75 ANCC contact hours. \\n \r\n \\nAmerican Academy of Physician Associates (AAPA) - Live \\nStanford Medicin\r\n e has been authorized by the American Academy of PAs (AAPA) to award AAPA C\r\n ategory 1 CME credit for activities planned in accordance with AAPA CME Cri\r\n teria. This live activity is designated for 18.75 AAPA Category 1 CME credi\r\n ts. PAs should only claim credit commensurate with the extent of their part\r\n icipation.  \\n\\nAmerican Board of Otolaryngology – Head and Neck Surgery MO\r\n C Credit\\nSuccessful completion of this CME activity\\, which includes parti\r\n cipation in the evaluation component\\, enables the participant to earn thei\r\n r required annual part II self-assessment credit in the American Board of O\r\n tolaryngology – Head and Neck Surgery’s Continuing Certification program (f\r\n ormerly known as MOC). It is the CME activity provider's responsibility to \r\n submit participant completion information to ACCME for the purpose of recog\r\n nizing participation.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260312\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center for Learning and Knowledge (LKSC)\r\nSEQUENCE:0\r\nSUMMARY:  Stanford Otology Update 2026\r\nUID:tag:localist.com\\,2008:EventInstance_50943049759056\r\nURL:https://events.stanford.edu/event/stanford-otology-update-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260312\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294357419\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260312\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355516400\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260312\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510362476\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260312\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539261094\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260312\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353980485\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:In this session\\, we will go over changes\\, reminders\\, and bes\r\n t practices since our last Clinician Educators\\, Clinical Scholar\\, & Instr\r\n uctor roundtable held in March of 2026.  \\n\\nPrior to our 2026 Roundtable\\,\r\n  the OAA CE Team invites you all to submit any questions or other desired a\r\n reas of discussion to Shannon Mooers(smooers@stanford.edu).  The presentati\r\n on materials will be provided to you prior to our session\\, and the associa\r\n ted PowerPoint slides will be posted to OAA’s website shortly after the rou\r\n ndtable concludes.\\n\\nWe look forward to seeing you there!\r\nDTEND:20260312T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:CE/Clinical Scholars/Instructors Best Practices\r\nUID:tag:localist.com\\,2008:EventInstance_52241921120700\r\nURL:https://events.stanford.edu/event/ceclinical-scholarsinstructors-best-p\r\n ractices\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260313T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098401644\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260313T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910829773\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260312T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T160000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353502088\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260313T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382782643\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Using Vision-guided Underwater Vehicles to Study Life in Our Oc\r\n eans\\n\\nThe lives of marine animals play vital roles in influencing policy \r\n decisions ranging from conservation to food security and global health. Yet\r\n \\, many species behaviors’ remain elusive to science as we have little to n\r\n o direct observations of them. I propose the use of vision-guided autonomou\r\n s underwater vehicles (AUVs) as a scalable and opportunistic approach to tr\r\n acking and monitoring marine animals and their behaviors in their natural h\r\n abitats.\\n\\nIn particular\\, I show how to apply generalizable machine learn\r\n ing/data-driven approaches to AUV perception and controls\\, as well as anim\r\n al behavior. These combined enable AUVs to follow any visible marine animal\r\n (s)\\, including those that are rare or elusive\\, across any habitat or envi\r\n ronmental conditions\\, while minimizing invasiveness or observation bias of\r\n  animal behavior caused by the vehicle itself. Finally\\, I will discuss how\r\n  these approaches and future opportunities in robotics and machine learning\r\n  enable us to rapidly scale our in-situ observational capabilities to meet \r\n the spatial\\, temporal\\, and multi-species challenges needed by marine ecol\r\n ogists.\r\nDTEND:20260312T171500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T161500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 292A (CIFE Classroom)\r\nSEQUENCE:0\r\nSUMMARY:Oceans Department Seminar - Levi 'Veevee' Cai\r\nUID:tag:localist.com\\,2008:EventInstance_51825884205921\r\nURL:https://events.stanford.edu/event/oceans-department-faculty-search-semi\r\n nar-levi-veevee-cai\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Co-sponsored with the Black Staff Alliance\\n\\nThe Black Staff A\r\n lliance and the Faculty Staff Help Center extend the theme of wellness thro\r\n ughout the year with the offering of monthly\\, mental wellness drop-in grou\r\n ps that center the experiences of faculty\\, staff\\, retirees\\, and postdocs\r\n . This group aims to create a welcoming and inclusive space for employees o\r\n f Stanford to share their experiences\\, strengths\\, and hope in managing so\r\n me of the unique stressors of being Black. Join us as we discuss historical\r\n  contexts of mental wellness in the community\\, systems of continued suppor\r\n t and resources\\, and how to implement all of this. This group is open\\, an\r\n d we encourage participation from all faculty\\, staff\\, retirees\\, and post\r\n docs.\\n\\nFacilitators\\n\\nJohn Brown: LMFT\\, ICF Certified Coach\\n\\nKelliann\r\n e Webster: PsyD\r\nDTEND:20260312T203000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Black Mental Wellness Group\r\nUID:tag:localist.com\\,2008:EventInstance_51810511986989\r\nURL:https://events.stanford.edu/event/black-mental-wellness-group-5895\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260313T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T190000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561126251\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Russia's shift from informational autocracy toward overt repres\r\n sion has made understanding public sentiment more urgent yet increasingly d\r\n ifficult. One channel remains: appeals systems\\, through which hundreds of \r\n thousands of citizens each year bring grievances directly to the state. Wha\r\n t concerns do citizens raise\\, and how does the regime respond? Drawing on \r\n original data from Russia's presidential appeals system\\, this talk examine\r\n s what appeals reveal about everyday citizen-state relations\\, governance c\r\n hallenges\\, and how autocratic institutions that promise responsiveness act\r\n ually function under pressure. Appeals offer a unique behavioral measure of\r\n  citizen concerns\\, capturing the experiences of those most affected by gov\r\n ernance failures—offering insight into a regime that has become increasingl\r\n y opaque.\\n\\nABOUT THE SPEAKER\\n\\nHannah S. Chapman is the Theodore Romanof\r\n f Assistant Professor of Russian Studies and an Assistant Professor of Inte\r\n rnational and Area Studies. Previously\\, she was a George F. Kennan Fellow \r\n at the Kennan Institute of the Woodrow Wilson International Center for Scho\r\n lars.\\n\\nHer research\\, teaching\\, and service are in the fields of compara\r\n tive political behavior with a substantive focus on public opinion\\, politi\r\n cal participation\\, and political communication in non-democracies and a re\r\n gional focus on Russian and post-Soviet politics. She teaches undergraduate\r\n  and graduate courses in authoritarianism\\, Russian domestic and internatio\r\n nal politics\\, and comparative politics.\\n\\nHer book project\\, Dialogue wit\r\n h the Dictator: Information Manipulation and Authoritarian Legitimation in \r\n Putin's Russia\\, examines the role of quasi-democratic participation mechan\r\n isms in reinforcing authoritarian regimes. Her work has been published in C\r\n omparative Political Studies\\, Comparative Politics\\,  Democratization\\, In\r\n ternational Studies Quarterly\\, and the Washington Post.\\n\\nREDS: RETHINKIN\r\n G EUROPEAN DEVELOPMENT AND SECURITY\\n\\nThe REDS Seminar Series aims to deep\r\n en the research agenda on the new challenges facing Europe\\, especially on \r\n its eastern flank\\, and to build intellectual and institutional bridges acr\r\n oss Stanford University\\, fostering interdisciplinary approaches to current\r\n  global challenges.\\n\\nREDS is organized by The Europe Center and the Cente\r\n r on Democracy\\, Development and the Rule of Law\\, and co-sponsored by the \r\n Hoover Institution and the Center for Russian\\, East European and Eurasian \r\n Studies.\\n\\nLearn more about REDS and view past seminars here.\r\nDTEND:20260312T201500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Hannah Chapman | REDS Seminar - The Information Paradox: Citizen Ap\r\n peals and Authoritarian Governance in Russia\r\nUID:tag:localist.com\\,2008:EventInstance_51808875102982\r\nURL:https://events.stanford.edu/event/hannah-chapman-reds-seminar-the-infor\r\n mation-paradox-citizen-appeals-and-authoritarian-governance-in-russia\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join the speaker for coffee\\, cookies\\, and conversation before\r\n  the talk\\, starting at 11:45am.\\n\\nSeeing through memory systemsAbstract\\n\r\n \\nHow does memory shape our perception of the world around us? While the ne\r\n ural systems supporting high-level visual processing and memory are each re\r\n latively well understood\\, how they interact to give rise to memory-guided \r\n visual experience remains a fundamental question in cognitive neuroscience.\r\n  In this talk\\, I will present a series of studies investigating how memory\r\n  influences perception in the human brain and behavior\\, focusing on the pr\r\n ocess of naturalistic scene understanding. First\\, I will discuss recent be\r\n havioral work combining immersive virtual reality\\, in-headset eye-tracking\r\n \\, and computational modeling to reveal how memory shapes scene perception \r\n during active viewing in behavior and the brain (Mynick et al.\\, 2024 Curre\r\n nt Biology). Next\\, I will discuss recent fMRI work revealing a new computa\r\n tional interface for perceptual-mnemonic interactions at the anterior edge \r\n of high-level visual cortex (Steel et al.\\, 2021\\, Nature Communications)\\,\r\n  as well as a retinotopically-grounded neural code that mediates perceptual\r\n -mnemonic interactions between the hippocampus and cortex (Steel\\, Silson\\,\r\n  et al.\\, Nature Neuroscience). Together\\, these studies challenge prevaili\r\n ng theories of memory’s role in high-level visual processing and offer new \r\n insights into the neural and cognitive mechanisms underpinning memory-guide\r\n d perception in real-world contexts.\\n\\n \\n\\nCaroline Robertson\\, PhDAssoci\r\n ate Professor of Psychological and Brain Sciences\\, Dartmouth College (she/\r\n her)\\n\\nCaroline is an Associate Professor in the Department of Psychologic\r\n al and Brain Sciences at Dartmouth. Her research group uses cognitive and c\r\n omputational neuroscience approaches to investigate the neural mechanisms u\r\n nderlying memory\\, perception\\, and neurodiversity. She earned her PhD from\r\n  the University of Cambridge as a Gates-Cambridge Scholar and NIH-Cambridge\r\n  Fellow and continued her postdoctoral work at the McGovern Institute for B\r\n rain Research at MIT with a fellowship from the Harvard Society of Fellows.\r\n  Caroline's contributions to cognitive neuroscience have been recognized by\r\n  awards including the Society for Neuroscience’s Janett Trubatch Young Inve\r\n stigator Award\\, the NARSAD Young Investigator Award (2015)\\, and the NSF C\r\n AREER Award (2022).​\\n\\nVisit lab website\\n\\nHosted by Emily Chen (Scaffold\r\n ing of Cognition Team)\\n\\n \\n\\nSign up for Speaker Meet-upsEngagement with \r\n our seminar speakers extends beyond the lecture. On seminar days\\, invited \r\n speakers meet one-on-one with faculty members\\, have lunch with a small gro\r\n up of trainees\\, and enjoy dinner with a small group of faculty and the spe\r\n aker's host.\\n\\nIf you’re a Stanford faculty member or trainee interested i\r\n n participating in these Speaker Meet-up opportunities\\, click the button b\r\n elow to express your interest. Depending on availability\\, you may be invit\r\n ed to join the speaker for one of these enriching experiences.\\n\\nSpeaker M\r\n eet-ups Interest Form\\n\\n \\n\\nAbout the Wu Tsai Neurosciences Seminar Serie\r\n sThe Wu Tsai Neurosciences Institute seminar series brings together the Sta\r\n nford neuroscience community to discuss cutting-edge\\, cross-disciplinary b\r\n rain research\\, from biochemistry to behavior and beyond.\\n\\nTopics include\r\n  new discoveries in fundamental neurobiology\\; advances in human and transl\r\n ational neuroscience\\; insights from computational and theoretical neurosci\r\n ence\\; and the development of novel research technologies and neuro-enginee\r\n ring breakthroughs.\\n\\nUnless otherwise noted\\, seminars are held Thursdays\r\n  at 12:00 noon PT.\\n\\nSign up to learn about all our upcoming events\r\nDTEND:20260312T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: Caroline Robertson - Seeing through memory s\r\n ystems\r\nUID:tag:localist.com\\,2008:EventInstance_50539424225310\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-caroline-robert\r\n son-talk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260312T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T190000Z\r\nGEO:37.431942;-122.176463\r\nLOCATION:Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:SCI Cancer Biology and Cancer Stem Cell Talks/ReMS  - Calvin Kuo\\, \r\n MD PhD \"Talk Title TBA\"\r\nUID:tag:localist.com\\,2008:EventInstance_51518245346848\r\nURL:https://events.stanford.edu/event/sci-cancer-biology-and-cancer-stem-ce\r\n ll-talksrems-calvin-kuo-md-phd-talk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260312T191500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762177838\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260312T194500Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794469142\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Stanford Students from the Harpsichord studio of JungHae Kim co\r\n me together to perform an afternoon recital in Campbell Recital Hall featur\r\n ing a variety of Baroque music selections.\\n\\nAdmission Information\\n\\nFree\r\n  admission\r\nDTEND:20260312T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T200000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Early Chamber Music – Harpsichord Students of JungHae Kim\r\nUID:tag:localist.com\\,2008:EventInstance_51931867794275\r\nURL:https://events.stanford.edu/event/baroque-solo-ensemble-recital\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260312T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491612566\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:\"Climate Change\\, Deforestation\\, and the Expansion of the Glob\r\n al Agricultural Frontier\"\\n\\nThis paper studies how global warming affects \r\n deforestation and agricultural land use. Using global\\, high-resolution dat\r\n a on temperature\\, deforestation\\, and land cover from 2001 to 2019\\, we fi\r\n nd that extreme heat causes large and persistent forest loss on the world’s\r\n  agricultural frontier. This effect is strongest in the tropics\\, in areas \r\n with the most temperature-sensitive crops\\, and in regions with the most in\r\n elastic demand for agricultural products\\, and we find no evidence that it \r\n is offset by global spillovers. Deforestation in response to extreme heat c\r\n an be explained almost entirely by cropland expansion. We corroborate these\r\n  findings using agricultural census data from Brazil\\, where extreme heat l\r\n eads to productivity declines\\, cropland expansion\\, and limited additional\r\n  input adjustment or land reallocation. Our estimates imply that extreme he\r\n at has already driven substantial forest loss and that projected warming th\r\n rough 2100 could lead to an additional 28 million hectares of deforestation\r\n . These findings challenge the view that economic reallocation will necessa\r\n rily soften the economic and environmental consequences of climate change\\,\r\n  suggesting instead that farmers double down and expand cropland locally in\r\n  response to lower productivity.\\n\\nBiography \\n\\nJacob Moscona joined MIT'\r\n s Economics Department as an Assistant Professor in July 2024. He received \r\n his PhD from MIT in 2021 and was a Prize Fellow in Economics\\, History\\, an\r\n d Politics at Harvard from 2021-2024. Jacob’s research explores broad quest\r\n ions in economic development\\, with a focus on the role of innovation\\, the\r\n  environment\\, and political economy. The first stream of his research inve\r\n stigates the forces that drive the rate and direction of technological prog\r\n ress\\, as well as how new technologies shape global productivity difference\r\n s and adaptation to major threats like climate change. The second stream of\r\n  his research studies the political economy of economic development\\, with \r\n a focus on how variation in social organization and institutions affects pa\r\n tterns of conflict and cooperation.\r\nDTEND:20260312T213000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 362\r\nSEQUENCE:0\r\nSUMMARY:Global Environmental Policy Seminar with Jacob Moscona\r\nUID:tag:localist.com\\,2008:EventInstance_50710433211929\r\nURL:https://events.stanford.edu/event/global-environmental-policy-seminar-w\r\n ith-jacob-moscona\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:PhD Defense\r\nDESCRIPTION:Abstract: \\n\\nOffshore wind turbines (OWTs) can access abundant\r\n  offshore wind resources. These devices are trending toward larger sizes\\, \r\n with the next-generation of turbines expected to be 15~20 MW\\, becoming the\r\n  largest rotating machines ever constructed. Due to their massive size\\, mo\r\n del-scale experiments in laboratories are essential for observing and measu\r\n ring dynamic response under the expected wind and wave conditions. However\\\r\n , model-scale experiments are also subject to scaling laws to maintain dyna\r\n mic similitude between the model- and prototype-scale forces. Each dynamic \r\n force must follow a distinct similitude law based on geometric scale. Since\r\n  OWTs are subject to multiple dynamic forces from wind\\, waves\\, and struct\r\n ure\\, similitude distortions then arise when scaling with respect to a sing\r\n le similitude law. Real-time hybrid simulation (RTHS) is a numerical-physic\r\n al approach that partitions a prototype model into numerical and physical m\r\n odels that interact via actuators and sensors in real time. Since RTHS can \r\n partition the system dynamics\\, different similitude laws can be applied in\r\n  the physical and numerical models\\, thereby mitigating similitude distorti\r\n ons. For example\\, a single dynamic force can be scaled in the laboratory a\r\n t model scale\\, which is then coupled with a full-scale numerical model rep\r\n resenting the remaining dynamic forces. The project goal is to mitigate sim\r\n ilitude distortions in model-scale experiments of OWTs subjected to wind an\r\n d wave loading. The overarching objective is to assess whether RTHS can mit\r\n igate similitude distortions across hydrodynamics\\, aerodynamics\\, and stru\r\n ctural dynamics in OWT applications when an OWT is partitioned into model-s\r\n cale physical hydrodynamics and the other full-scale numerical dynamics\\, r\r\n eferred to as hydro-RTHS. Results show that hydro-RTHS can account for moti\r\n ons and forces induced by nonlinear waves in the global response of OWTs. H\r\n ydro-RTHS can provide unique experimental datasets for structures subjected\r\n  to multiple dynamic forces\\, accounting for physical wave-structure intera\r\n ction effects while maintaining similitude at the model scale.\r\nDTEND:20260312T220000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T210000Z\r\nGEO:37.426823;-122.174006\r\nLOCATION:Green Earth Sciences Building\\, Green 365\r\nSEQUENCE:0\r\nSUMMARY:PhD Defense -Akiri Seki\\, \"Hydrodynamic-real-time hybrid simulation\r\n  to mitigate similitude distortions in model-scale experiments of offshore \r\n wind turbines\"\r\nUID:tag:localist.com\\,2008:EventInstance_52243847020706\r\nURL:https://events.stanford.edu/event/phd-defense-akiri-seki-hydrodynamic-r\r\n eal-time-hybrid-simulation-to-mitigate-similitude-distortions-in-model-scal\r\n e-experiments-of-offshore-wind-turbines\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Offered by Counseling and Psychological Services (CAPS) and the\r\n  Graduate Life Office (GLO)\\, this is a six-session (virtual) group where y\r\n ou can vent\\, meet other graduate students like you\\, share goals and persp\r\n ectives on navigating common themes (isolation\\, motivation\\, relationships\r\n )\\, and learn some helpful coping skills to manage the stress of dissertati\r\n on writing.\\n\\nIf you’re enrolled this fall quarter\\, located inside the st\r\n ate of California\\, and in the process of writing (whether you are just sta\r\n rting\\, or approaching completion) please consider signing up.\\n\\nIdeal for\r\n  students who have already begun the dissertation writing process. All enro\r\n lled students are eligible to participate in CAPS groups and workshops. A g\r\n roup facilitator may contact you for a pre-group meeting prior to participa\r\n tion in Dissertation Support space.\\n\\nFacilitated by Cierra Whatley\\, PhD \r\n & Angela Estrella on Thursdays at 3pm-4pm\\; 2/5\\; 2/12\\; 2/19\\; 2/26\\; 3/5\\\r\n ; 3/12\\, virtualJoin at any point in the Quarter. Sign up on the Graduate L\r\n ife Office roster through this link.\r\nDTEND:20260312T230000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Dissertation Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51782991494080\r\nURL:https://events.stanford.edu/event/copy-of-dissertation-support-group\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Come by and watch ME310 student teams' presentations on their f\r\n unctional prototypes and their process in developing their projects\\, in co\r\n llaboration with their global teammates from international universities.\r\nDTEND:20260313T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T220000Z\r\nGEO:37.426525;-122.172025\r\nLOCATION:Building 550\\, Peterson Laboratory\\, Atrium\r\nSEQUENCE:0\r\nSUMMARY:ME310 Winter Design Review Presentations\r\nUID:tag:localist.com\\,2008:EventInstance_52207887662897\r\nURL:https://events.stanford.edu/event/me310-winter-design-review-presentati\r\n ons-774\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Looking to take a break before finals week? Or want to work on \r\n your embroidery skills? Terman Engineering Library (happily) presents a ses\r\n sion covering the basics of embroidery featuring guest instructors from the\r\n  Textile Makerspace. Participants should expect a relaxed environment with \r\n snacks and will leave with a finished embroidery design!\r\nDTEND:20260312T233000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T220000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 305\r\nSEQUENCE:0\r\nSUMMARY:Terman Library Presents: Textile Destress\r\nUID:tag:localist.com\\,2008:EventInstance_52216920151492\r\nURL:https://events.stanford.edu/event/terman-library-presents-textile-destr\r\n ess\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a free tour of Denning House and explore its treehouse-ins\r\n pired architecture and art collection.\\n\\nBuilt in 2018 specifically to hou\r\n se Knight-Hennessy Scholars\\, Denning House provides an inspiring venue for\r\n  scholars\\, staff\\, and visitors\\, and a magnificent setting for art. A gif\r\n t from Roberta Bowman Denning\\, '75\\, MBA '78\\, and Steve Denning\\, MBA '78\r\n \\, made the building possible. Read more about Denning House in Stanford Ne\r\n ws.\\n\\nTour size is limited. Registration is required to attend a tour of D\r\n enning House.\\n\\nNote: Most parking at Stanford is free of charge after 4 p\r\n m. Denning House is in box J6 on the Stanford Parking Map. Please see Stanf\r\n ord Parking for more information on visitor parking at Stanford. Tours last\r\n  approximately 30 minutes.\r\nDTEND:20260312T233000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:FULL—Tour Denning House\\, home to Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51579214024189\r\nURL:https://events.stanford.edu/event/copy-of-tour-denning-house-home-to-kn\r\n ight-hennessy-scholars-8353\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Spotlight on GSE Makery\\nThurs. March 12\\, 4-5:30PM\\nAngela Nom\r\n ellini and Ken Olivier (ANKO) Building\\, room 007\\n\\n \\n\\nThis event series\r\n  is for grad students who want to discover campus makerspaces\\, connect wit\r\n h community\\, and learn about the new grad certificate in Making and Creati\r\n ve Praxis.\\n\\nRefreshments provided\\; RSVPs requested but not required\\n\\nR\r\n SVP here\\n\\n \\n\\nMaking and creative expression complement analysis and cri\r\n tique as foundations of scholarly inquiry. With the launch of a graduate ce\r\n rtificate program in Making and Creative Praxis\\, the Program in Modern Tho\r\n ught and Literature and the Stanford Arts Institute aim to foster a communi\r\n ty of teachers and learners committed to integrating abstract and embodied \r\n forms of knowledge\\, expertise\\, and artistry. The certificate will provide\r\n  a framework for students to pursue making and creative practice courses th\r\n at contextualize and guide scholarly research on cultural artifacts. Partic\r\n ipants will also join periodic gatherings to share their work and engage in\r\n  dialogues across disciplines and media.\\n\\n \\n\\nMixer Spotlight\\n\\nThe Gra\r\n duate School of Education (GSE) Makery is Stanford’s hands-on learning spac\r\n e for creative exploration\\, experimentation\\, and collaboration. We provid\r\n e tools\\, training\\, and support for students\\, staff\\, and faculty across \r\n campus to turn ideas into tangible work — and to use making as a way of thi\r\n nking\\, learning\\, and solving real-world problems.\\n\\n \\n\\n******\\n\\nLearn\r\n  more about the MCP grad certificate and other upcoming events on our websi\r\n te:\\n\\narts.stanford.edu/mcp\r\nDTEND:20260313T003000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260312T230000Z\r\nGEO:37.426354;-122.168353\r\nLOCATION:GSE Makery (ANKO Building)\\, 007\r\nSEQUENCE:0\r\nSUMMARY:MIXERS FOR GRAD MAKERS\r\nUID:tag:localist.com\\,2008:EventInstance_51932945649928\r\nURL:https://events.stanford.edu/event/mixers-for-grad-makers-9449\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please note that this event is in-person only\\, and RSVPs are r\r\n equested to attend. Walk-ins are welcome.\\nRegister now!\\n\\nThe 2025-26 Tan\r\n ner Lectures feature economist Nicholas Stern discussing the economics of a\r\n n ethically sound world.\\n\\nThe twin crises of climate change and biodivers\r\n ity loss require a rapid restructuring of how we produce\\, consume\\, and ca\r\n re for the environment. This lecture will explore how a new economics can g\r\n uide these changes to our systems\\, structures\\, and technologies that are \r\n necessary to lead us toward a more sustainable\\, resilient\\, and equitable \r\n future. We need an ethically sound public economics where structures are dy\r\n namic\\, where market failures are taken seriously\\, where change is driven \r\n by private-sector investment\\, and where time matters.\\n\\n2-day Event Sched\r\n ule\\nLecture by Nicholas Stern with Heather Boushey\\nThursday\\, March 12\\, \r\n 5–7pm | Denning House\\, Rm 210\\nDiscussion Seminar with Nicholas Stern\\, Si\r\n mon Caney\\, and Gretchen Daily\\nFriday\\, March 13\\, 10am–12pm | Denning Hou\r\n se\\, Rm 201\\n\\nThis event is hosted by the McCoy Family Center for Ethics i\r\n n Society and the Office of the President.\\n\\nSpeaker:\\n\\nNicholas Stern is\r\n  IG Patel Professor of Economics and Government\\, Chair of the Grantham Res\r\n earch Institute on Climate Change and the Environment\\, Chair of the Global\r\n  School of Sustainability at the London School of Economics. He has held po\r\n sts at other UK and overseas universities\\, and as Chief Economist at both \r\n the EBRD and the World Bank. He was Head\\, UK Government Economic Service 2\r\n 003-2007\\, and produced the Stern Review on the economics of climate change\r\n . He was President of the Royal Economic Society (2018-2019).  He was Presi\r\n dent of the British Academy (July 2013-2017) and was elected Fellow of the \r\n Royal Society (June 2014). He was knighted for services to economics (2004)\r\n \\, made a life peer (2007)\\, and appointed Companion of Honour for services\r\n  to economics\\, international relations and tackling climate change in 2017\r\n . He has published more than 25 books and 200 articles\\, most recent being \r\n his open access book\\, The Growth Story of the 21st Century (2025).\\n\\nDisc\r\n ussant:\\n\\nHeather Boushey is one of the nation’s most influential voices o\r\n n economic policy and focuses on the intersection between economic inequali\r\n ty\\, growth\\, and public policy. She served in the Biden administration as \r\n a member of the Council of Economic Advisers and chief economist to the Pre\r\n sident’s Invest in Cabinet. She is a Professor of Practice at the Kleinman \r\n Center for Energy Policy at the University of Pennsylvania’s Stuart Weitzma\r\n n School of Design and a nonresident fellow at the Reimagining the Economy \r\n Project at the Harvard Kennedy School. Boushey co-founded and served as the\r\n  President & CEO of the Washington Center for Equitable Growth. Her book\\, \r\n Unbound: How Economic Inequality Constricts Our Economy and What We Can Do \r\n About It\\, which was called “outstanding” and “piercing” by reviewers\\, was\r\n  on the Financial Times list of best economics books of 2019.\\n\\nThis event\r\n  will have a videographer and photographer present to document the event. N\r\n o personal recordings (audio or visual) are allowed. By attending\\, you con\r\n sent for your image to be used for Stanford-related promotions and material\r\n s. If you have any questions\\, please contact ethics-center@stanford.edu.\\n\r\n \\nIf you require disability-related accommodation\\, please contact disabili\r\n ty.access@stanford.edu as soon as possible or at least 7 business days in a\r\n dvance of the event.\\n\\nSee this link for information about Visitor parking\r\n . \\n\\nLearn more about the McCoy Family Center for Ethics in Society.\r\nDTEND:20260313T020000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T000000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\\, Room 210\r\nSEQUENCE:0\r\nSUMMARY:Economics and Ethics for Sustainable Development in a Changing Worl\r\n d (Lecture)\r\nUID:tag:localist.com\\,2008:EventInstance_51836983110560\r\nURL:https://events.stanford.edu/event/economics-and-ethics-for-sustainable-\r\n development-in-a-changing-world-lecture\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Technology\\, Culture and Power Speaker Series is a monthly \r\n gathering that explores critical insights on the intersections of technolog\r\n y and society. Our monthly gatherings feature leading experts and scholars \r\n examining the interactions of digital technologies\\, culture\\, and inequali\r\n ty. Join the TCP mailing list here. \\n\\nPlease join us on March 12\\, 2026 f\r\n or a lecture and Q&A with John Durham Peters\\, the Maria Rosa Menocal Profe\r\n ssor of English and of Film and Media Studies at Yale University. He is the\r\n  author of Speaking into the Air: A History of the Idea of Communication (1\r\n 999)\\, Courting the Abyss: Free Speech and the Liberal Tradition (2005)\\, T\r\n he Marvelous Clouds: Toward a Philosophy of Elemental Media (2015)\\, and mo\r\n st recently\\, Promiscuous Knowledge: Information\\, Image\\, and Other Truth \r\n Games in History (2020)\\, with the late Kenneth Cmiel (all published by the\r\n  University of Chicago Press). \\n\\nTCP Lecture: On the Mortality of Minds\\n\r\n \\nAs far as we know the most complex thing the universe has brought forth\\,\r\n  besides itself\\, is the human mind.  Among many other things\\, minds know \r\n things.  But what should we make of the fundamental fact that knowledge is \r\n housed in such fragile\\, forgetful\\, and short-lived vessels as human being\r\n s?  Why do minds die--or do they?  Since the origin of writing\\, and likely\r\n  long before that\\, humans found ways to externalize mind.  In complex soci\r\n eties\\, the library is the key symbol of mind embedded in matter.  At least\r\n  since Socrates in Plato’s Phaedrus\\, thinkers have been anxious about this\r\n  externalization.  Was he right to criticize writing?  How should we critic\r\n ize other mind-storage technologies? And how might we think about the would\r\n -be total library of the internet\\, and of its oft-remarked administration \r\n by tech Caesars with the ambition often to by-pass death altogether?  This \r\n talk tries to address very basic matters in light of recent reformulations \r\n of mind.\r\nDTEND:20260313T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T000000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, 101A\r\nSEQUENCE:0\r\nSUMMARY:John Durham Peters: On the Mortality of Minds\r\nUID:tag:localist.com\\,2008:EventInstance_51667624630465\r\nURL:https://events.stanford.edu/event/technology-culture-and-power-speaker-\r\n series-john-durham-peters\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Department of African and African American Studies (DA\r\n AAS) for an enlightening talk by Mellon Fellow and Lecturer\\, Dr. Timothy P\r\n antoja\\, titled \"The Hum of Reflection: Studying Absorption in Henry Ossawa\r\n  Tanner’s The Banjo Lesson & Paul Laurence Dunbar’s The Voice of the Banjo.\r\n \"\\n\\nAbstract.\\n\\nThe Banjo Lesson (1893) by Henry Tanner portrays an elder\r\n  and child absorbed during musical instruction. While celebrated and reprod\r\n uced as a positive representation of intergenerational bonding and quiet th\r\n inking\\, this talk highlights the ways the painting instructs and invites a\r\n  beholder’s absorption. Tanner frames a scene of banjo playing as visually \r\n analogous to book reading. In so doing\\, Tanner improvises upon a genre of \r\n painted readers that art theorists engage to idolize the book as the pinnac\r\n le object to generate absorption. By showing how Tanner recasts the banjo a\r\n s a book\\, I show the ways this painting elevates the banjo as not just an \r\n instrument of performance but reflection. The talk also considers the ways \r\n Dunbar’s “The Voice of the Banjo” (1898) also recasts the banjo as a book t\r\n o reenvision how Black absorption looks and sounds. Near the end of a centu\r\n ry marked by anti-literacy laws\\, Tanner and Dunbar use their respective me\r\n diums to illuminate the banjo with an aura of literacy. I explore the polit\r\n ical dimensions of these scenes of absorption by thinking about their reson\r\n ance with W.E.B. Du Bois’s emerging concept of double consciousness\\, which\r\n  was first published in his 1903 work\\, The Souls of Black Folk.\\n\\nAbout t\r\n he Speaker.\\n\\nDr. Timothy Pantoja is a Mellon Fellow and Lecturer at the D\r\n epartment of African and African American Studies. Dr. Pantoja is a ministe\r\n r and scholar of literature whose research is invested in exploring the way\r\n s Black art and literature render the social\\, relational\\, and emotional c\r\n onditions upon which theories and performances of art rely. He previously w\r\n as the Medical Humanities Postdoctoral Fellow in the English Department at \r\n New York University where he taught courses exploring the ways art\\, litera\r\n ture\\, and humanistic inquiry offer resources to engage the hidden aspects \r\n of health\\, illness\\, and recovery. He received his Master of Divinity at H\r\n arvard Divinity School\\, where he studied the lingering theological underto\r\n w within literature\\, poetry\\, and theory. \\n\\nDon’t miss this opportunity \r\n to engage with important themes around art\\, music\\, and identity in the co\r\n ntext of Black history and culture!\\n\\nWe look forward to seeing you there!\r\nDTEND:20260313T020000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T000000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 80\r\nSEQUENCE:0\r\nSUMMARY:THE HUM OF REFLECTION: Studying Absorption in Henry Ossawa Tanner’s\r\n  The Banjo Lesson & Paul Laurence Dunbar’s The Voice of the Banjo\r\nUID:tag:localist.com\\,2008:EventInstance_52155117139627\r\nURL:https://events.stanford.edu/event/a-daaas-talk-the-hum-of-reflection-st\r\n udying-absorption-in-henry-ossawa-tanners-the-banjo-lesson-paul-laurence-du\r\n nbars-the-voice-of-the-banjo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:You are invited to the NACC for dinner and an intimate discussi\r\n on with filmmaker and author\\, Julian Brave NoiseCat. Explore his creative \r\n process\\, discuss his new works\\, and learn how he utilizes film and writin\r\n g to amplify Native voices and experiences.\\n\\nPart of a multi-part event f\r\n eaturing his Sundance‑winning documentary\\, Sugarcane\\, and his new book\\, \r\n We Survived the Night: An Indigenous Reckoning.\\n\\nDinner and Conversation \r\n with Julian\\n\\n5:30 PM – 6:30 PM | Native American Cultural Center (NACC)\\n\r\n \\n(Registration Required)\\n\\nFor more information about these events\\, plea\r\n se contact NAS program support Oswaldo Rosales at orosal@stanford.edu.\r\nDTEND:20260313T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T003000Z\r\nGEO:37.424927;-122.170123\r\nLOCATION:Native American Cultural Center\\, Clubhouse\r\nSEQUENCE:0\r\nSUMMARY:Dinner and conversation with filmmaker and author\\, Julian Brave No\r\n iseCat\r\nUID:tag:localist.com\\,2008:EventInstance_52279770104693\r\nURL:https://events.stanford.edu/event/dinner-and-conversation-with-filmmake\r\n r-and-author-julian-brave-noisecat\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Please note the location change in Winter Quarter.\\n\\nEvening G\r\n uided Meditation is designed to offer basic meditation skills\\, to encourag\r\n e regular meditation practice\\, to help deepen self-reflection\\, and to off\r\n er instructions on how meditation can be useful during stressful and uncert\r\n ain times.  All sessions are led by Andy Acker.\\n\\nOpen to Stanford Affilia\r\n tes. Free\\, no pre-registration is required.\r\nDTEND:20260313T013000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Common Room (Room 302)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51932607153921\r\nURL:https://events.stanford.edu/event/meditation-thursdays-common-room\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Creative Writing Program is pleased to announce this year’s\r\n  Levinthal Reading featuring:\\n\\nVictor Albañez\\, Eshaal Bashir\\, Sebastián\r\n  Cantú\\, Charlotte Cao\\, Kaylee Chan\\, Jono Wang Chu\\, Ameera Eshtewi\\, Nik\r\n a Farokhzad\\, Dakota Gelman\\, Hanmin Lee\\, Skye Lyles\\, Bryant Daniel Mende\r\n z Melchor\\, Lara Rudar\\, Eva Shen\\, Cara Steele\\, Ani Maria Strecker\\, Kush\r\n al Thaman\\, Chris Vinasco\\, Jenna Yang\\, Alaina Zhang\\, and Bella Zhou\\n\\nT\r\n his event is open to Stanford affiliates and the general public. Registrati\r\n on is encouraged but not required. Register here\\n\\n____\\n\\nIn the winter\\,\r\n  undergraduate students complete Levinthal Tutorials\\, and to cap off this \r\n opportunity\\, we've invited them to participate in a public reading of thei\r\n r work. Join us as the Levinthal Tutorial students read their fiction\\, poe\r\n try\\, and creative nonfiction.\\n\\nThe Levinthal Tutorials allow motivated u\r\n ndergraduate writers to work one-on-one with visiting Stegner Fellows in po\r\n etry\\, fiction\\, or creative nonfiction. Students design their own curricul\r\n um and Stegner Fellows act as writing mentors and advisors. Learn more abou\r\n t the Levinthal Tutorials here.\r\nDTEND:20260313T020000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T010000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, Mackenzie Room\r\nSEQUENCE:0\r\nSUMMARY:Levinthal Reading\r\nUID:tag:localist.com\\,2008:EventInstance_50721500761914\r\nURL:https://events.stanford.edu/event/levinthal-reading-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewStanford Otology Update 2026 is designed to advance the\r\n  knowledge and clinical skills of healthcare providers specializing in adul\r\n t and pediatric otologic disorders. This comprehensive program will focus o\r\n n the latest advances in the diagnosis\\, medical management\\, and surgical \r\n treatment of common and complex ear conditions. Participants will gain prac\r\n tical insights into risk reduction strategies\\, effective ordering and inte\r\n rpretation of diagnostic tests\\, and the application of evidence-based prac\r\n tices to improve patient outcomes. The course consists of a blend of didact\r\n ic lectures\\, interactive panel discussions\\, real-word case studies\\, and \r\n hands-on skills sessions led by expert faculty.\\n\\nRegistrationAll three da\r\n ys which includes three hands-on skills session on Saturday\\, March 14\\, 20\r\n 26. \\n\\nNEW THIS YEAR FOR AUDIOLOGISTS\\nThere will be an all day Audiology \r\n program included with your registration - space is limited.\\n\\nPhysicians: \r\n $945.00\\nAudiologists\\, RN\\, PA\\, SLP & Residents: $300.00\\nStanford Audiol\r\n ogists/Staff: $0.00 (Must register with Stanford email address)\\nCalifornia\r\n  Fellows/Residents ONLY - $0.00 (Must email svittori@stanford.edu for disco\r\n unt code)\\n\\nClick HERE to submit your challenging cases panel discussion. \r\n Please submit a brief description of the case\\, remove all PHI and label th\r\n e document(s) beginning with your last name.\\n\\nPlease rank the hands-on se\r\n ssions you'd like to attend during the registration process.  We will do be\r\n st to accommodate your request.  You will be able to attend 3 sessions on S\r\n aturday\\, March 14\\, 2026. \\n\\nHands On Sessions Include:\\nEndoscopic Ear S\r\n urgery/Ossiculoplasty\\nImplantable Devices (limit 10 learners per session)\\\r\n nVestibular Assessment and Physical Therapy\\nOtologic Imaging\\nOffice Manag\r\n ement of Otologic Disorders\\nAudiology: Speech in Noise Update:  The Presen\r\n t & Future\\nAudiology: AI in Audiology Panel\\nAudiology: Lightening Rounds:\r\n   Hearing Aids & Cochlear Implants\\n\\nCreditsAMA PRA Category 1 Credits™ (1\r\n 8.75 hours)\\, AAPA Category 1 CME credits (18.75 hours)\\, ABOHNS MOC Part I\r\n I (18.75 hours)\\, ANCC Contact Hours (18.75 hours)\\, Non-Physician Particip\r\n ation Credit (18.75 hours)\\n\\nTarget AudienceSpecialties - Otolaryngology (\r\n ENT)Professions - Advance Practice Nurse (APN)\\, Fellow/Resident\\, Nurse\\, \r\n Physician\\, Physician Associate\\, Registered Nurse (RN)\\, Speech Language P\r\n athologist\\, Student ObjectivesAt the conclusion of this activity\\, learner\r\n s should be able to:\\n1. Diagnose hearing loss and balance disorders based \r\n on specific patient characteristic and practice setting\\n2. Develop skills \r\n in understanding\\, selecting\\, and performing otologic surgical procedures\\\r\n n3. Apply risk reduction techniques in otologic surgery to reduce clinical \r\n errors\\n4. Develop strategies to optimally establish and perform multi-spec\r\n ialty approach care for complex otologic disorders\\n\\nAccreditationIn suppo\r\n rt of improving patient care\\, Stanford Medicine is jointly accredited by t\r\n he Accreditation Council for Continuing Medical Education (ACCME)\\, the Acc\r\n reditation Council for Pharmacy Education (ACPE)\\, and the American Nurses \r\n Credentialing Center (ANCC)\\, to provide continuing education for the healt\r\n hcare team. \\n\\nCredit Designation \\nAmerican Medical Association (AMA) \\nS\r\n tanford Medicine designates this Live Activity for a maximum of 18.75 AMA P\r\n RA Category 1 CreditsTM.  Physicians should claim only the credit commensur\r\n ate with the extent of their participation in the activity. \\n\\nAmerican Nu\r\n rses Credentialing Center (ANCC) \\nStanford Medicine designates this [inser\r\n t learning format] activity for a maximum of 18\\,75 ANCC contact hours. \\n \r\n \\nAmerican Academy of Physician Associates (AAPA) - Live \\nStanford Medicin\r\n e has been authorized by the American Academy of PAs (AAPA) to award AAPA C\r\n ategory 1 CME credit for activities planned in accordance with AAPA CME Cri\r\n teria. This live activity is designated for 18.75 AAPA Category 1 CME credi\r\n ts. PAs should only claim credit commensurate with the extent of their part\r\n icipation.  \\n\\nAmerican Board of Otolaryngology – Head and Neck Surgery MO\r\n C Credit\\nSuccessful completion of this CME activity\\, which includes parti\r\n cipation in the evaluation component\\, enables the participant to earn thei\r\n r required annual part II self-assessment credit in the American Board of O\r\n tolaryngology – Head and Neck Surgery’s Continuing Certification program (f\r\n ormerly known as MOC). It is the CME activity provider's responsibility to \r\n submit participant completion information to ACCME for the purpose of recog\r\n nizing participation.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center for Learning and Knowledge (LKSC)\r\nSEQUENCE:0\r\nSUMMARY:  Stanford Otology Update 2026\r\nUID:tag:localist.com\\,2008:EventInstance_50943049761105\r\nURL:https://events.stanford.edu/event/stanford-otology-update-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294358444\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355517425\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249809341\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510363501\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Last day of classes (unless class meets on Sat).\r\nUID:tag:localist.com\\,2008:EventInstance_49463545102610\r\nURL:https://events.stanford.edu/event/last-day-of-classes-unless-class-meet\r\n s-on-sat-7161\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539262119\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353981510\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day marks the last day of classes (unless the class meets \r\n on Saturday)\\, except Law classes.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Last Day of Classes (Except Law)\r\nUID:tag:localist.com\\,2008:EventInstance_50472522975085\r\nURL:https://events.stanford.edu/event/winter-quarter-last-day-of-classes-ex\r\n cept-law\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the last opportunity to arrange \"Incomplete\" in a c\r\n ourse\\, at the last class.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Last Day to Arrange Incomplete\r\nUID:tag:localist.com\\,2008:EventInstance_50472523069303\r\nURL:https://events.stanford.edu/event/winter-quarter-last-day-to-arrange-in\r\n complete\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a late application to graduate a\r\n t the end winter quarter. ($50 fee)\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Late Application Deadline for Degree Conferral\r\nUID:tag:localist.com\\,2008:EventInstance_50472523258761\r\nURL:https://events.stanford.edu/event/winter-quarter-late-application-deadl\r\n ine-for-degree-conferral\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294087993\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit your university thesis\\, DMA fin\r\n al project\\, or PhD dissertation.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260313\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: University Thesis/Dissertation Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472523161472\r\nURL:https://events.stanford.edu/event/winter-quarter-university-thesisdisse\r\n rtation-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260314T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T150000Z\r\nGEO:37.445593;-122.162327\r\nLOCATION:Fidelity Office Palo Alto CA\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Fidelity Office in Palo Alto) (\r\n By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525379448097\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-fidelity-office-in-palo-alto-by-appointment-only-3695\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260314T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098401645\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260314T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910829774\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDTEND:20260314T010000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T160000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford ChEM-H Building\\, Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Next Gen: Health\\, Technology\\, AI and Cool Science\r\nUID:tag:localist.com\\,2008:EventInstance_51996057954560\r\nURL:https://events.stanford.edu/event/next-gen-health-technology-ai-and-coo\r\n l-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit showcases capstone projects from \"The Senior Refle\r\n ction\" in the Biology Department\\, a unique course that asks students to co\r\n nceive\\, produce\\, and exhibit a creative project centering around Biology \r\n or the life sciences.\\n\\nCo-founded and taught by Professor Susan McConnell\r\n  and Lecturer Andrew Todhunter\\, the course provides a space for students t\r\n o blend their scientific studies with creative expression\\, using media as \r\n diverse as painting\\, poetry\\, needle point\\, bookmaking\\, and the performi\r\n ng arts. The projects in this display were created by students in the 2024-\r\n 2025 cohort. \\n\\nThe exhibit will be on display in Hohbach Hall in Green Li\r\n brary for the duration of the Winter 2026 quarter.\r\nDTEND:20260313T170000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T160000Z\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\\, Entrance\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Showcase: The Senior Reflection in Biology\r\nUID:tag:localist.com\\,2008:EventInstance_51818353502089\r\nURL:https://events.stanford.edu/event/undergraduate-showcase-the-senior-ref\r\n lection-in-biology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260314T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382784692\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please note that this event is in-person only\\, and RSVPs are r\r\n equested to attend. Walk-ins are welcome.\\nRegister now!\\n\\nThe 2025-26 Tan\r\n ner Lectures feature economist Nicholas Stern discussing the economics of a\r\n n ethically sound world.\\n\\nThe twin crises of climate change and biodivers\r\n ity loss require a rapid restructuring of how we produce\\, consume\\, and ca\r\n re for the environment. This lecture will explore how a new economics can g\r\n uide these changes to our systems\\, structures\\, and technologies that are \r\n necessary to lead us toward a more sustainable\\, resilient\\, and equitable \r\n future. We need an ethically sound public economics where structures are dy\r\n namic\\, where market failures are taken seriously\\, where change is driven \r\n by private-sector investment\\, and where time matters.\\n\\n2-day Event Sched\r\n ule\\nLecture by Nicholas Stern with Heather Boushey\\nThursday\\, March 12\\, \r\n 5–7pm | Denning House\\, Rm 210\\nDiscussion Seminar with Nicholas Stern\\, Si\r\n mon Caney\\, and Gretchen Daily\\nFriday\\, March 13\\, 10am–12pm | Denning Hou\r\n se\\, Rm 201\\n\\nThis event is hosted by the McCoy Family Center for Ethics i\r\n n Society and the Office of the President.\\n\\nSpeaker:\\n\\nNicholas Stern is\r\n  IG Patel Professor of Economics and Government\\, Chair of the Grantham Res\r\n earch Institute on Climate Change and the Environment\\, Chair of the Global\r\n  School of Sustainability at the London School of Economics. He has held po\r\n sts at other UK and overseas universities\\, and as Chief Economist at both \r\n the EBRD and the World Bank. He was Head\\, UK Government Economic Service 2\r\n 003-2007\\, and produced the Stern Review on the economics of climate change\r\n . He was President of the Royal Economic Society (2018-2019).  He was Presi\r\n dent of the British Academy (July 2013-2017) and was elected Fellow of the \r\n Royal Society (June 2014). He was knighted for services to economics (2004)\r\n \\, made a life peer (2007)\\, and appointed Companion of Honour for services\r\n  to economics\\, international relations and tackling climate change in 2017\r\n . He has published more than 25 books and 200 articles\\, most recent being \r\n his open access book\\, The Growth Story of the 21st Century (2025).\\n\\nDisc\r\n ussants:\\n\\nSimon Caney is Professor in Political Theory at the University \r\n of Warwick. He works on issues in contemporary political philosophy\\, and h\r\n as published widely on climate justice\\, global justice\\, and responsibilit\r\n ies to future generations. He is the author of Justice Beyond Borders: A Gl\r\n obal Political Theory (Oxford University Press\\, 2005)\\, and he is also the\r\n  co-editor (with Stephen Gardiner\\, Dale Jamieson and Henry Shue) of Climat\r\n e Ethics (Oxford University Press\\, 2010). He was a member of UK’s Nuffield\r\n  Council of Bioethics (2014-2020)\\, and a coauthor of the Nuffield Council \r\n of Bioethics reports on Biofuels: Ethical Issues (2011) and Research in Glo\r\n bal Health Emergencies (2020). He is completing two books - On Cosmopolitan\r\n ism: Equality\\, Ecology\\, and Emancipation (Oxford University Press) and De\r\n mocracy\\, Justice\\, and the Future: An Essay in Applied Political Philosoph\r\n y (Oxford University Press). He is also currently completing a series of pa\r\n pers on climate justice.\\n\\n\\nGretchen Daily is Bing Professor of Environme\r\n ntal Science and Senior Fellow at the Woods Institute for the Environment a\r\n nd\\, by courtesy\\, at the Freeman Spogli Institute for International Studie\r\n s at Stanford University. She is co-founder and Faculty Director of the Sta\r\n nford Natural Capital Alliance\\, a 20-year-old global partnership whose mis\r\n sion is to help secure the well-being of people and nature.  They do this b\r\n y co-developing with decision-makers a systematic approach to valuing natur\r\n e in sustaining and fulfilling human life.  The approach is now being integ\r\n rated into policy\\, finance\\, and practice in over 75 countries around the \r\n world.  \\n\\nTogether with many colleagues\\, Daily has published several hun\r\n dred scientific and popular articles\\, and a dozen books\\, including Nature\r\n ’s Services (1997)\\, The New Economy of Nature (2002)\\, The Power of Trees \r\n (2012)\\, and Green Growth that Works (2019). Daily is a fellow of the U.S. \r\n National Academy of Sciences and the American Philosophical Society. She ha\r\n s received numerous international honors including the Tyler Prize for Envi\r\n ronmental Achievement (2020)\\, Blue Planet Prize (2017)\\, Volvo Environment\r\n  Prize (2012)\\, and the International Cosmos Prize (2009). \\n\\nThis event w\r\n ill have a videographer and photographer present to document the event. No \r\n personal recordings (audio or visual) are allowed. By attending\\, you conse\r\n nt for your image to be used for Stanford-related promotions and materials.\r\n  If you have any questions\\, please contact ethics-center@stanford.edu.\\n\\n\r\n If you require disability-related accommodation\\, please contact disability\r\n .access@stanford.edu as soon as possible or at least 7 business days in adv\r\n ance of the event.\\n\\nSee this link for information about Visitor parking. \r\n \\n\\nLearn more about the McCoy Family Center for Ethics in Society.\r\nDTEND:20260313T190000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T170000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\\, Room 201\r\nSEQUENCE:0\r\nSUMMARY:Economics and Ethics for Sustainable Development in a Changing Worl\r\n d (Discussion Seminar)\r\nUID:tag:localist.com\\,2008:EventInstance_51837015057915\r\nURL:https://events.stanford.edu/event/economics-and-ethics-for-sustainable-\r\n development-in-a-changing-world-discussion-seminar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260313T190000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802452225\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:It's that time of year again - FINALS. Come and de-stress with \r\n Cardinal Nights on Friday\\, March 13 from 11am-2pm in White Plaza. We will \r\n have bunny therapy and boba\\, probably the only two things that can help yo\r\n u not think about impending exams for a few hours. \\n\\nWe will also have cr\r\n afting stations for plant pot painting so you can take home a succulent to \r\n keep you company during exam week. Come and learn about The Bridge\\, who pr\r\n ovides 24/7 peer counseling to the Stanford community and join a tea-making\r\n  activity. \\n\\nPlease RSVP on Partiful \\n\\n* participation in this event is\r\n  for current\\, enrolled Stanford student - student ID required\r\nDTEND:20260313T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T180000Z\r\nGEO:37.425057;-122.169372\r\nLOCATION:White Plaza\r\nSEQUENCE:0\r\nSUMMARY:Stress Less: Bunnies + Boba \r\nUID:tag:localist.com\\,2008:EventInstance_52251951756857\r\nURL:https://events.stanford.edu/event/stress-less-bunnies-boba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260313T193000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699831482\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:EXTRA/PHENOMENALITIES\\nJanuary 22–March 13\\, 2026\\nStanford Art\r\n  Gallery\\n\\nARTIST PANEL: Monday\\, February 23\\, 5-7pm | Oshman Hall\\, McMu\r\n rtry Building\\n\\nWhat are the limits of experience? This exhibition explore\r\n s forms of appearance that press against the edges of perception—phenomena \r\n that are felt only indirectly\\, sensed as traces\\, intensities\\, or disturb\r\n ances rather than as stable objects. “Extra/phenomenality” refers to this a\r\n mbiguous zone of surplus and slippage: where aspects of the world exceed or\r\n  elude our usual modes of noticing\\, while still shaping how we see\\, feel\\\r\n , and understand.\\n\\nSuch excess takes many forms. It can be found in natur\r\n al processes whose scales outrun human attention\\; in cultural and spiritua\r\n l traditions that treat appearance as layered or illusory\\; in psychologica\r\n l or bodily states that strain the coherence of conscious experience. It al\r\n so takes shape in today’s technical environments—where images\\, signals\\, a\r\n nd decisions circulate through systems that operate faster than we can perc\r\n eive. New modes of appearance are at stake\\, but also new zones of non-appe\r\n arance—gaps\\, blind spots\\, and operations that remain perceptually inacces\r\n sible. In all of these cases\\, the limits of experience are stretched and r\r\n econfigured.\\n\\nThe artists gathered here engage this terrain of extension \r\n and attenuation. Some work with subtle shifts of color\\, rhythm\\, or materi\r\n al to draw attention to thresholds where perception begins to blur. Others \r\n stage encounters with forms that flicker between visibility and invisibilit\r\n y\\, inviting viewers to sense what hovers at experience’s margins. Still ot\r\n hers explore how contemporary computational systems generate patterns that \r\n enter our lives without ever presenting themselves directly.\\n\\nTaken toget\r\n her\\, the works invite reflection on how the phenomenal world is never give\r\n n all at once\\, but is continually inflected by forces that lie just beyond\r\n  phenomenality itself. EXTRA/PHENOMENALITIES asks viewers to slow down\\, to\r\n  look again\\, and to inhabit the unstable relation between what appears and\r\n  what exceeds appearing—an aesthetic space where the subtle\\, the oblique\\,\r\n  and the barely perceptible can take on new significance.\\n\\nPARTICIPATING \r\n ARTISTS:\\nMorehshin Allahyari\\, Mark Amerika\\, Will Luers\\, & Chad Mosshold\r\n er\\, Brett Amory\\, Rebecca Baron + Douglas Goodwin\\, Jon Bernson\\, Daniel B\r\n rickman\\, Paul DeMarinis\\, Karin + Shane Denson\\, Ebti\\, Frank Floyd\\, Gabr\r\n iel Harrison\\, DJ Meisner\\, Joshua Moreno\\, Carlo Nasisse\\, Miguel Novelo\\,\r\n  Andy Rappaport\\, William Tremblay\\, Camille Utterback\\, and Kristen Wong\\n\r\n \\nCURATED BY:\\nBrett Amory\\, Karin Denson\\, and Shane Denson\\n\\nVISITOR INF\r\n ORMATION: \\nStanford Art Gallery is located at 419 Lasuen Mall\\, off Palm D\r\n rive. The gallery is open Monday–Friday\\, 12–5pm (except on opening day\\, J\r\n an. 22)\\, and will be closed February 16-17. Visitor parking is available i\r\n n designated areas and payment is managed through ParkMobile (free after 4p\r\n m\\, except by the Oval). Alternatively\\, take the Caltrain to Palo Alto Tra\r\n nsit Center and hop on the free Stanford Marguerite Shuttle. This exhibitio\r\n n is open to Stanford affiliates and the general public. Admission is free.\r\n  \\n\\nPlease note: due to the nature of the work on view\\, this exhibition i\r\n s not suitable for children under the age of 10. Visitors should also be aw\r\n are that video monitoring is in use as part of the exhibition experience\\; \r\n no footage is recorded or retained.\\n\\nConnect with the Department of Art &\r\n  Art History! Subscribe to our mailing list and follow us on Instagram and \r\n Facebook.\r\nDTEND:20260314T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T190000Z\r\nGEO:37.428023;-122.16772\r\nLOCATION:Stanford Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:EXTRA/PHENOMENALITIES\r\nUID:tag:localist.com\\,2008:EventInstance_51560561127276\r\nURL:https://events.stanford.edu/event/extraphenomenalities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Eric Appel\\, PhD\\nAssociate Professor\\, Department of Materials\r\n  Science and Engineering\\, Stanford University\\n\"Biomimetic Polymer Technol\r\n ogies for Improving Biologic Formulation and Delivery\"\r\nDTEND:20260313T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T190000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, B302\r\nSEQUENCE:0\r\nSUMMARY:SDRC Friday Seminar - Eric Appel\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_52277692889677\r\nURL:https://events.stanford.edu/event/sdrc-friday-seminar-eric-appel-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Estonians and Finns are separated by the Baltic Sea but have cl\r\n ose linguistic and cultural ties which persevered throughout the Cold War. \r\n At the end of the 1980s these blossomed into a wave of Finnish aid which no\r\n t only alleviated economic woes inherent to the Soviet system\\, but took on\r\n  a political dimension by kindling the fire of pro-independence movements i\r\n n Estonia. Person-to-person informal networks which moved vast amounts of c\r\n lothing\\, medicine\\, technology\\, toys and food from independent Finland to\r\n  Soviet Estonia gave recipients a real “taste” of freedom even before the f\r\n all of the Iron Curtain. These networks enabled individual families in Esto\r\n nia not only to survive but to thrive within the precarious economic enviro\r\n nment that defined the last years of Soviet rule. Although taste\\, smell\\, \r\n flavor and their social constructs have traditionally been ignored in polit\r\n ical histories\\, there is no denying that a sort of \"sensual turn\" has take\r\n n place in the 21st century. The echoes of the olfactory as well as materia\r\n l encounters between Estonians and Finns can be still heard in modern day e\r\n xperiences and routines as well as Estonia’s political culture\\, which sets\r\n  Estonia apart from many other former Soviet states.\\n\\nPlease RSVP here.\\n\r\n \\nMaarja Merivoo-Parro is dedicated to exploring the history of mentality a\r\n t the crossroads of culture and politics and has extensive field work exper\r\n ience among Estonian communities from Abkhazia to Australia. She is a Fulbr\r\n ight scholar and currently holds the position of Marie Curie fellow at the \r\n University of Jyväskylä in Finland. Maarja has received national recognitio\r\n n for her work as a public intellectual bridging academia and society throu\r\n gh documentary films\\, television and radio programs.\r\nDTEND:20260313T200000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T190000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Rm. 123\r\nSEQUENCE:0\r\nSUMMARY:The Taste of Freedom\\, the Smell of Democracy: Cold War Spontaneous\r\n  Humanitarian Aid from Finland to Estonia\r\nUID:tag:localist.com\\,2008:EventInstance_52066001754221\r\nURL:https://events.stanford.edu/event/the-taste-of-freedom-the-smell-of-dem\r\n ocracy-cold-war-spontaneous-humanitarian-aid-from-finland-to-estonia\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for our Noon Concert Series\\, where student musicians f\r\n rom a variety of instrumental and vocal studios take the stage. Each perfor\r\n mance offers a vibrant showcase of emerging talent\\, celebrating music in a\r\n  relaxed midday setting.﻿\\n\\nAdmission Information\\n\\nFree admissionParking\r\n  permits are required for weekday campus parking. We recommend downloading \r\n the ParkMobile app before arriving.\r\nDTEND:20260313T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T193000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Noon Concert: Piano Students of Laura Dahl\r\nUID:tag:localist.com\\,2008:EventInstance_51463255332908\r\nURL:https://events.stanford.edu/event/noon-dahl-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260313T210000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682835863\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Let's celebrate PI(e) Day and the end of the quarter with a var\r\n iety of pies & ice cream too\\, for those who like a la mode!!!\\n\\nWHEN: Fri\r\n day\\, March 13th\\nTIME: 2:30-3:30pm\\nWHERE: ES Lounge (Y2E2 room 131)\\n\\nWh\r\n ile supplies last...🥧🍨💚\r\nDTEND:20260313T233000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T213000Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 131\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Program PI(e) Day\r\nUID:tag:localist.com\\,2008:EventInstance_52279426173538\r\nURL:https://events.stanford.edu/event/earth-systems-program-pie-day\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The experience of OCD (Obsessive Compulsive Disorder) can be is\r\n olating and stressful.\\n\\nThis is an open and ongoing group for students wh\r\n o live with OCD to support each other and have a safe space to connect. The\r\n  group will focus on providing mutual support\\, sharing wisdom\\, increasing\r\n  self-compassion\\, and enhancing overall coping and wellness.\\n\\nMeeting wi\r\n th a facilitator is required to join this group. You can sign up on the INT\r\n EREST LIST_LIVING_WITH_OCD_IN-PERSON_WINTER_Q on Vaden Portal rosters\\, in \r\n the \"Groups and Workshops\" section. This group will take place in-person on\r\n  Fridays from 3-4pm on 1/23\\; 1/30\\; 2/6\\; 2/13\\; 2/20\\; 2/27\\; 3/6\\; 3/13.\r\n Facilitated by Jennifer Maldonado\\, LCSWAll enrolled students are eligible \r\n to participate in CAPS groups and workshops. A pre-group meeting is require\r\n d prior to participation in this group. Please contact CAPS at (650) 723-37\r\n 85 to schedule a pre-group meeting with the facilitators\\, or sign up on th\r\n e portal as instructed above.\r\nDTEND:20260313T230000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T220000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\r\nSEQUENCE:0\r\nSUMMARY:Living with OCD\r\nUID:tag:localist.com\\,2008:EventInstance_51782951098668\r\nURL:https://events.stanford.edu/event/copy-of-living-with-ocd-3482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Presented by the Department of Art & Art History\\, Open Studios\r\n  is a long-running afternoon event that invites the Stanford community to e\r\n xplore the classrooms and studios of the McMurtry Building where works by u\r\n ndergraduate students are displayed.\\n\\nOpen Studios offers an opportunity \r\n to see student work where it was created\\, featuring drawings\\, paintings\\,\r\n  photographs\\, sculptures\\, virtual reality\\, experimental media\\, and more\r\n . Join us!\\n\\nVISITOR INFORMATION: The McMurtry Building is located on Stan\r\n ford campus at 355 Roth Way.\\n\\nVisitor parking is available in designated \r\n areas and payment is managed through ParkMobile (free after 4pm\\, except by\r\n  the Oval). Alternatively\\, take the Caltrain to Palo Alto Transit Center a\r\n nd hop on the free Stanford Marguerite Shuttle. If you need a disability-re\r\n lated accommodation or wheelchair access information\\, please contact Julia\r\n nne Garcia at juggarci@stanford.edu. This event is open to Stanford affilia\r\n tes and the general public. Admission is free.\\n\\nConnect with the Departme\r\n nt of Art & Art History! Subscribe to our mailing list and follow us on Ins\r\n tagram and Facebook.\r\nDTEND:20260314T000000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260313T220000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\r\nSEQUENCE:0\r\nSUMMARY:Winter 2026 Open Studios\r\nUID:tag:localist.com\\,2008:EventInstance_51331953104297\r\nURL:https://events.stanford.edu/event/winter-2026-open-studios\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260314T030000Z\r\nDTSTAMP:20260308T083910Z\r\nDTSTART:20260314T023000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_52081996395230\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewStanford Otology Update 2026 is designed to advance the\r\n  knowledge and clinical skills of healthcare providers specializing in adul\r\n t and pediatric otologic disorders. This comprehensive program will focus o\r\n n the latest advances in the diagnosis\\, medical management\\, and surgical \r\n treatment of common and complex ear conditions. Participants will gain prac\r\n tical insights into risk reduction strategies\\, effective ordering and inte\r\n rpretation of diagnostic tests\\, and the application of evidence-based prac\r\n tices to improve patient outcomes. The course consists of a blend of didact\r\n ic lectures\\, interactive panel discussions\\, real-word case studies\\, and \r\n hands-on skills sessions led by expert faculty.\\n\\nRegistrationAll three da\r\n ys which includes three hands-on skills session on Saturday\\, March 14\\, 20\r\n 26. \\n\\nNEW THIS YEAR FOR AUDIOLOGISTS\\nThere will be an all day Audiology \r\n program included with your registration - space is limited.\\n\\nPhysicians: \r\n $945.00\\nAudiologists\\, RN\\, PA\\, SLP & Residents: $300.00\\nStanford Audiol\r\n ogists/Staff: $0.00 (Must register with Stanford email address)\\nCalifornia\r\n  Fellows/Residents ONLY - $0.00 (Must email svittori@stanford.edu for disco\r\n unt code)\\n\\nClick HERE to submit your challenging cases panel discussion. \r\n Please submit a brief description of the case\\, remove all PHI and label th\r\n e document(s) beginning with your last name.\\n\\nPlease rank the hands-on se\r\n ssions you'd like to attend during the registration process.  We will do be\r\n st to accommodate your request.  You will be able to attend 3 sessions on S\r\n aturday\\, March 14\\, 2026. \\n\\nHands On Sessions Include:\\nEndoscopic Ear S\r\n urgery/Ossiculoplasty\\nImplantable Devices (limit 10 learners per session)\\\r\n nVestibular Assessment and Physical Therapy\\nOtologic Imaging\\nOffice Manag\r\n ement of Otologic Disorders\\nAudiology: Speech in Noise Update:  The Presen\r\n t & Future\\nAudiology: AI in Audiology Panel\\nAudiology: Lightening Rounds:\r\n   Hearing Aids & Cochlear Implants\\n\\nCreditsAMA PRA Category 1 Credits™ (1\r\n 8.75 hours)\\, AAPA Category 1 CME credits (18.75 hours)\\, ABOHNS MOC Part I\r\n I (18.75 hours)\\, ANCC Contact Hours (18.75 hours)\\, Non-Physician Particip\r\n ation Credit (18.75 hours)\\n\\nTarget AudienceSpecialties - Otolaryngology (\r\n ENT)Professions - Advance Practice Nurse (APN)\\, Fellow/Resident\\, Nurse\\, \r\n Physician\\, Physician Associate\\, Registered Nurse (RN)\\, Speech Language P\r\n athologist\\, Student ObjectivesAt the conclusion of this activity\\, learner\r\n s should be able to:\\n1. Diagnose hearing loss and balance disorders based \r\n on specific patient characteristic and practice setting\\n2. Develop skills \r\n in understanding\\, selecting\\, and performing otologic surgical procedures\\\r\n n3. Apply risk reduction techniques in otologic surgery to reduce clinical \r\n errors\\n4. Develop strategies to optimally establish and perform multi-spec\r\n ialty approach care for complex otologic disorders\\n\\nAccreditationIn suppo\r\n rt of improving patient care\\, Stanford Medicine is jointly accredited by t\r\n he Accreditation Council for Continuing Medical Education (ACCME)\\, the Acc\r\n reditation Council for Pharmacy Education (ACPE)\\, and the American Nurses \r\n Credentialing Center (ANCC)\\, to provide continuing education for the healt\r\n hcare team. \\n\\nCredit Designation \\nAmerican Medical Association (AMA) \\nS\r\n tanford Medicine designates this Live Activity for a maximum of 18.75 AMA P\r\n RA Category 1 CreditsTM.  Physicians should claim only the credit commensur\r\n ate with the extent of their participation in the activity. \\n\\nAmerican Nu\r\n rses Credentialing Center (ANCC) \\nStanford Medicine designates this [inser\r\n t learning format] activity for a maximum of 18\\,75 ANCC contact hours. \\n \r\n \\nAmerican Academy of Physician Associates (AAPA) - Live \\nStanford Medicin\r\n e has been authorized by the American Academy of PAs (AAPA) to award AAPA C\r\n ategory 1 CME credit for activities planned in accordance with AAPA CME Cri\r\n teria. This live activity is designated for 18.75 AAPA Category 1 CME credi\r\n ts. PAs should only claim credit commensurate with the extent of their part\r\n icipation.  \\n\\nAmerican Board of Otolaryngology – Head and Neck Surgery MO\r\n C Credit\\nSuccessful completion of this CME activity\\, which includes parti\r\n cipation in the evaluation component\\, enables the participant to earn thei\r\n r required annual part II self-assessment credit in the American Board of O\r\n tolaryngology – Head and Neck Surgery’s Continuing Certification program (f\r\n ormerly known as MOC). It is the CME activity provider's responsibility to \r\n submit participant completion information to ACCME for the purpose of recog\r\n nizing participation.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260314\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center for Learning and Knowledge (LKSC)\r\nSEQUENCE:0\r\nSUMMARY:  Stanford Otology Update 2026\r\nUID:tag:localist.com\\,2008:EventInstance_50943049762130\r\nURL:https://events.stanford.edu/event/stanford-otology-update-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260314\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294359469\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260314\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355518450\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260314\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510365550\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260314\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539264168\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083910Z\r\nDTSTART;VALUE=DATE:20260314\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353982535\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260314\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294180158\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:OverviewNavigating nutrition and supplementation can be challen\r\n ging for young athletes and their families. This session provides practical\r\n \\, evidence-based guidance on sports nutrition for pediatric and adolescent\r\n  athletes\\, including key nutrition considerations during clinic visits\\, c\r\n ommonly used supplements\\, use cases for creatine and protein powder\\, and \r\n when a visit to a registered dietitian is appropriate. Join us to gain prac\r\n tical strategies to support safe and healthy nutrition practices in youth a\r\n thletes.\\n\\nRegistrationRegistration is required.\\n\\nAll practitioners: fre\r\n e.\\n\\nCreditsAMA PRA Category 1 Credits™ (1.00 hours)\\, BOC Category A Hour\r\n s/CEUs (1.00 hours)\\, Non-Physician Participation Credit (1.00 hours)\\, Occ\r\n upational Therapy Contact Hours (1.00 hours)\\, Physical Therapy Contact Hou\r\n rs (1.00 hours)\\n\\nTarget AudienceSpecialties - Orthopedics & Sports Medici\r\n neProfessions - Athletic Trainer\\, Fellow/Resident\\, Non-Physician\\, Occupa\r\n tional Therapist\\, Physical Therapist\\, Physician ObjectivesAt the conclusi\r\n on of this activity\\, learners should be able to:\\n1. Discuss key sports nu\r\n trition considerations to address during pediatric and adolescent health vi\r\n sits.\\n2. Describe commonly used dietary supplements that youth athletes an\r\n d their families frequently inquire about.\\n3. Summarize the current eviden\r\n ce\\, indications\\, and limitations related to the use of creatine and prote\r\n in supplementation in youth athletes. 4. Discuss when referral to a registe\r\n red dietitian is indicated for youth athletes.\\n\\nAccreditationIn support o\r\n f improving patient care\\, Stanford Medicine is jointly accredited by the A\r\n ccreditation Council for Continuing Medical Education (ACCME)\\, the Accredi\r\n tation Council for Pharmacy Education (ACPE)\\, and the American Nurses Cred\r\n entialing Center (ANCC)\\, to provide continuing education for the healthcar\r\n e team. \\n \\nCredit Designation \\nAmerican Medical Association (AMA) \\nStan\r\n ford Medicine designates this Live Activity for a maximum of 1.00 AMA PRA C\r\n ategory 1 CreditsTM.  Physicians should claim only the credit commensurate \r\n with the extent of their participation in the activity. \\n\\nBoard of Certif\r\n ication\\, Inc (BOC)\\nStanford Medicine (BOC AP# 0000751) is approved by the\r\n  Board of Certification\\, Inc. to provide continuing education to Athletic \r\n Trainers (ATs). This program is eligible for a maximum of 1.00 Category A h\r\n ours/CEUs. ATs should claim only those hours actually spent in the educatio\r\n nal program.\\n\\nStanford Health Care Department of Rehabilitation is an app\r\n roved provider for physical therapy and occupational therapy for courses th\r\n at meet the requirements set forth by the respective California Boards. Thi\r\n s course is approved for 1.00 hour CEU for PT and OT.\r\nDTEND:20260314T160000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Pediatric Orthopedics and Sports Medicine Lecture Series: Sports Nu\r\n trition\r\nUID:tag:localist.com\\,2008:EventInstance_52187852380615\r\nURL:https://events.stanford.edu/event/pediatric-orthopedics-and-sports-medi\r\n cine-lecture-series-sports-nutrition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260315T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098402670\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260315T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910830799\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260314T183000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078571446\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260314T193000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699833531\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260314T203000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691961120\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260314T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682837912\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260314T223000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708326163\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260314T230000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260314T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668854266\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294361518\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355519475\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463510369647\r\nURL:https://events.stanford.edu/event/end-quarter-period-5135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539266217\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353983560\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:See the Cardinal Care website.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter Cardinal Care Waiver Deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_49463578146643\r\nURL:https://events.stanford.edu/event/spring-quarter-cardinal-care-waiver-d\r\n eadline-3573\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:See the Cardinal Care website.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter Cardinal Care Waiver Deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_49464224965129\r\nURL:https://events.stanford.edu/event/spring-quarter-cardinal-care-waiver-d\r\n eadline-8028\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to apply for the spring quarter Cardinal C\r\n are Waiver. See the Cardinal Care website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Cardinal Care Waiver Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472523361170\r\nURL:https://events.stanford.edu/event/spring-quarter-cardinal-care-waiver-d\r\n eadline-901\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260315\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294233407\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260316T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098404719\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260316T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910831824\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260315T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809525617\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Support Space,Social Event/Reception,Other\r\nDESCRIPTION:Where art meets academia: Study in Still Life at the Cantor Art\r\n s Center 🖼️☕📚🎨\\n\\nStressing out about finals? Tired of toiling away in the \r\n library? We’ve got you covered. Introducing the ultimate study hall at the \r\n museum: Study in Still Life.\\n\\nOn March 15th\\, from 11AM to 4:30PM\\, the C\r\n antor transforms into your new favorite study spot. Featuring certified stu\r\n dy zones and an all-you-can-drink coffee cart\\, Study in Still Life will ha\r\n ve you hitting the books in no time.\\n\\nNot that it’s all work and no play!\r\n  When you’re ready for a brain break\\, you’ll have options: hop on a public\r\n  tour\\, grab a free poster\\, enjoy an exclusive viewing of works from our p\r\n ermanent collection\\, or take part in a raffle—grand prize winners will rec\r\n eive Stanford Live concert tickets!\\n\\nFind your calm\\, fuel your inspirati\r\n on. Join us for Study in Still Life—only at the Cantor. Kindly RSVP here.\\n\r\n \\nWarmly\\,\\nThe Cantor Student Advisory Committee 💋\\n\\n________\\n\\nHighligh\r\n ts\\n\\nGuided Tours at 1 & 3PM.\\n\\nCoffee Cart: Available from 12-3PM.\\n\\nRa\r\n ffle Announcement at 4PM.\\n\\n________\\n\\nParking\\n\\nFree visitor parking is\r\n  available along Lomita Drive as well as on the first floor of the Roth Way\r\n  Garage Structure\\, located at the corner of Campus Drive West and Roth Way\r\n  at 345 Campus Drive\\, Stanford\\, CA 94305. From the Palo Alto Caltrain sta\r\n tion\\, the Cantor Arts Center is about a 20-minute walk or there the free M\r\n arguerite shuttle will bring you to campus via the Y or X lines.\\n\\nDisabil\r\n ity parking is located along Lomita Drive near the main entrance of the Can\r\n tor Arts Center. Additional disability parking is located on Museum Way and\r\n  in Parking Structure 1 (Roth Way & Campus Drive). Please click here to vie\r\n w the disability parking and access points.\\n\\nAccessibility Information or\r\n  Requests\\n\\nCantor Arts Center at Stanford University is committed to ensu\r\n ring our programs are accessible to everyone. To request access information\r\n  and/or accommodations for this event\\, please complete this form at least \r\n one week prior to the event: museum.stanford.edu/access.\\n\\nFor questions\\,\r\n  please contact disability.access@stanford.eduor Vivian Sming\\, vsming@stan\r\n ford.edu\\, (650) 725-7789.\\n\\n________\\n\\nImage: Ambrosius Bosschaert the e\r\n lder (Dutch\\, 1573–1621). Detail from Flowers in a Glass Vase\\, c. 1615. Oi\r\n l on panel\\, 21 1/4 x 15 1/2 in. (53.98 x 39.37 cm). Committee for Art Acqu\r\n isitions Fund. 1983.279.\r\nDTEND:20260315T233000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T180000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Study in Still Life | Finals Week: Winter 2026 — STANFORD STUDENTS \r\n ONLY\r\nUID:tag:localist.com\\,2008:EventInstance_51996808208173\r\nURL:https://events.stanford.edu/event/study-in-still-life-finals-week-winte\r\n r-2026-stanford-students-only\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Season of Lent: Lent is the forty-day period (excluding Sundays\r\n ) of prayer\\, repentance and self-denial that precedes Easter.\\n\\nUniversit\r\n y Public Worship gathers weekly for the religious\\, spiritual\\, ethical\\, a\r\n nd moral formation of the Stanford community. Rooted in the history and pro\r\n gressive Christian tradition of Stanford’s historic Memorial Church\\, we cu\r\n ltivate a community of compassion and belonging through ecumenical Christia\r\n n worship and occasional multifaith celebrations.\r\nDTEND:20260315T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Season of Lent Ecumenical Christian Serv\r\n ice \r\nUID:tag:localist.com\\,2008:EventInstance_51958449964488\r\nURL:https://events.stanford.edu/event/upw-lent-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260315T203000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691963169\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260315T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682839961\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:¡Ven a conocer el museo Cantor!\\n\\nExplora las colecciones del \r\n Cantor con un guía que te guiará a través de una selección de obras de dife\r\n rentes culturas y épocas.\\n\\nLos participantes están muy bienvenidos a part\r\n icipar en la conversación y aportar sus ideas sobre los temas explorados a \r\n lo largo de la visita si lo desean.\\n\\nLas visitas no requieren reserva pre\r\n via y son gratuitas. Se ruega registrarse en el mostrador de atención al vi\r\n sitante del vestíbulo principal del museo. \\n\\n ¡Esperamos verte en el muse\r\n o!\\n_______________________________________\\n\\nCome and visit the Cantor! \\\r\n n\\nExplore the Cantor's collections with a museum engagement guide who will\r\n  lead you through a selection of works from different cultures and time per\r\n iods.\\n\\nParticipants are welcomed to participate in the conversation and p\r\n rovide their thoughts on themes explored throughout the tour but are also f\r\n ree to engage at their own comfort level. \\n\\n Tours do not require a reser\r\n vation and are free of charge. Please check-in at the visitor services desk\r\n  in the main museum lobby.\r\nDTEND:20260315T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Spanish \r\nUID:tag:localist.com\\,2008:EventInstance_52057413915603\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -spanish-language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260315T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766128195\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260315T223000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260315T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708328212\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260316\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249811390\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260316\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463585767340\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-1029\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260316\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539268266\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260316\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353984585\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260316\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294454601\r\nURL:https://events.stanford.edu/event/winter-quarter-end-quarter-examinatio\r\n ns-3927\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260316\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294256960\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260317T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260316T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51525517136758\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-5810\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260317T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260316T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098405744\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260317T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260316T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910832849\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260317T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260316T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382786741\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260316T191500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260316T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314072189\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:AI coding agents now complete multi-hour coding benchmarks with\r\n  roughly 50% reliability\\, yet a randomized trial found experienced open-so\r\n urce developers took about 19% longer when allowed frontier AI tools than w\r\n hen tools were disallowed. This talk presents the evidence on the productiv\r\n ity paradox in AI coding\\, shows the bottlenecks in deployment\\, and outlin\r\n es the next steps for understanding AI’s productivity impacts.\\n\\nJoel Beck\r\n er works on AI evaluation methods at METR such as time horizon and develope\r\n r productivity RCTs. Previously he worked in economics and genomics researc\r\n h\\, ran a statistics consultancy advising professional soccer teams\\, and w\r\n as a very minorly successful play-money prediction markets trader.\\n\\nLink \r\n to time horizon paper\\n\\nLink to developer productivity paper\r\nDTEND:20260316T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260316T190000Z\r\nGEO:37.429987;-122.17333\r\nLOCATION:Gates Computer Science Building\\, 119\r\nSEQUENCE:0\r\nSUMMARY:Joel Becker | Reconciling Impressive AI Benchmark Performance with \r\n Limited Developer Productivity Impacts\r\nUID:tag:localist.com\\,2008:EventInstance_52250404154565\r\nURL:https://events.stanford.edu/event/joel-becker-reconciling-impressive-ai\r\n -benchmark-performance-with-limited-developer-productivity-impacts\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Participants from the Stanford Chamber Music program perform.\\n\r\n \\nAdmission Information\\n\\nFree admission\r\nDTEND:20260317T040000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T023000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Chamber Music Showcase 1\r\nUID:tag:localist.com\\,2008:EventInstance_51463370689422\r\nURL:https://events.stanford.edu/event/chamber-showcase1-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260317\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463585769389\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-1029\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260317\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539270315\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260317\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353985610\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260317\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294558030\r\nURL:https://events.stanford.edu/event/winter-quarter-end-quarter-examinatio\r\n ns-3927\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260317\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294275393\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Please join us for the 2026 Water in the West Research Conferen\r\n ce at Stanford University\\, hosted by Water in the West (WitW)\\, a program \r\n of the Stanford Woods Institute for the Environment and the Bill Lane Cente\r\n r for the American West.\\n\\nThis conference will examine issues of critical\r\n  importance to water resources in the western U.S. and the world at large. \r\n  Leading faculty and researchers from Stanford and other universities acros\r\n s the West will present innovative research on water equity and affordabili\r\n ty\\, environmental protection\\, sustainable urban water systems\\, effective\r\n  groundwater management\\, water information systems\\, interjurisdictional w\r\n ater governance\\, Native American water rights\\, adaptation to climate chan\r\n ge and droughts\\, and other major water challenges.  In addition to highlig\r\n hting current research\\, the conference will include a roundtable discussio\r\n n of new and cutting edge research topics.  The conference will provide the\r\n  western water community with an opportunity to connect\\, exchange ideas on\r\n  critical topics\\, showcase emerging research\\, and map future research pro\r\n jects. We hope you will join us at Stanford on March 17 and 18.\\n\\nRegister\r\n  | Speakers |Agenda\r\nDTEND:20260318T013000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T150000Z\r\nGEO:37.423105;-122.166932\r\nLOCATION:Munger Complex\\, Paul Brest Hall\r\nSEQUENCE:0\r\nSUMMARY:2026 Water in the West Research Conference\r\nUID:tag:localist.com\\,2008:EventInstance_52259732562878\r\nURL:https://events.stanford.edu/event/2026-water-in-the-west-research-confe\r\n rence\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260318T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T150000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 139\r\nSEQUENCE:0\r\nSUMMARY:Canceled: Financial Counseling with Fidelity (Main Campus\\, Huang B\r\n ldg\\, Room 139) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525524040262\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-main-campus-huang-bldg-room-139-by-appointment-only-5458\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260318T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098406769\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260318T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910832850\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260318T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382789814\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:We spend one-third of our lives asleep and nearly as much time \r\n worrying about how much sleep we are getting - or not getting. Sleep is cri\r\n tical for the optimization or maintenance of nearly every aspect of human m\r\n ental and physical health\\, and inadequate sleep has been linked to disrupt\r\n ions in mood\\, metabolism\\, cognition\\, heart function\\, and immunity\\, amo\r\n ng others. Worrying about it makes it worse\\, so finding the balance is a c\r\n rucial step in overall sleep health.\\n\\nJoin us for a noontime webinar with\r\n  a Stanford sleep expert to learn more about this vital process. You will l\r\n earn about the basic biology behind sleep\\, common sleep problems\\, the uti\r\n lity (or lack thereof) of wearables\\, and ways to improve sleep. Bring your\r\n  questions and leave with a deeper understanding and practical tools to hel\r\n p you get a better night’s sleep.\\n\\nThis class will be recorded and a one-\r\n week link to the recording will be shared with all registered participants.\r\n  To receive incentive points\\, attend at least 80% of the live session or l\r\n isten to the entire recording within one week.  Request disability accommod\r\n ations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260317T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Unlock Better Sleep\r\nUID:tag:localist.com\\,2008:EventInstance_51388531457827\r\nURL:https://events.stanford.edu/event/unlock-better-sleep\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: The Baltic states keep surprising researchers \r\n — and that is why they are worth studying. They survived the Global Financi\r\n al Crisis without devaluing their currencies and recovered quickly\\, even t\r\n hough many economists expected them to fail. Estonia did better than its ne\r\n ighbors during that crisis\\, and this could not be explained by economic fa\r\n ctors alone — political trust turned out to matter. Now\\, Lithuania has ove\r\n rtaken Estonia in per capita income\\, which few predicted\\, and which remai\r\n ns to be explained. The Baltic puzzles are not just regional curiosities. T\r\n hey point to open questions in political economy and security studies.\\n\\nK\r\n uokštis' current research focuses on NATO burden-sharing. The standard stor\r\n y is that allies spend too little on defense because others will cover for \r\n them — but whether this actually happens\\, and how\\, is less clear than con\r\n ventional wisdom suggests. He examine allied defense spending patterns usin\r\n g difference-in-differences methods\\, and separately run a survey experimen\r\n t in Lithuania testing whether the visible presence of allied forces change\r\n s how citizens view allied commitment and how much they are willing to spen\r\n d on defense. Lithuania is a crucial case for this question: Germany has co\r\n mmitted to stationing a full permanent brigade there\\, creating a real-worl\r\n d experiment that most NATO countries never experience. Can European power \r\n substitute for — or does it complement — American security guarantees? The \r\n answer matters a great deal for how alliances actually hold together.\\n\\nAb\r\n out the speaker: Vytautas Kuokštis is an associate professor at Vilnius Uni\r\n versity’s Institute of International Relations and Political Science (TSPMI\r\n )\\, visiting Stanford’s Center for International Security and Cooperation (\r\n CISAC) during the 2025–26 academic year. His research sits at the intersect\r\n ion of international political economy and security\\, with a focus on excha\r\n nge rate regimes\\, labor market institutions\\, NATO burden-sharing\\, and th\r\n e politics of financial technology (fintech).\\n\\nAt CISAC\\, Kuokštis is des\r\n igning a survey experiment in Lithuania that examines how citizens respond \r\n to changes in NATO allies' defense commitments\\, and what this means for pu\r\n blic preferences on national defense spending.\\n\\nKuokštis has published wi\r\n dely in journals including Political Science Research and Methods\\, Europea\r\n n Journal of Political Economy\\, JCMS: Journal of Common Market Studies\\, R\r\n egulation & Governance\\, Policy & Politics\\, European Journal of Law and Ec\r\n onomics\\, and European Security. Before coming to Stanford\\, Kuokštis held \r\n research positions at Harvard University (Fulbright Fellow)\\, Yale Universi\r\n ty\\, and Hokkaido University. He received advanced quantitative methods tra\r\n ining at Yale and the Essex Summer School\\, and organized the Baltic Studie\r\n s Conference at Yale. At Vilnius University\\, he teaches courses on introdu\r\n ctory economics\\, international political economy\\, and causal inference.\r\nDTEND:20260317T201500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T190000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:What the Baltic States Reveal About Capitalism\\, Security\\, and Tru\r\n st\r\nUID:tag:localist.com\\,2008:EventInstance_52181100644970\r\nURL:https://events.stanford.edu/event/what-the-baltic-states-reveal-about-c\r\n apitalism-security-and-trust\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260317T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491613591\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This group is designed to support students who wish to have a s\r\n afe healing space through utilization of art. Sessions will include hand bu\r\n ilding clay\\, doodling\\, watercolor painting\\, Turkish lump making\\, Chines\r\n e calligraphy\\, rock painting\\, washi tape art\\, terrarium making\\, origami\r\n  and matcha tea. \\n\\nPre-screening is required. Mari or Marisa will reach o\r\n ut to schedule a confidential pre-screening phone or zoom call. \\n\\nWHEN: E\r\n very Tuesday from 3:00 PM - 4:30 PM in Fall Quarter for 7-8 sessions (start\r\n ing on Tuesday in the beginning of Feb\\, 2026) \\n\\nWHERE: In person @ Room \r\n 306 in Kingscote Gardens (419 Lagunita Drive\\, 3rd floor)\\n\\nWHO: Stanford \r\n undergrad and grad students Facilitators: Mari Evers\\, LCSW & Marisa Pereir\r\n a\\, LCSW from Stanford Confidential Support Team\r\nDTEND:20260317T233000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260317T220000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden \r\nSEQUENCE:0\r\nSUMMARY:Healing with Art group \r\nUID:tag:localist.com\\,2008:EventInstance_51827321270637\r\nURL:https://events.stanford.edu/event/healing-with-art-group-6772\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Co-sponsored by Stanford Residential and Dining Enterprises\\n\\n\r\n Eating a diet rich in fiber is crucial for maintaining overall health and w\r\n ell-being. Fiber prevents constipation\\, lowers cholesterol levels\\, reduce\r\n s the risk of heart disease\\, helps control blood sugar levels\\, supports a\r\n  healthy gut microbiome\\, and more. Fortunately\\, incorporating a fiber-ric\r\n h diet is easier and more delicious than you may realize!\\n\\nJoin us for a \r\n hands-on cooking class to learn simple and tasty ways to incorporate more f\r\n iber into your meals. In this two-hour in-person class\\, you will discover \r\n how to create a healthy microbiome by getting more than 30 different types \r\n of high-fiber foods a week through satiating meals.\\n\\nWe will explore ferm\r\n entation techniques\\, planning your snacks\\, using a pressure cooker for be\r\n ans and whole grains\\, creating a savory teff-buckwheat porridge\\, and more\r\n . You will leave the session with tasty samples to take home and enjoy\\, as\r\n  well as a toolbox of strategies to bring more fiber into your daily meals.\r\n \\n\\nThe class will take place on campus in the beautiful RD&E teaching kitc\r\n hen at the Escondido Village Graduate Residences. Due to limited capacity\\,\r\n  this class will be capped at 16 participants\\, so register soon to secure \r\n your spot.\\n\\nThis is an in-person class and will not be recorded. Attendan\r\n ce at the live session is required to receive incentive points.  Request di\r\n sability accommodations and access info.\\n\\nClass details are subject to ch\r\n ange.\r\nDTEND:20260318T020000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T000000Z\r\nGEO:37.426601;-122.156618\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Boost Your Health with Fiber\r\nUID:tag:localist.com\\,2008:EventInstance_51388531533609\r\nURL:https://events.stanford.edu/event/boost-your-health-with-fiber-1215\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260318T013000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663079858\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294365617\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355521524\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463585771438\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-1029\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539272364\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353986635\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294652239\r\nURL:https://events.stanford.edu/event/winter-quarter-end-quarter-examinatio\r\n ns-3927\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260318\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294299970\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260319T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T150000Z\r\nGEO:37.484843;-122.204313\r\nLOCATION:Cardinal Hall\\, C108\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (SRWC Cardinal Hall Room C108) (\r\n By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51525529724252\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-srwc-cardinal-hall-room-c108-by-appointment-only-9212\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Please join us for the 2026 Water in the West Research Conferen\r\n ce at Stanford University\\, hosted by Water in the West (WitW)\\, a program \r\n of the Stanford Woods Institute for the Environment and the Bill Lane Cente\r\n r for the American West.\\n\\nThis conference will examine issues of critical\r\n  importance to water resources in the western U.S. and the world at large. \r\n  Leading faculty and researchers from Stanford and other universities acros\r\n s the West will present innovative research on water equity and affordabili\r\n ty\\, environmental protection\\, sustainable urban water systems\\, effective\r\n  groundwater management\\, water information systems\\, interjurisdictional w\r\n ater governance\\, Native American water rights\\, adaptation to climate chan\r\n ge and droughts\\, and other major water challenges.  In addition to highlig\r\n hting current research\\, the conference will include a roundtable discussio\r\n n of new and cutting edge research topics.  The conference will provide the\r\n  western water community with an opportunity to connect\\, exchange ideas on\r\n  critical topics\\, showcase emerging research\\, and map future research pro\r\n jects. We hope you will join us at Stanford on March 17 and 18.\\n\\nRegister\r\n  | Speakers |Agenda\r\nDTEND:20260318T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T153000Z\r\nGEO:37.423105;-122.166932\r\nLOCATION:Munger Complex\\, Paul Brest Hall\r\nSEQUENCE:0\r\nSUMMARY:2026 Water in the West Research Conference\r\nUID:tag:localist.com\\,2008:EventInstance_52259732563903\r\nURL:https://events.stanford.edu/event/2026-water-in-the-west-research-confe\r\n rence\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Religious diversity is a defining feature of contemporary Ameri\r\n can democracy\\, yet it raises persistent questions about how civic unity is\r\n  cultivated in shared public life. How can institutions of higher education\r\n  prepare students to engage constructively across religious difference whil\r\n e sustaining common democratic commitments? This webinar explores the role \r\n of civic education in a religiously diverse democracy\\, examining pedagogic\r\n al approaches\\, institutional frameworks\\, and normative principles that su\r\n pport civic unity without erasing pluralism.\\n\\nThe Alliance for Civics in \r\n the Academy hosts \"Building Civic Unity in a Religiously Diverse Democracy\"\r\n  with Eboo Patel\\, Robert George\\, Fr. Francisco Nahoe\\, and Josh Ober on M\r\n arch 18\\, 2026\\, from 9:00-10:00 a.m. PT.\\n\\nThe Civics in the Academy webi\r\n nar series features in-depth discussions on the practice\\, pedagogy\\, and s\r\n tate of civics in higher education. Drawing on the diverse expertise and pe\r\n rspectives within the Alliance network\\, each session features topics and p\r\n anelists sourced directly from our membership. The series aims to foster di\r\n alogue\\, share practical knowledge and best practices\\, and contribute to a\r\n  shared\\, pluralistic framework in the evolving field of civics in the acad\r\n emy.\r\nDTEND:20260318T170000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Building Civic Unity in a Religiously Diverse Democracy\r\nUID:tag:localist.com\\,2008:EventInstance_52252949457482\r\nURL:https://events.stanford.edu/event/building-civic-unity-in-a-religiously\r\n -diverse-democracy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260319T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098407794\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260319T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910833875\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:CAS IHAWG brings together graduate students across humanities d\r\n isciplines for sustained\\, collective writing and scholarly exchange. Hoste\r\n d by the Center for African Studies\\, the group meets weekly to combine dis\r\n ciplined co-writing sessions with peer-led workshops and a speaker series t\r\n hat showcases Africanist humanities research. We foster an encouraging\\, pr\r\n oductive environment where members share work-in-progress\\, troubleshoot wr\r\n iting challenges\\, and celebrate milestones in their research. Who should c\r\n onsider joining:\\n\\nGraduate students whose research engages Africa or the \r\n African diaspora in humanities fields\\, including DAAAS/DLCL and other area\r\n  studies\\, art and art history\\, film and media\\, comparative literature\\, \r\n CCSRE\\, education\\, English\\, feminist and gender studies\\, musicology\\, ph\r\n ilosophy\\, linguistics\\, religious studies\\, and theater/performance studie\r\n s. Interdisciplinary and cross-departmental participation is strongly encou\r\n raged.\\n\\nAttendance can be regular or occasional to accommodate academic s\r\n chedules.\\n\\nClick here to receive meeting notices and event updates. \\n\\nF\r\n or questions\\, contact Mpho (mmolefe@stanford.edu) or Seyi (jesuseyi@stanfo\r\n rd.edu).\\n\\nWe welcome you to join our writing community.\r\nDTEND:20260318T183000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T160000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 127\r\nSEQUENCE:0\r\nSUMMARY:Interdisciplinary Humanities Africanist Writing Group (IHAWG)\r\nUID:tag:localist.com\\,2008:EventInstance_52153415604991\r\nURL:https://events.stanford.edu/event/interdisciplinary-humanities-africani\r\n st-writing-group-ihawg\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260318T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105021053\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260319T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382790839\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Come meet our brilliant STUDENT MAKERS from the Product Realiza\r\n tion Lab who will present their AMAZING Winter quarter projects! Products i\r\n nclude innovations in sports equipment\\, consumer goods\\, education and hea\r\n lth devices\\, agricultural tools\\, and MORE!\r\nDTEND:20260318T183000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T163000Z\r\nGEO:37.426525;-122.172025\r\nLOCATION:Building 550\\, Peterson Laboratory\\, Atrium\r\nSEQUENCE:0\r\nSUMMARY:Meet the Makers!\r\nUID:tag:localist.com\\,2008:EventInstance_52029788720269\r\nURL:https://events.stanford.edu/event/meet-the-makers-AY26WIN\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Interpretable Machine Learning and Mixed Datasets for Predictin\r\n g Child Labor in Ghana’s Cocoa Sector\\n\\nChild labor remains prevalent in G\r\n hana’s cocoa sector and is associated with adverse educational and health o\r\n utcomes for children. This exploratory work examines how two surveys that m\r\n easure child labor in Ghana (NORC and GLSS7)\\, but differ in quality and sc\r\n ale\\, can be jointly leveraged for less biased prediction and to identify k\r\n ey predictors of child labor risk. We further investigate whether district-\r\n level satellite indicators\\, including yield-weighted cocoa-driven deforest\r\n ation\\, newly lit area\\, and newly urban area\\, enhance predictive performa\r\n nce and play important roles in shaping model predictions. Using non-parame\r\n tric machine learning models (XGBoost\\, Random Forest) paired with cross-va\r\n lidation and a hyperparameter grid search\\, we find that the best-performin\r\n g model in classifying child laborers achieves an out of sample AUC of 0.95\r\n  and F1 of 0.84. Model interpretability tools (SHAP values\\, partial depend\r\n ence plots) highlight influential predictors such as child age\\, cocoa-driv\r\n en deforestation\\, school commute time\\, newly lit area\\, and household her\r\n bicide expenditures. In addition to emerging as the second most explanatory\r\n  feature\\, cocoa-driven deforestation also shows a clear nonlinear associat\r\n ion with predicted child labor risk. Our approach demonstrates new ways of \r\n grappling with data scarcity and bias in child labor measurement\\, while ou\r\n r findings provide actionable risk profiles to support monitoring efforts a\r\n nd underscore the complex interconnections between child labor and environm\r\n ental practices.\r\nDTEND:20260318T201500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T190000Z\r\nGEO:37.429987;-122.17333\r\nLOCATION:Gates Computer Science Building\\, 119\r\nSEQUENCE:0\r\nSUMMARY:HAI & SDS Seminar with Dan Iancu and Antonio Skillicorn\r\nUID:tag:localist.com\\,2008:EventInstance_51570064994945\r\nURL:https://events.stanford.edu/event/hai-seminar-with-dan-iancu-sarah-bill\r\n ington-antonio-skillicorn\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Session Description\\n\\nIn this session\\, historian Toby Green e\r\n xamines his new book\\, The Heretic of Cacheu (University of Chicago Press)\\\r\n , through the lens of historical methods for studying the African past. In \r\n an era of big data\\, what is the significance of taking a micro-historical \r\n approach\\, and why is it significant as a means of recovering different app\r\n roaches that are not constrained by the coloniality of data mining? Green w\r\n ill discuss how focusing on the life biography of an African woman of the 1\r\n 7th century can illuminate aspects of the past that are increasingly signif\r\n icant\\, yet also increasingly overlooked.\\n\\nRegister Here\\n\\nSpeaker Biogr\r\n aphy\\n\\nToby Green is a Fellow of the British Academy and Professor of Prec\r\n olonial and Lusophone African History and Culture at King’s College\\, Londo\r\n n. His books include the award-winning A Fistful of Shells. He is a member \r\n of the Advisory Board of the Lagos-based Global Africa Institute\\, and was \r\n also an advisory board member for the Amilcar Cabral Centenary Conference o\r\n f 2024 (Bissau/Praia). Green has worked on curriculum change in the teachin\r\n g of African history both in the UK and in West Africa\\, and has been a mem\r\n ber of the UK government’s Model History Curriculum Advisory Group.\r\nDTEND:20260318T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Microhistory and Researching the African Past: The Heretic of Cache\r\n u and Historical Methods - Dr. Toby Green\r\nUID:tag:localist.com\\,2008:EventInstance_51224125342444\r\nURL:https://events.stanford.edu/event/microhistory-and-researching-the-afri\r\n can-pastthe-heretic-of-cacheuand-historical-methods\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Mauro Durante\\nViolinist\\, Percussionist\\, Composer \\n\\nIn Conv\r\n ersation with Drs. Stefano Santo Sabato and Bridget Algee\\n\\nTraditional mu\r\n sic survives not by remaining unchanged\\, but by evolving. Folk repertoires\r\n  endure because each generation reinterprets them—carrying forward cultural\r\n  memory while reshaping form and meaning for the present.\\n\\nIn this conver\r\n sation\\, musician and composer Mauro Durante reflects on his creative proce\r\n ss of rearranging centuries-old Mediterranean folk traditions into contempo\r\n rary musical language. His practice becomes a lens for a broader question: \r\n how do humans preserve continuity across time while embracing transformatio\r\n n? \\n\\nJoining the dialogue\\, Stefano Santo Sabato and Bridget Algee-Hewitt\r\n  explore parallel challenges in AI and the humanities: how knowledge is tra\r\n nsmitted\\, how context is retained\\, and what is gained—or lost—when system\r\n s are built without cultural depth.\\n\\nBringing together music\\, technology\r\n \\, and humanistic inquiry\\, the event argues for a multidisciplinary\\, top-\r\n down approach to AI design—one that begins with meaning\\, memory\\, and the \r\n long arc of human experience. \\n\\nLight Lunch | 11:30 a.m.\\nSeminar | 12:00\r\n  p.m.\\nFolk Music \"Taranta\" Workshop | 1:00 p.m.\\n\\nRegister to attend in p\r\n erson or online >> \\n\\nAbout the Series\\n\\n(Delta)Data is a new CESTA Semin\r\n ar series that invites academics and industry leaders to explore through a \r\n shared lens the evolving landscape of data and to advance the academic-priv\r\n ate partnerships critical to the future of innovation.\r\nDTEND:20260318T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 160\\, Wallenberg Hall\\, Fourth Floor\r\nSEQUENCE:0\r\nSUMMARY:Songs Across Centuries: Cultural Continuity in Music in the Age of \r\n AI\r\nUID:tag:localist.com\\,2008:EventInstance_52269426167283\r\nURL:https://events.stanford.edu/event/copy-of-songs-across-centuries-cultur\r\n al-continuity-in-music-in-the-age-of-a-i\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Do you have questions about requirements and logistics surround\r\n ing your degree? Drop-In and get answers!\\n\\nThis is for current Earth Syst\r\n ems undergrad and coterm students.\r\nDTEND:20260318T213000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T203000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Earth Systems Drop-In Advising (Undergrad & Coterm majors)\r\nUID:tag:localist.com\\,2008:EventInstance_51932797185066\r\nURL:https://events.stanford.edu/event/earth-systems-drop-in-advising-underg\r\n rad-coterm-majors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Hoover Institution for a special live taping of Firing\r\n  Line with Margaret Hoover\\, part of The Ideas That Made U.S.: Dialogues on\r\n  Freedom\\, our year-long series marking America’s 250th anniversary.\\n\\nMar\r\n garet Hoover will moderate a conversation with General Jim Mattis\\, former \r\n U.S. Secretary of Defense\\, and Ryan Holiday\\, bestselling author and moder\r\n n interpreter of Stoic philosophy\\, on the character that sustains a republ\r\n ic. Drawing on experience in military command\\, classical philosophy\\, and \r\n the enduring example of America’s founding generation\\, the discussion will\r\n  explore the virtues that have defined American leadership at its best: dis\r\n cipline\\, moral courage\\, humility in the exercise of power\\, and a profoun\r\n d sense of duty.\r\nDTEND:20260319T020000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260318T233000Z\r\nGEO:37.427563;-122.167691\r\nLOCATION:Traitel Building\\, Hauck Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Character and Country:  The Responsibilities of American Leadership\r\nUID:tag:localist.com\\,2008:EventInstance_52269545883582\r\nURL:https://events.stanford.edu/event/character-and-country-the-responsibil\r\n ities-of-american-leadership\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Humans eat for many reasons above and beyond physiological hung\r\n er drives. Do you find yourself opening the refrigerator over and over\\, ju\r\n st to look? Or grabbing for a favorite snack after a hard day at work? How \r\n about eating to cope with stressful life events? Emotional eating is very c\r\n ommon yet can derail health and lifestyle goals and lead to feelings of gui\r\n lt\\, shame\\, and distress. This session will focus on ways to identify emot\r\n ional eating and practical tips\\, tools\\, and strategies to regulate emotio\r\n ns without turning to food.\\n\\nJoin us for this free webinar to connect wit\r\n h a supportive community\\, share experiences\\, and gain practical advice fo\r\n r achieving lasting diet and lifestyle changes. The Nourish to Flourish mon\r\n thly webinar series\\, hosted by the Stanford Lifestyle and Weight Managemen\r\n t Center\\, is open to all adults seeking to enhance their knowledge and too\r\n ls for effective weight management and improved well-being. You don’t need \r\n to be a Stanford patient to participate—everyone is welcome!\\n\\nThis webina\r\n r will be presented by Brittany Matheson\\, PhD\\, who is a clinical assistan\r\n t professor and licensed clinical psychologist in the Eating Disorders Clin\r\n ic.\r\nDTEND:20260319T010000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Eating with Awareness: Tools to Navigate Non-Hunger & Emotional Eat\r\n ing\r\nUID:tag:localist.com\\,2008:EventInstance_52278808613547\r\nURL:https://events.stanford.edu/event/eating-with-awareness-tools-to-naviga\r\n te-non-hunger-emotional-eating\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Participants from the Stanford Chamber Music program perform.\\n\r\n \\nAdmission Information\\n\\nFree admission\r\nDTEND:20260319T040000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T023000Z\r\nGEO:37.423758;-122.169296\r\nLOCATION:Braun Music Center\\, Campbell Recital Hall\r\nSEQUENCE:0\r\nSUMMARY:Chamber Music Showcase 2\r\nUID:tag:localist.com\\,2008:EventInstance_51463374529568\r\nURL:https://events.stanford.edu/event/chamber-showcase2-winter26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294366642\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355522549\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463585773487\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-1029\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD- Mini-Clinical Performance Examination (CPX) (Required MS2 exam \r\n to be completed prior to clerkship entry).\r\nUID:tag:localist.com\\,2008:EventInstance_49463539274413\r\nURL:https://events.stanford.edu/event/md-mini-clinical-performance-examinat\r\n ion-cpx-required-ms2-exam-to-be-completed-prior-to-clerkship-entry-8003\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353987660\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294692176\r\nURL:https://events.stanford.edu/event/winter-quarter-end-quarter-examinatio\r\n ns-3927\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260319\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294352195\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260320T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51525536203398\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-3186\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Empowered Relief® is an evidence-based\\, single-session pain cl\r\n ass that rapidly equips patients with pain management skills. Developed at \r\n Stanford University.\\n\\nEmpowered Relief® was developed by Beth Darnall\\, P\r\n hD\\, and has been embedded into clinical pathways at Stanford University si\r\n nce 2013. Early positive scientific results led to major NIH funding to fur\r\n ther study the benefits and mechanisms of the single-session pain relief cl\r\n ass. In August 2021\\, JAMA Network Open published results for the NIH-funde\r\n d randomized trial conducted in adults with chronic low back pain (read the\r\n  full scientific report here). Findings suggest that the single-session cla\r\n ss conferred broad and clinically meaningful benefits across multiple outco\r\n mes at 3 months post-treatment (pain intensity\\, pain interference\\, pain c\r\n atastrophizing\\, pain bothersomeness\\, anxiety\\, depression\\, sleep disturb\r\n ance\\, and fatigue). Pragmatic comparative effectiveness studies are planne\r\n d for 2025.\\n\\nEmpowered Relief® is manualized\\, research-grade\\, and ready\r\n  for immediate implementation into your clinic or research study.\\n\\nEmpowe\r\n red Relief® may only be delivered by certified instructors.\\n\\nLicensed hea\r\n lthcare clinicians of any discipline may join our two-day workshop and beco\r\n me a certified Empowered Relief instructor.\\n\\nPlease visit the Empowered R\r\n elief® Clinician Certification webpage for details regarding the CME approv\r\n ed for this workshop.\r\nDTEND:20260319T233000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T153000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Empowered Relief® Instructor Certification CME Workshop: March 19-2\r\n 0\r\nUID:tag:localist.com\\,2008:EventInstance_51064577946546\r\nURL:https://events.stanford.edu/event/empowered-relief-instructor-certifica\r\n tion-cme-workshop-march2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join the Blue Food Futures Program to explore how blue foods — \r\n fish\\, shellfish\\, algae\\, and other aquatic species harvested from oceans\\\r\n , rivers\\, and lakes  — can help build healthy\\, equitable\\, and sustainabl\r\n e food systems.\\n\\nHeld on the Stanford campus\\, this session is an opportu\r\n nity to learn about the latest frontiers in blue food research\\, connect wi\r\n th leading experts\\, and network with a global community of blue food schol\r\n ars committed to driving food system transformation.\\n\\nThis event is co-or\r\n ganized by the Stanford Center for Ocean Solutions\\, the program's co-found\r\n er and host of its Secretariat. \\n\\n9 to 10 am: An opening keynote presente\r\n d by Professor Jim Leape will provide an overview of the Blue Food Futures \r\n Program and highlight the critical role of science and policy in transformi\r\n ng food systems\\, followed by lightning talks from Blue Food Futures Fellow\r\n s.\\n\\n10 to 10:30 am: A networking session will follow with coffee and refr\r\n eshments.\\n\\nPlease rsvp to bluefoodfutures@stanford.edu if you plan to att\r\n end one or both portions of the session so we can plan seating and refreshm\r\n ents accordingly.\\n\\n \\n\\n_________________________________________________\r\n ___________________________________________________________________________\r\n _____________________________\\n\\nBlue Food Futures is an endorsed program o\r\n f the UN Ocean Decade of Ocean Science for Sustainable Development. The pro\r\n gram strengthens blue food science\\, policy\\, and community\\, and is a coll\r\n aboration between the Stanford Center for Ocean Solutions\\, Stockholm Resil\r\n ience Centre at Stockholm University\\, Environmental Defense Fund\\, Governm\r\n ent of Iceland\\, WorldFish\\, National Center for Ecological Analysis and Sy\r\n nthesis\\, University of British Columbia\\, and Xiamen University.\r\nDTEND:20260319T173000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T160000Z\r\nGEO:37.425273;-122.172422\r\nLOCATION:Press Building\r\nSEQUENCE:0\r\nSUMMARY:Blue Food Futures: Advancing blue food science\\, policy\\, and commu\r\n nity\r\nUID:tag:localist.com\\,2008:EventInstance_52278659542563\r\nURL:https://events.stanford.edu/event/blue-food-futures-advancing-blue-food\r\n -science-policy-and-community\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260320T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098408819\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260320T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910834900\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260320T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382792888\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260319T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T190000Z\r\nGEO:37.431942;-122.176463\r\nLOCATION:Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:ReMS - Laura Seeholzer\\, PhD \"Talk Title TBA\" & Nicole Martinez\\, P\r\n hD \"Regulation and function of the epitranscriptome\"\r\nUID:tag:localist.com\\,2008:EventInstance_51518251781409\r\nURL:https://events.stanford.edu/event/rems-laura-seeholzer-phd-talk-title-t\r\n ba-nicole-martinez-phd-regulation-and-function-of-the-epitranscriptome\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Whether working on campus\\, at home\\, or at the local coffee sh\r\n op\\, it is important to set up your computer workstation to allow for neutr\r\n al postures and take adequate rest breaks. The cumulative effect of doing c\r\n omputer-related tasks\\, whether using a desktop\\, laptop\\, cell phone\\, or \r\n tablet\\, may increase the risk of chronic neck\\, shoulder\\, and back injuri\r\n es as well as repetitive stress injuries of the hands and wrists.\\n\\nIf you\r\n  want to learn how to prevent work related aches\\, pains\\, and tension\\, th\r\n en this webinar is for you! You will discover how to reduce your risk of de\r\n veloping a musculoskeletal disorder through proper ergonomics and how to ar\r\n range your workstation for comfort\\, no matter where you are working. We wi\r\n ll also explore the importance of movement and stretches for computer users\r\n  and strategies to incorporate different types of breaks into your daily ro\r\n utine.\\n\\nThis class will be recorded and a one-week link to the recording \r\n will be shared with all registered participants. To receive incentive point\r\n s\\, attend at least 80% of the live session or listen to the entire recordi\r\n ng within one week.  Request disability accommodations and access info.\\n\\n\r\n Class details are subject to change.\r\nDTEND:20260319T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Simple Steps to Improve Your Ergonomics at Work\r\nUID:tag:localist.com\\,2008:EventInstance_51388531654453\r\nURL:https://events.stanford.edu/event/simple-steps-to-improve-your-ergonomi\r\n cs-at-work\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260319T191500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762179887\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Register for the next Department of Medicine Communicator Netwo\r\n rk Lunch & Learn on March 19th! Featuring Guest Presenter Dr. Maya Adam\\, D\r\n irector of Health Media Innovation and Clinical Associate Professor of Pedi\r\n atrics at Stanford School of Medicine\\, who will discuss lessons learned an\r\n d strategies deployed at the intersections of science and communications.\r\nDTEND:20260319T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Where Science Meets Communications with Dr Maya Adam\r\nUID:tag:localist.com\\,2008:EventInstance_52260317826136\r\nURL:https://events.stanford.edu/event/where-science-meets-communications-wi\r\n th-dr-maya-adam\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for this lecture by Professor Michael Rosenfeld\\\r\n , part of the Open and Engaged Lecture Series organized by the Department o\r\n f Sociology. \\n\\nThe Coronavirus pandemic created fundamental obstacles to \r\n relationship formation. More than 10 million more US adults were single dur\r\n ing the pandemic in 2022 compared to 2017. Young adults were especially aff\r\n ected by the pandemic dating recession. The arrival of COVID-19 vaccines di\r\n d not ameliorate the pandemic dating recession\\; on the contrary\\, vaccinat\r\n ed adults were more likely to describe barriers to dating in 2022. The lack\r\n  of data on casual romantic relationships in the US has led to a lack of ap\r\n preciation for the potential vulnerability of casual relationships to exter\r\n nal shocks such as a pandemic. The COVID-19 pandemic has had a long tail of\r\n  lingering social effects.\r\nDTEND:20260319T204500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T193000Z\r\nGEO:37.428476;-122.16909\r\nLOCATION:Building 120\\, McClatchy Hall\\, Main Quad\\, Studio 40\r\nSEQUENCE:0\r\nSUMMARY:Sociology Lecture Series | Singleness and the Pandemic Dating Reces\r\n sion\r\nUID:tag:localist.com\\,2008:EventInstance_52146234300322\r\nURL:https://events.stanford.edu/event/sociology-lecture-series-singleness-a\r\n nd-the-pandemic-dating-recession\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260319T194500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794471191\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260319T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491614616\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Join Help Center clinicians Amy Friedman and Jaimie Lyons at a \r\n monthly drop-in group for parents of middle and high school students.  Thes\r\n e regular discussions are an opportunity to share parenting concerns while \r\n feeling supported by others experiencing this exciting\\, though challenging\r\n \\, time of rapid change and adjustment.  \\n\\n Meetings take place on the th\r\n ird Thursday of each month. All are welcome to attend once\\, twice\\, or as \r\n often as feels useful.\\n\\nFacilitators:\\n\\nJaimie Lyons\\, LCSW\\n\\nAmy Fried\r\n man\\, LMFT\r\nDTEND:20260319T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Parenting Teens: Drop-in Support Group\r\nUID:tag:localist.com\\,2008:EventInstance_51835513926498\r\nURL:https://events.stanford.edu/event/parenting-teens-drop-in-support-group\r\n -4036\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260320T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764715106\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Workshop\r\nDESCRIPTION:Explore the key social skills children need to build strong\\, l\r\n asting friendships. This workshop covers how genders  may differ in social \r\n development\\, how to teach conflict resolution\\, and ways parents can suppo\r\n rt their children in navigating peer relationships with confidence and empa\r\n thy.\\n\\n \\n\\nThis workshop is geared towards parents of children in element\r\n ary school\\, though all are welcome to attend. This session will not be rec\r\n orded.\r\nDTEND:20260320T003000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260319T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Helping Kids With Friendships\r\nUID:tag:localist.com\\,2008:EventInstance_51269957752502\r\nURL:https://events.stanford.edu/event/helping-kids-with-friendships\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294368691\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355523574\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:At-status enrollment deadline in order to receive stipend or financ\r\n ial aid refund within the first week of term.\r\nUID:tag:localist.com\\,2008:EventInstance_49464232311948\r\nURL:https://events.stanford.edu/event/at-status-enrollment-deadline-in-orde\r\n r-to-receive-stipend-or-financial-aid-refund-within-the-first-week-of-term-\r\n 1740\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249815488\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463585775536\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-1029\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The first of three bills generated for the spring quarter is du\r\n e for all undergraduate students. This includes tuition\\, mandatory and cou\r\n rse fees\\, updates or changes to housing and dining\\, and other student fee\r\n s.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:First Spring Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720288470\r\nURL:https://events.stanford.edu/event/first-spring-quarter-bill-due-for-und\r\n ergraduate-students-8612\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Match Day.\r\nUID:tag:localist.com\\,2008:EventInstance_49463592041971\r\nURL:https://events.stanford.edu/event/match-day-6135\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353988685\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to meet the at-status enrollment to receiv\r\n e a stipend or financial aid refund within the first week of the term.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: At-Status Enrollment Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472523489179\r\nURL:https://events.stanford.edu/event/spring-quarter-at-status-enrollment-d\r\n eadline-6008\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294731089\r\nURL:https://events.stanford.edu/event/winter-quarter-end-quarter-examinatio\r\n ns-3927\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260320\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472294403396\r\nURL:https://events.stanford.edu/event/winter-quarter-law-school-examination\r\n s-9429\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260321T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098409844\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260321T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910835925\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260321T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382794937\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Empowered Relief® is an evidence-based\\, single-session pain cl\r\n ass that rapidly equips patients with pain management skills. Developed at \r\n Stanford University.\\n\\nEmpowered Relief® was developed by Beth Darnall\\, P\r\n hD\\, and has been embedded into clinical pathways at Stanford University si\r\n nce 2013. Early positive scientific results led to major NIH funding to fur\r\n ther study the benefits and mechanisms of the single-session pain relief cl\r\n ass. In August 2021\\, JAMA Network Open published results for the NIH-funde\r\n d randomized trial conducted in adults with chronic low back pain (read the\r\n  full scientific report here). Findings suggest that the single-session cla\r\n ss conferred broad and clinically meaningful benefits across multiple outco\r\n mes at 3 months post-treatment (pain intensity\\, pain interference\\, pain c\r\n atastrophizing\\, pain bothersomeness\\, anxiety\\, depression\\, sleep disturb\r\n ance\\, and fatigue). Pragmatic comparative effectiveness studies are planne\r\n d for 2025.\\n\\nEmpowered Relief® is manualized\\, research-grade\\, and ready\r\n  for immediate implementation into your clinic or research study.\\n\\nEmpowe\r\n red Relief® may only be delivered by certified instructors.\\n\\nLicensed hea\r\n lthcare clinicians of any discipline may join our two-day workshop and beco\r\n me a certified Empowered Relief instructor.\\n\\nPlease visit the Empowered R\r\n elief® Clinician Certification webpage for details regarding the CME approv\r\n ed for this workshop.\r\nDTEND:20260320T233000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Empowered Relief® Instructor Certification CME Workshop: March 19-2\r\n 0\r\nUID:tag:localist.com\\,2008:EventInstance_51064577947571\r\nURL:https://events.stanford.edu/event/empowered-relief-instructor-certifica\r\n tion-cme-workshop-march2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260320T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802453250\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260320T193000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699835580\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for this month's Center for Sleep and Circadian \r\n Sciences William C. Dement Seminar Series!\\n\\n\"Molecular and Circuit Mechan\r\n isms Mediating Sleep Homeostasis\"\\n\\nFriday\\, March 20th\\, 2026 at 12pm PST\r\n \\n\\nMark Wu\\, M.D.\\, Ph.D.\\nProfessor of Neurology\\, Johns Hopkins School o\r\n f Medicine \\n\\nLocation: Shriram Center for Bioengineering and Chemical Eng\r\n ineering\\, Room 262 (443 Via Ortega\\, Stanford\\, CA 94305)\\n\\nZoom link (if\r\n  unable to attend in person): https://stanford.zoom.us/j/99004753637?pwd=RW\r\n VUem1FbTNneFhlVFF1Z0l6Mi90UT09\r\nDTEND:20260320T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T190000Z\r\nGEO:37.429138;-122.17552\r\nLOCATION:Shriram Center\\, Room 262 \r\nSEQUENCE:0\r\nSUMMARY:CSCS William C. Dement Seminar Series: \"Molecular and Circuit Mecha\r\n nisms Mediating Sleep Homeostasis\" with Dr. Mark Wu\r\nUID:tag:localist.com\\,2008:EventInstance_51933491345853\r\nURL:https://events.stanford.edu/event/cscs-william-c-dement-seminar-series\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Did you know that fatigue\\, muscle aches\\, joint stiffness\\, an\r\n d weight gain or loss can be common symptoms of chronic inflammation? While\r\n  these symptoms can have many causes\\, chronic low-level inflammation is in\r\n creasingly recognized as one potential contributor.\\n\\nInflammation is a vi\r\n tal part of the immune system's response to injury and infection. However\\,\r\n  when the inflammatory response goes on too long or shows up where it's not\r\n  needed\\, it can become problematic. This type of inflammation - called chr\r\n onic low-level inflammation - has been linked to health conditions includin\r\n g heart disease\\, certain types of cancer\\, cardio-respiratory disease\\, di\r\n abetes\\, and obesity.\\n\\nIn this engaging\\, evidence-based webinar\\, you wi\r\n ll learn relevant research related to the causes of low-level chronic infla\r\n mmation and how lifestyle choices such as nutrition\\, movement\\, sleep\\, an\r\n d reframing stress can protect us from this type of \"inflammation gone awry\r\n .\" Walk away with an action plan of 1-2 changes you can make in your daily \r\n life to minimize your risk of low-level chronic inflammation and improve yo\r\n ur health and well-being.\\n\\nThis class will be recorded and a one-week lin\r\n k to the recording will be shared with all registered participants. To rece\r\n ive incentive points\\, attend at least 80% of the live session or listen to\r\n  the entire recording within one week.  Request disability accommodations a\r\n nd access info.\\n\\nClass details are subject to change.\r\nDTEND:20260320T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Chronic Inflammation\r\nUID:tag:localist.com\\,2008:EventInstance_51388531746619\r\nURL:https://events.stanford.edu/event/chronic-inflammation-1610\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:SDRC Friday Seminar Talk\\, Friday\\, 03/20/26\\n\\nRyan Hart\\nPh.D\r\n . candidate\\, Huising Lab\\, Biochemistry\\, Molecular\\, Cellular & Developme\r\n ntal Biology program\\, University of California\\, Davis\r\nDTEND:20260320T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T190000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, B302\r\nSEQUENCE:0\r\nSUMMARY:SDRC Friday Seminar - Ryan Hart (UC Davis)\r\nUID:tag:localist.com\\,2008:EventInstance_52251526381798\r\nURL:https://events.stanford.edu/event/sdrc-friday-seminar-ryan-hart-uc-davi\r\n s\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260320T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682840986\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event is sponsored by the Center for South Asia.\\n\\nPlease\r\n  join us for an information session led by Dr. Gautam Bhan\\, Associate Dean\r\n  and Associate Professor\\, IIHS University\\, to learn more about opportunit\r\n ies and the application process.\\n\\nAbout the Speaker\\nGautam Bhan is an ur\r\n banist whose work focuses on urban poverty\\, inequality\\, social protection\r\n  and housing. He is currently Associate Dean\\, IIHS School of Human Develop\r\n ment\\, as well as Senior Lead\\, Academics & Research\\, at IIHS.\\n\\nGautam’s\r\n  previous research has focused on evictions\\, citizenship and inequality in\r\n  Delhi\\, and at IIHS\\, he continues to work on questions of access to affor\r\n dable and adequate housing. He anchors IIHS’ role as a National Resource Ce\r\n ntre with the Ministry of Housing and Urban Affairs\\, Government of India. \r\n He is also a part of IIHS’ work in affordable housing policy and practice\\,\r\n  having worked with housing rights movements across the country as well as \r\n state governments in Karnataka\\, Delhi\\, Rajasthan and Odisha. His new work\r\n  engages with regimes of urban welfare and social security\\, including work\r\n  on urban health. At the School of Human Development\\, he is building resea\r\n rch and practice on questions of the design and delivery of social protecti\r\n on entitlements within urban India. He also has a deep and abiding interest\r\n  in new urban and planning theory from the South.\\n\\nHe is the author of In\r\n  the Public’s Interest: Evictions\\, Citizenship and Inequality in Contempor\r\n ary Delhi (University of Georgia Press\\, 2017\\; Orient BlackSwan\\, 2017)\\, \r\n co-editor of the Routledge Companion to Planning in the Global South (Routl\r\n edge\\, 2018\\; Orient BlackSwan\\, 2019)\\, co-author of Swept off the Map: Su\r\n rviving Eviction and Resettlement in Delhi (Yoda Press\\, 2008)\\, and co-edi\r\n tor of Because I have a Voice: Queer Politics in India (Yoda Press\\, 2006)\\\r\n , in addition to numerous academic articles. He also writes frequently in p\r\n ublic intellectual spaces. He holds a PhD in urban studies and planning fro\r\n m the University of California\\, Berkeley.\\n\\nThe Indian Institute for Huma\r\n n Settlements (IIHS) is committed to the equitable\\, sustainable and effici\r\n ent transformation of Indian settlements. It does this through interdiscipl\r\n inary teaching\\, applied research and capacity development for a new genera\r\n tion of urban practitioners. Based in Bengaluru\\, India\\, the University cu\r\n rrently offers academic programmes leading to post graduate and PhD degrees\r\n .\\n\\nIIHS is currently recruiting faculty and postdoctoral scholars (at pre\r\n sent\\, these positions are limited to Indian citizens).\r\nDTEND:20260321T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260320T223000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Gautam Bhan | Transforming Urban India: An Introduction to IIHS Uni\r\n versity\r\nUID:tag:localist.com\\,2008:EventInstance_52198142639258\r\nURL:https://events.stanford.edu/event/gautam-bhan-transforming-urban-india-\r\n an-introduction-to-iihs-university\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260321\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294369716\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260321\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355524599\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260321\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353989710\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the move out date for undergraduates not enrolled i\r\n n spring quarter.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260321\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Undergraduate Housing Move-Out\r\nUID:tag:localist.com\\,2008:EventInstance_50472523581348\r\nURL:https://events.stanford.edu/event/winter-quarter-undergraduate-housing-\r\n move-out\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:A one-day\\, in person conference for parents\\, educators\\, and \r\n care providers of children and adults with autism or developmental disorder\r\n s. Our annual update focuses on new research and services for autistic indi\r\n viduals and those with developmental disorders to optimize their long term \r\n functioning.\\n\\nIn-person at Li Ka Shing Conference Center\\, Stanford.\r\nDTEND:20260321T233000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T160000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\r\nSEQUENCE:0\r\nSUMMARY:19th Annual Autism Updates\r\nUID:tag:localist.com\\,2008:EventInstance_51392356428469\r\nURL:https://events.stanford.edu/event/19th-annual-autism-updates\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260322T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098410869\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260322T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910836950\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260321T183000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078572471\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260321T193000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699836605\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260321T203000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691965218\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260321T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682843035\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260321T223000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260321T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708330261\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260322\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294370741\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260322\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355525624\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260322\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353990735\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:Today Axess and other ERP systems may be unavailable due to the\r\n  maintenance window.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260322\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:UIT Extended Maintenance Window\r\nUID:tag:localist.com\\,2008:EventInstance_50472523679661\r\nURL:https://events.stanford.edu/event/uit-extended-maintenance-window-4231\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260322\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:UIT Extended Maintenance Window\\; Axess and other ERP systems may b\r\n e unavailable.\r\nUID:tag:localist.com\\,2008:EventInstance_49463599355022\r\nURL:https://events.stanford.edu/event/uit-extended-maintenance-window-axess\r\n -and-other-erp-systems-may-be-unavailable-9783\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260323T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098410870\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260323T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910836951\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260322T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809526642\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Season of Lent: Lent is the forty-day period (excluding Sundays\r\n ) of prayer\\, repentance and self-denial that precedes Easter.\\n\\nUniversit\r\n y Public Worship gathers weekly for the religious\\, spiritual\\, ethical\\, a\r\n nd moral formation of the Stanford community. Rooted in the history and pro\r\n gressive Christian tradition of Stanford’s historic Memorial Church\\, we cu\r\n ltivate a community of compassion and belonging through ecumenical Christia\r\n n worship and occasional multifaith celebrations.\r\nDTEND:20260322T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Season of Lent Ecumenical Christian Serv\r\n ice \r\nUID:tag:localist.com\\,2008:EventInstance_51958449965513\r\nURL:https://events.stanford.edu/event/upw-lent-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260322T193000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543406116\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260322T203000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691968291\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260322T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682845084\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260322T223000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260322T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708331286\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260323\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249818561\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260323\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353991760\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260324T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51533402061128\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-2386\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260324T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098411895\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260324T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910837976\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260324T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382796986\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:This is a disability-affirming discussion group for staff\\, fac\r\n ulty\\, and post-docs co-sponsored by the Disability Staff Forum and the Fac\r\n ulty Staff Help Center. The group aims to create a space for disabled commu\r\n nity members to connect and talk about topics of interest\\, moments of exci\r\n tement\\, and challenges they are facing. The group centers the experience o\r\n f disabled individuals\\, while being open to all. You do not have to be ADA\r\n  Disabled™ to join this group. \\n\\nFacilitators:\\n\\nKaren Carrie\\, LMFT\\, F\r\n SHC staff clinician\\n\\nAmy Friedman\\, LMFT\\, FSHC staff clinician\r\nDTEND:20260323T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Disability Conversations With Community\r\nUID:tag:localist.com\\,2008:EventInstance_52182885439546\r\nURL:https://events.stanford.edu/event/disability-conversations-with-communi\r\n ty-co-sponsored-by-the-disability-staff-forum-and-the-faculty-staff-help-ce\r\n nter\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The past year has roiled the social sector. The assumption that\r\n  government is a reliable partner for philanthropies and their visions of i\r\n mpact\\, effectiveness\\, and scale has been thrown into doubt. It is time fo\r\n r the sector to rethink its tendency toward monoculture and embrace the div\r\n erse motivations and values that ensure its relevance and sustainability.\\n\r\n \\nIn this live conversation\\, SSIR deputy editor David Johnson speaks with \r\n Ari Simon\\, author of SSIR’s Spring 2026 feature story\\, “What Else Can I D\r\n o? The Thirteen Intentions of Philanthropy.” They will critically examine t\r\n he prevailing norms of philanthropic practice today and explore a more plur\r\n alistic model for understanding the reasons for giving. They will also take\r\n  questions from the audience.\\n\\nSign up to join us on Monday\\, March 23\\, \r\n at 11 a.m. PST.\\n\\n \\n\\nAbout the SSIR Author\\n\\nAri Simon is the President\r\n  of Tambourine\\, a Giving Pledge philanthropy. He was previously Head of So\r\n cial Impact & Philanthropy at Pinterest and Vice President\\, Chief Program \r\n & Strategy Officer at the Kresge Foundation. He is based in Venice\\, CA.\r\nDTEND:20260323T184500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The 13 Intentions of Philanthropy: An SSIR Author Conversation\r\nUID:tag:localist.com\\,2008:EventInstance_52179143425777\r\nURL:https://events.stanford.edu/event/13-intentions-of-philanthropy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour,Lecture/Presentation/Talk\r\nDESCRIPTION:Join Trisha Lagaso Goldberg\\, Director of Programs and Engageme\r\n nt at the Anderson Collection\\, on this special tour of Spotlights. \\n\\nThe\r\n  Anderson Collection debuts spotlight installations of two celebrated artis\r\n ts—Susan Rothenberg and Robert Therrien. For the first time\\, visitors can \r\n experience focused presentations of their work at the museum\\, with multipl\r\n e pieces by each artist brought into focus in dedicated gallery spaces. Fro\r\n m Rothenberg’s dynamic figuration to Therrien’s playful graphic and sculptu\r\n ral forms\\, these spotlights showcase the power and range of modern and con\r\n temporary American art.\\n\\nRSVP here.\r\nDTEND:20260323T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, Upstairs Galleries\r\nSEQUENCE:0\r\nSUMMARY:Curator Talk | Spotlights with Trisha Lagaso Goldberg\r\nUID:tag:localist.com\\,2008:EventInstance_51305060873210\r\nURL:https://events.stanford.edu/event/March-curator-talk-spotlights-with-Tr\r\n isha-Lagaso-Goldberg-\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:*CLICK HERE TO RSVP*\\n\\nJoin Queer University Employees at Stan\r\n ford (QUEST)\\, the LGBTQ+ Health Program\\, and the Stanford Medicine Pride \r\n & Allies ERG for a viewing party of Heightened Scrutiny.\\n\\n\"Heightened Scr\r\n utiny\" follows Chase Strangio\\, ACLU attorney and the first out trans perso\r\n n to argue before the Supreme Court\\, as he fights a high-stakes legal batt\r\n le to overturn Tennessee’s ban on gender-affirming care for transgender you\r\n th (United States v. Skrmetti).\\n\\nSnacks will be provided. We hope to see \r\n you there!\\n\\nWhen: March 23rd (Mon)\\, 4:30-7:00pm\\nWhere (Hybrid Event):\\n\r\n **In-person: Center for Academic Medicine (453 Quarry Road\\, Stanford)\\n**V\r\n irtual via Zoom (Zoom link will be provided to registrants prior to the eve\r\n nt)\\n\\nAgenda:\\n\\n4:30 pm | Welcome! Mix and mingle.\\n\\n5:10 pm | Film scre\r\n ening begins (run time is 1hr 25min)\\n\\n6:40 pm | Reflections and refreshme\r\n nts\\n\\n7:00 pm | See you next time!\r\nDTEND:20260324T020000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260323T233000Z\r\nGEO:37.43707;-122.17173\r\nLOCATION:Center for Academic Medicine (453 Quarry Road\\, Stanford)\r\nSEQUENCE:0\r\nSUMMARY:Heightened Scrutiny Film Screening\r\nUID:tag:localist.com\\,2008:EventInstance_52215857242629\r\nURL:https://events.stanford.edu/event/heightened-scrutiny-film-screening\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260324\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grades due (11:59 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463604115810\r\nURL:https://events.stanford.edu/event/grades-due-1159-pm-552\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260324\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353992785\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grades for the quarter.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260324\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Grades Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472523775927\r\nURL:https://events.stanford.edu/event/winter-quarter-grades-due-2586\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260325T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T150000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 139\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Main Campus\\, Huang Bldg\\, Room\r\n  139) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51533409638181\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-main-campus-huang-bldg-room-139-by-appointment-only-3717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The 2026 Stanford Cancer Institute Research Conference (formerl\r\n y the Stanford Cancer Institute Retreat) is a scientific event that is desi\r\n gned to connect Stanford Cancer Institute members\\, staff\\, and trainees\\, \r\n as well as the broader Stanford community\\, to share innovations in Stanfor\r\n d cancer research and foster meaningful collaboration.\\n\\nJoin us Tuesday\\,\r\n  March 24\\, 2026\\, at Berg Hall\\, Li Ka Shing Center\\, to engage in scienti\r\n fic talks\\, breakout sessions\\, poster presentations\\, and an annual update\r\n  from Steven Artandi\\, MD\\, PhD\\, director of the Stanford Cancer Institute\r\n . Following the conference\\, a reception will allow both familiar faces and\r\n  new colleagues to connect\\, exchange ideas\\, and strengthen collaborations\r\n . \\n\\nThe event is open to Stanford Cancer Institute members\\, postdocs\\, f\r\n ellows\\, residents\\, and students\\, as well as Stanford University and Stan\r\n ford Medicine faculty\\, trainees\\, and staff.\\n\\nRegistration is encouraged\r\n .\\n\\nPoster Session\\n\\nStanford Cancer Institute members\\, students\\, postd\r\n ocs\\, residents\\, fellows\\, and staff are invited to participate in the pos\r\n ter sessions. Submit your abstract through the registration form by March 1\r\n 6 to showcase your research to Stanford faculty.\r\nDTEND:20260325T003000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T150000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, Berg Hall\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Research Conference\r\nUID:tag:localist.com\\,2008:EventInstance_50879088217649\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-research-co\r\n nference\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260325T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098412920\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260325T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910839001\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260325T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382799035\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:GradCDI provides graduate students and postdoctoral scholars wi\r\n th the opportunity to design a course plan and draft syllabus using evidenc\r\n e-based frameworks. In GradCDI\\, you will explore course design approaches \r\n that foster inclusion and support students from diverse backgrounds in high\r\n er education.\\n\\nThere is no prerequisite for this intensive learning exper\r\n ience. GradCDI participants will reflect diverse levels of skill and knowle\r\n dge in course design.\\n\\nApplications are due Friday\\, February 20\\, 2026 b\r\n y 5:00 p.m.\\n\\nGradCDI will take place over spring break 2026. Required in-\r\n person meetings will be held March 24–27\\, 9:30am–4pm at Lathrop Library.\\n\r\n \\nHere’s what past participants have to say:\\n\\nThis is an incredible oppor\r\n tunity to travel into the world of re-imaging how classes in higher educati\r\n on can be taught. You will learn about several big-picture concepts and als\r\n o lots of practical tips that can be incorporated into the classroom. Well \r\n worth your time.I WILL tell my peers that if they are vaguely interested in\r\n  teaching\\, or if they are planning for an academic career\\, they HAVE to t\r\n ake this course. Really. It's so important\\, I feel it should be basically \r\n a requirement for anyone planning to teach.I made a lot of progress on deve\r\n loping my course\\, left with many more questions and topics I wanted to exp\r\n lore\\, and got renewed excitement about teaching and course design because \r\n going on this journey with a community makes it much less overwhelming.Cont\r\n act Nakisha Whittington at nakishaw@stanford.edu for more information or to\r\n  request accommodations.\r\nDTEND:20260324T230000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T163000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\r\nSEQUENCE:0\r\nSUMMARY:Course Design Institute for Graduate Students and Postdoctoral Scho\r\n lars (GradCDI) 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51757136676314\r\nURL:https://events.stanford.edu/event/copy-of-course-design-institute-for-g\r\n raduate-students-and-postdoctoral-scholars-gradcdi-2025\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This webinar examines the interwar wargames conducted at the U.\r\n S. Naval War College before World War II and their foundational role in sha\r\n ping U.S. naval doctrine and strategic planning. We will explore how these \r\n games contributed to America’s success in the Pacific Theater\\, their endur\r\n ing impact on U.S. military effectiveness\\, and the remarkable archival mat\r\n erials preserved by the Naval War College\\, now digitally accessible to the\r\n  public for the first time via the Hoover Library & Archives.\r\nDTEND:20260324T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Wargaming the Pacific:  Lessons from the Naval War  College's Inter\r\n war Games\r\nUID:tag:localist.com\\,2008:EventInstance_52266671517747\r\nURL:https://events.stanford.edu/event/wargaming-the-pacific-lessons-from-th\r\n e-naval-war-colleges-interwar-games\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260324T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260324T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491615641\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260325T013000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663080883\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260325\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294374840\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260325\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355527673\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Branner Earth Sciences Library & Map Collection exhibit series:\r\n  Oceans\\n\\nIn the 2025–2026 academic year\\, Branner Library’s exhibit serie\r\n s will explore Earth’s oceans’ complex biological and ecological systems th\r\n at regulate climate and support life.\\n\\nMarch’s exhibition explores how th\r\n e physical properties of seawater\\, large-scale circulation systems\\, and d\r\n ynamic air–sea exchanges regulate Earth’s climate system\\, redistribute hea\r\n t and carbon across the globe\\, and inform pressing environmental and socie\r\n tal questions in an era of accelerating change.\\n\\nThe exhibition features \r\n print books\\, maps\\, and e-resources\\, providing a range of resources for u\r\n ndergraduate and graduate students\\, as well as specialists working in the \r\n field of ocean physics.\\n\\nThe exhibit is available for viewing Monday thro\r\n ugh Friday during regular library open hours. \\nCheck out past exhibits and\r\n  subscribe to the Branner Library Newsletter.  \\n\\nA current Stanford ID is\r\n  needed to enter the library\\, visitors must present a valid\\, physical gov\r\n ernment-issued photo ID to sign-in at the front desk.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260325\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library & Map Col\r\n lections\r\nSEQUENCE:0\r\nSUMMARY:Branner Library Monthly Book & Map Exhibit - Ocean Physics\r\nUID:tag:localist.com\\,2008:EventInstance_52241249819586\r\nURL:https://events.stanford.edu/event/branner-library-monthly-book-map-exhi\r\n bit-ocean-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260325\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353993810\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260326T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51533415619293\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-5736\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260326T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098413945\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260326T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910840026\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:CAS IHAWG brings together graduate students across humanities d\r\n isciplines for sustained\\, collective writing and scholarly exchange. Hoste\r\n d by the Center for African Studies\\, the group meets weekly to combine dis\r\n ciplined co-writing sessions with peer-led workshops and a speaker series t\r\n hat showcases Africanist humanities research. We foster an encouraging\\, pr\r\n oductive environment where members share work-in-progress\\, troubleshoot wr\r\n iting challenges\\, and celebrate milestones in their research. Who should c\r\n onsider joining:\\n\\nGraduate students whose research engages Africa or the \r\n African diaspora in humanities fields\\, including DAAAS/DLCL and other area\r\n  studies\\, art and art history\\, film and media\\, comparative literature\\, \r\n CCSRE\\, education\\, English\\, feminist and gender studies\\, musicology\\, ph\r\n ilosophy\\, linguistics\\, religious studies\\, and theater/performance studie\r\n s. Interdisciplinary and cross-departmental participation is strongly encou\r\n raged.\\n\\nAttendance can be regular or occasional to accommodate academic s\r\n chedules.\\n\\nClick here to receive meeting notices and event updates. \\n\\nF\r\n or questions\\, contact Mpho (mmolefe@stanford.edu) or Seyi (jesuseyi@stanfo\r\n rd.edu).\\n\\nWe welcome you to join our writing community.\r\nDTEND:20260325T183000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T160000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 127\r\nSEQUENCE:0\r\nSUMMARY:Interdisciplinary Humanities Africanist Writing Group (IHAWG)\r\nUID:tag:localist.com\\,2008:EventInstance_52153415606016\r\nURL:https://events.stanford.edu/event/interdisciplinary-humanities-africani\r\n st-writing-group-ihawg\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260325T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105022078\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260326T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382802108\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:GradCDI provides graduate students and postdoctoral scholars wi\r\n th the opportunity to design a course plan and draft syllabus using evidenc\r\n e-based frameworks. In GradCDI\\, you will explore course design approaches \r\n that foster inclusion and support students from diverse backgrounds in high\r\n er education.\\n\\nThere is no prerequisite for this intensive learning exper\r\n ience. GradCDI participants will reflect diverse levels of skill and knowle\r\n dge in course design.\\n\\nApplications are due Friday\\, February 20\\, 2026 b\r\n y 5:00 p.m.\\n\\nGradCDI will take place over spring break 2026. Required in-\r\n person meetings will be held March 24–27\\, 9:30am–4pm at Lathrop Library.\\n\r\n \\nHere’s what past participants have to say:\\n\\nThis is an incredible oppor\r\n tunity to travel into the world of re-imaging how classes in higher educati\r\n on can be taught. You will learn about several big-picture concepts and als\r\n o lots of practical tips that can be incorporated into the classroom. Well \r\n worth your time.I WILL tell my peers that if they are vaguely interested in\r\n  teaching\\, or if they are planning for an academic career\\, they HAVE to t\r\n ake this course. Really. It's so important\\, I feel it should be basically \r\n a requirement for anyone planning to teach.I made a lot of progress on deve\r\n loping my course\\, left with many more questions and topics I wanted to exp\r\n lore\\, and got renewed excitement about teaching and course design because \r\n going on this journey with a community makes it much less overwhelming.Cont\r\n act Nakisha Whittington at nakishaw@stanford.edu for more information or to\r\n  request accommodations.\r\nDTEND:20260325T230000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T163000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\r\nSEQUENCE:0\r\nSUMMARY:Course Design Institute for Graduate Students and Postdoctoral Scho\r\n lars (GradCDI) 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51757136677339\r\nURL:https://events.stanford.edu/event/copy-of-course-design-institute-for-g\r\n raduate-students-and-postdoctoral-scholars-gradcdi-2025\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for our March Manager Forums as Dr. Meghan Imrie\\, MD\\,\r\n  Clinical Assistant Professor of Orthopaedic Surgery\\, leads a powerful con\r\n versation on what may be the most overlooked lever of leadership: behavior.\r\n  \\n\\n \\n\\nIn high-stakes environments like orthopedic surgery training\\, te\r\n chnical excellence is expected. But what truly determines trust\\, professio\r\n nalism and team culture are the non-technical skills: the behaviors leaders\r\n  model and reinforce. \\n\\n \\n\\nDr. Imrie will challenge us to examine: \\n\\n\r\n What specific behaviors earn and maintain the public’s trust Whether profes\r\n sionalism can truly be taught\\, or simply selected for  \\n\\nThe central que\r\n stion: Can (and should) we own the B?\\n\\n \\n\\nWhether you lead in a clinic\\\r\n , lab\\, classroom\\, or campus office\\, this session will push you to reflec\r\n t on how behavior ultimately defines your team’s culture.If you care about \r\n accountability\\, credibility\\, and the standards you want your team to live\r\n  by\\, this conversation is for you.\\n\\n \\n\\nJoin us for what promises to be\r\n  a candid and thought-provoking session.\r\nDTEND:20260325T180000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Can (and Should) we “Own the ‘B’”?\r\nUID:tag:localist.com\\,2008:EventInstance_52241306337593\r\nURL:https://events.stanford.edu/event/can-and-should-we-own-the-b\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Need help setting up your Canvas course or have questions about\r\n  Canvas? We are offering Canvas sessions via Zoom. *Must access Zoom and au\r\n thenticate utilizing your Stanford email account. Passcode: 031743 Meeting \r\n ID: 948 2797 4676\\n\\nBasic Canvas Overview: \\n\\nWednesday\\, March 25th @10a\r\n mThursday\\, March 26th @10amWednesday\\, April 1st @10amThursday\\, April 2nd\r\n  @10am Can’t attend?  Please check out our Canvas First Steps and Tips and \r\n explore our Teaching with Canvas resources for ideas to save time\\, enhance\r\n  student engagement\\, and support collaboration.\\n\\nNote: Not for Continuin\r\n g Studies or the School of Medicine faculty.  For SoM\\, contact medcanvas@s\r\n tanford.edu. For Continuing Studies\\, contact continuingstudies@stanford.ed\r\n u.\r\nDTEND:20260325T180000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring 2026 Canvas Overview Sessions\r\nUID:tag:localist.com\\,2008:EventInstance_52066155430718\r\nURL:https://events.stanford.edu/event/spring-2026-canvas-overview-sessions\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260326T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260325T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743781333\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260326\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294376889\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260326\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355528698\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260326\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Final Recommending Lists due (5 p.m.)\r\nUID:tag:localist.com\\,2008:EventInstance_49463608960845\r\nURL:https://events.stanford.edu/event/final-recommending-lists-due-5-pm-947\r\n 4\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260326\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353993811\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (at 5 p.m.) to submit the final recommendi\r\n ng lists.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260326\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Final Recommending Lists Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472523862975\r\nURL:https://events.stanford.edu/event/winter-quarter-final-recommending-lis\r\n ts-due-3898\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Please note: SLAC onsite appointments are for SLAC Active Staff\r\n  only due to security access reasons.\\n\\nDid you know that advisors from Fi\r\n delity Investments and TIAA provide free individual financial counseling on\r\n  campus at your convenience? They can offer guidance on the best strategy t\r\n o meet your retirement goals through Stanford's retirement savings plans.\\n\r\n \\nContact Fidelity directly to schedule an appointment with a representativ\r\n e to review your current and future retirement savings options:\\n\\nFidelity\r\n  appointment scheduler(800) 642-7131\r\nDTEND:20260327T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T153000Z\r\nGEO:37.419892;-122.205244\r\nLOCATION:SLAC National Accelerator Laboratory\\, Bldg 53\\, Conference Room 4\r\n 050 (Room 053-4050\\, Yosemite Conf Room)\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (SLAC Campus\\, Bldg 53\\, Room 40\r\n 50) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51887178571834\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-slac-campus-bldg-53-room-4050-by-appointment-only-1956\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260327T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098414970\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260327T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910841051\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260327T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382804157\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:GradCDI provides graduate students and postdoctoral scholars wi\r\n th the opportunity to design a course plan and draft syllabus using evidenc\r\n e-based frameworks. In GradCDI\\, you will explore course design approaches \r\n that foster inclusion and support students from diverse backgrounds in high\r\n er education.\\n\\nThere is no prerequisite for this intensive learning exper\r\n ience. GradCDI participants will reflect diverse levels of skill and knowle\r\n dge in course design.\\n\\nApplications are due Friday\\, February 20\\, 2026 b\r\n y 5:00 p.m.\\n\\nGradCDI will take place over spring break 2026. Required in-\r\n person meetings will be held March 24–27\\, 9:30am–4pm at Lathrop Library.\\n\r\n \\nHere’s what past participants have to say:\\n\\nThis is an incredible oppor\r\n tunity to travel into the world of re-imaging how classes in higher educati\r\n on can be taught. You will learn about several big-picture concepts and als\r\n o lots of practical tips that can be incorporated into the classroom. Well \r\n worth your time.I WILL tell my peers that if they are vaguely interested in\r\n  teaching\\, or if they are planning for an academic career\\, they HAVE to t\r\n ake this course. Really. It's so important\\, I feel it should be basically \r\n a requirement for anyone planning to teach.I made a lot of progress on deve\r\n loping my course\\, left with many more questions and topics I wanted to exp\r\n lore\\, and got renewed excitement about teaching and course design because \r\n going on this journey with a community makes it much less overwhelming.Cont\r\n act Nakisha Whittington at nakishaw@stanford.edu for more information or to\r\n  request accommodations.\r\nDTEND:20260326T230000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T163000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\r\nSEQUENCE:0\r\nSUMMARY:Course Design Institute for Graduate Students and Postdoctoral Scho\r\n lars (GradCDI) 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51757136678364\r\nURL:https://events.stanford.edu/event/copy-of-course-design-institute-for-g\r\n raduate-students-and-postdoctoral-scholars-gradcdi-2025\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Need help setting up your Canvas course or have questions about\r\n  Canvas? We are offering Canvas sessions via Zoom. *Must access Zoom and au\r\n thenticate utilizing your Stanford email account. Passcode: 031743 Meeting \r\n ID: 948 2797 4676\\n\\nBasic Canvas Overview: \\n\\nWednesday\\, March 25th @10a\r\n mThursday\\, March 26th @10amWednesday\\, April 1st @10amThursday\\, April 2nd\r\n  @10am Can’t attend?  Please check out our Canvas First Steps and Tips and \r\n explore our Teaching with Canvas resources for ideas to save time\\, enhance\r\n  student engagement\\, and support collaboration.\\n\\nNote: Not for Continuin\r\n g Studies or the School of Medicine faculty.  For SoM\\, contact medcanvas@s\r\n tanford.edu. For Continuing Studies\\, contact continuingstudies@stanford.ed\r\n u.\r\nDTEND:20260326T180000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring 2026 Canvas Overview Sessions\r\nUID:tag:localist.com\\,2008:EventInstance_52066155431743\r\nURL:https://events.stanford.edu/event/spring-2026-canvas-overview-sessions\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Event Details\\n\\nJoin Maggie Dethloff\\, Assistant Curator of Ph\r\n otography and New Media\\, on this special highlights tour of Animal\\, Veget\r\n able\\, nor Mineral: Works by Miljohn Ruperto\\, the first large-scale solo m\r\n useum exhibition of Manila-born\\, Los Angeles-based artist Miljohn Ruperto \r\n (b. 1971).  RSVP HERE\\n\\nWorking across photography\\, video\\, animation\\, g\r\n enerative artificial intelligence\\, and other mediums\\, Ruperto explores th\r\n e ways humans have understood their place in the world. From digitally-crea\r\n ted fantastical botanical specimens printed as gelatin silver photographs t\r\n o immersive apocalyptic landscapes experienced in VR\\, Ruperto’s artworks h\r\n ighlight the elusiveness of knowledge and unsettle what we think we know ab\r\n out nature.\\n\\nAnimal\\, Vegetable\\, nor Mineral: Works by Miljohn Ruperto i\r\n s organized by the Cantor Arts Center and curated by Maggie Dethloff\\, Assi\r\n stant Curator of Photography and New Media.This exhibition is presented in \r\n conjunction with the museum’s Asian American Art Initiative (AAAI)\\n\\nAll p\r\n ublic programs at the Cantor Arts Center are always free! Space for this pr\r\n ogram is limited\\; advance registration is recommended.\\n\\n________\\n\\nPark\r\n ing\\n\\nPaid visitor parking is available along Lomita Drive as well as on t\r\n he first floor of the Roth Way Garage Structure\\, located at the corner of \r\n Campus Drive West and Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. F\r\n rom the Palo Alto Caltrain station\\, the Cantor Arts Center is about a 20-m\r\n inute walk or there the free Marguerite shuttle will bring you to campus vi\r\n a the Y or X lines.\\n\\nDisability parking is located along Lomita Drive nea\r\n r the main entrance of the Cantor Arts Center. Additional disability parkin\r\n g is located on Museum Way and in Parking Structure 1 (Roth Way & Campus Dr\r\n ive).\\n\\n________\\n\\nAccessibility Information or Requests\\n\\nCantor Arts C\r\n enter at Stanford University is committed to ensuring our programs are acce\r\n ssible to everyone. To request access information and/or accommodations for\r\n  this event\\, please complete this form at least one week prior to the even\r\n t: museum.stanford.edu/access.\\n\\nFor questions\\, please contact disability\r\n .access@stanford.eduor aguskin@stanford.edu\\n\\n \\n\\nImage: Miljohn Ruperto\\\r\n , What God Hath Wrought (Kairos)\\, from the series The Great Disappointment\r\n \\, in progress. Three animations with VR (color\\, sound). Courtesy of the a\r\n rtist and Micki Meng Gallery\\, San Francisco.\r\nDTEND:20260326T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Freidenrich Family Gallery\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Curator Talk | Animal\\, Vegetable\\, nor Mineral: Works by\r\n  Miljohn Ruperto\r\nUID:tag:localist.com\\,2008:EventInstance_51898898887511\r\nURL:https://events.stanford.edu/event/lunchtime-curator-talk\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join the speaker for coffee\\, cookies\\, and conversation before\r\n  the talk\\, starting at 11:45am.\\n\\nTalk title to be announcedAbstract comi\r\n ng soon\\n\\n \\n\\nTakao Hensch\\, PhDProfessor\\, Molecular & Cellular Biology \r\n Professor\\, Neurology (Children’s Hospital) Director\\, IRCN (UTIAS) Center \r\n for Brain Science Harvard University\\n\\nVisit lab website\\n\\nHosted by Guos\r\n ong Hong (Hong Lab)\\n\\n \\n\\nSign up for Speaker Meet-upsEngagement with our\r\n  seminar speakers extends beyond the lecture. On seminar days\\, invited spe\r\n akers meet one-on-one with faculty members\\, have lunch with a small group \r\n of trainees\\, and enjoy dinner with a small group of faculty and the speake\r\n r's host.\\n\\nIf you’re a Stanford faculty member or trainee interested in p\r\n articipating in these Speaker Meet-up opportunities\\, click the button belo\r\n w to express your interest. Depending on availability\\, you may be invited \r\n to join the speaker for one of these enriching experiences.\\n\\nSpeaker Meet\r\n -ups Interest Form\\n\\n \\n\\nAbout the Wu Tsai Neurosciences Seminar SeriesTh\r\n e Wu Tsai Neurosciences Institute seminar series brings together the Stanfo\r\n rd neuroscience community to discuss cutting-edge\\, cross-disciplinary brai\r\n n research\\, from biochemistry to behavior and beyond.\\n\\nTopics include ne\r\n w discoveries in fundamental neurobiology\\; advances in human and translati\r\n onal neuroscience\\; insights from computational and theoretical neuroscienc\r\n e\\; and the development of novel research technologies and neuro-engineerin\r\n g breakthroughs.\\n\\nUnless otherwise noted\\, seminars are held Thursdays at\r\n  12:00 noon PT.\\n\\nSign up to learn about all our upcoming events\r\nDTEND:20260326T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: Takao Hensch - Talk Title TBA\r\nUID:tag:localist.com\\,2008:EventInstance_50539424072729\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-takao-hensch-ta\r\n lk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260326T200000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T190000Z\r\nGEO:37.431942;-122.176463\r\nLOCATION:Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:ReMS - Bradley Olwin\\, PhD\\, Professor\\, Molecular Cellular & Devel\r\n opmental Biology\\, University of Colorado Boulder \"Talk Title TBA\"\r\nUID:tag:localist.com\\,2008:EventInstance_51518262494078\r\nURL:https://events.stanford.edu/event/rems-bradley-olwin-phd-professor-mole\r\n cular-cellular-developmental-biology-university-of-colorado-boulder-talk-ti\r\n tle-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260326T191500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762180912\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260326T194500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794474264\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260326T220000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491617690\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260327T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743782358\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a free tour of Denning House and explore its treehouse-ins\r\n pired architecture and art collection.\\n\\nBuilt in 2018 specifically to hou\r\n se Knight-Hennessy Scholars\\, Denning House provides an inspiring venue for\r\n  scholars\\, staff\\, and visitors\\, and a magnificent setting for art. A gif\r\n t from Roberta Bowman Denning\\, '75\\, MBA '78\\, and Steve Denning\\, MBA '78\r\n \\, made the building possible. Read more about Denning House in Stanford Ne\r\n ws.\\n\\nTour size is limited. Registration is required to attend a tour of D\r\n enning House.\\n\\nNote: Most parking at Stanford is free of charge after 4 p\r\n m. Denning House is in box J6 on the Stanford Parking Map. Please see Stanf\r\n ord Parking for more information on visitor parking at Stanford. Tours last\r\n  approximately 30 minutes.\r\nDTEND:20260326T233000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260326T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Tour Denning House\\, home to Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51766115375814\r\nURL:https://events.stanford.edu/event/copy-of-tour-denning-house-home-to-kn\r\n ight-hennessy-scholars-3543\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260327\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294377914\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260327\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355529723\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260327\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Deadline for departments to update course grading basis\\, unit\\, an\r\n d/or component configuration for classes offered in summer.\r\nUID:tag:localist.com\\,2008:EventInstance_49463839079729\r\nURL:https://events.stanford.edu/event/deadline-for-departments-to-update-co\r\n urse-grading-basis-unit-andor-component-configuration-for-classes-offered-i\r\n n-summer-1886\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260327\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353994836\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to update grading basis\\, unit\\, and/or co\r\n mponent configuration for Summer classes\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260327\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Deadline to Update Course Configuration\r\nUID:tag:localist.com\\,2008:EventInstance_50472523958216\r\nURL:https://events.stanford.edu/event/summer-quarter-deadline-to-update-cou\r\n rse-configuration\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260328T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T150000Z\r\nGEO:37.445593;-122.162327\r\nLOCATION:Fidelity Office Palo Alto CA\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Fidelity Office in Palo Alto) (\r\n By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51533422837557\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-fidelity-office-in-palo-alto-by-appointment-only-2479\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260328T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098415995\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260328T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910841052\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260328T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382806206\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:GradCDI provides graduate students and postdoctoral scholars wi\r\n th the opportunity to design a course plan and draft syllabus using evidenc\r\n e-based frameworks. In GradCDI\\, you will explore course design approaches \r\n that foster inclusion and support students from diverse backgrounds in high\r\n er education.\\n\\nThere is no prerequisite for this intensive learning exper\r\n ience. GradCDI participants will reflect diverse levels of skill and knowle\r\n dge in course design.\\n\\nApplications are due Friday\\, February 20\\, 2026 b\r\n y 5:00 p.m.\\n\\nGradCDI will take place over spring break 2026. Required in-\r\n person meetings will be held March 24–27\\, 9:30am–4pm at Lathrop Library.\\n\r\n \\nHere’s what past participants have to say:\\n\\nThis is an incredible oppor\r\n tunity to travel into the world of re-imaging how classes in higher educati\r\n on can be taught. You will learn about several big-picture concepts and als\r\n o lots of practical tips that can be incorporated into the classroom. Well \r\n worth your time.I WILL tell my peers that if they are vaguely interested in\r\n  teaching\\, or if they are planning for an academic career\\, they HAVE to t\r\n ake this course. Really. It's so important\\, I feel it should be basically \r\n a requirement for anyone planning to teach.I made a lot of progress on deve\r\n loping my course\\, left with many more questions and topics I wanted to exp\r\n lore\\, and got renewed excitement about teaching and course design because \r\n going on this journey with a community makes it much less overwhelming.Cont\r\n act Nakisha Whittington at nakishaw@stanford.edu for more information or to\r\n  request accommodations.\r\nDTEND:20260327T230000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T163000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\r\nSEQUENCE:0\r\nSUMMARY:Course Design Institute for Graduate Students and Postdoctoral Scho\r\n lars (GradCDI) 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51757136679389\r\nURL:https://events.stanford.edu/event/copy-of-course-design-institute-for-g\r\n raduate-students-and-postdoctoral-scholars-gradcdi-2025\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260328T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817886985\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford University provides the Tuition Grant Program (TGP) to\r\n  help eligible faculty and staff\\, either active or retired\\, pay for the u\r\n ndergraduate education of their eligible child(ren). A TGP overview and Q&A\r\n  session will be held on Friday\\, March 27\\, via Zoom. Whether you are new \r\n to the program or currently enrolled\\, learn more by attending this informa\r\n tion session\\, which includes time for questions and answers.\\n\\nEnroll in \r\n STARS by March 26\\, 2026.\r\nDTEND:20260327T181500Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Tuition Grant Program Q&A Session\r\nUID:tag:localist.com\\,2008:EventInstance_52207804037845\r\nURL:https://events.stanford.edu/event/tuition-grant-program-qa-session\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260327T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802454275\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260327T193000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699838654\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260327T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260327T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682846109\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260328\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294378939\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260328\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355531772\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260328\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353995861\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, housing opens for new undergraduate students. See th\r\n e Residential & Dining Enterprises Calendar for more information.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260328\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Undergraduate Housing Move-In\r\nUID:tag:localist.com\\,2008:EventInstance_50472524045265\r\nURL:https://events.stanford.edu/event/spring-quarter-undergraduate-housing-\r\n move-in\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260329T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098417020\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260329T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910842077\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260328T183000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078573496\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260328T193000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699840703\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:StanfordNext is the university’s long-term plan to meet its fut\r\n ure academic\\, housing\\, transportation\\, sustainability\\, and infrastructu\r\n re needs on existing campus lands. The planning process for StanfordNext wi\r\n ll shape a new General Use Permit (GUP) that is designed to align with stat\r\n e\\, county\\, and local priorities while ensuring that Stanford remains a gl\r\n obal leader in research and education.\\n\\nJoin the StanfordNext team at an \r\n informal open house in Mountain View to learn more about the plan and share\r\n  your thoughts. RSVP required.\r\nDTEND:20260328T213000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T190000Z\r\nGEO:37.430402;-122.086021\r\nLOCATION:Michaels at Shoreline Restaurant\r\nSEQUENCE:0\r\nSUMMARY:StanfordNext Community Open House\r\nUID:tag:localist.com\\,2008:EventInstance_52251152882064\r\nURL:https://events.stanford.edu/event/stanfordnext-community-open-house-mou\r\n ntain-view\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260328T203000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691971364\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260328T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682848158\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260328T223000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260328T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708333335\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260329\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294380988\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260329\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355532797\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260329\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353996886\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:YogaX at Stanford Psychiatry invites you to join us in our upco\r\n ming online 30-hour course\\, “Therapeutic Breathwork: Pranayama for Integra\r\n ted Holistic Healthcare.”\\n\\nThe YogaX program offered through Stanford Psy\r\n chiatry represents an innovative fusion of yoga's ancient wisdom and the la\r\n test insights from modern psychological research. This in-depth therapeutic\r\n  breathwork training delivered by lead teacher Christiane Brems investigate\r\n s breath and breathing as a lifestyle practice that enhances physical\\, men\r\n tal\\, and emotional health and wellbeing.\\n\\nThis is an advanced-level pran\r\n ayama course geared to the following audiences:\\n\\nHealthcare\\, mental heal\r\n thcare\\, and allied healthcare providers interested in bringing principles \r\n and strategies of pranayama and polyvagal theory into their clinical practi\r\n ce.Healthcare\\, mental healthcare\\, and allied healthcare students in gradu\r\n ate or medical programs interested in bringing principles and strategies pr\r\n anayama into their supervised clinical practice.Yoga teachers interested in\r\n  offering integrated holistic pranayama practices in the context of polyvag\r\n al theory\\, especially to students and clients in healthcare and mental hea\r\n lthcare settings.Yoga therapists providing integrated holistic pranayama pr\r\n actices\\, especially in healthcare and mental healthcare settings.This 30-h\r\n our course includes 15 hours of synchronous weekend didactic content and 15\r\n  hours of asynchronous weekday practices. Weekend classes are scheduled for\r\n  the following dates: \\n\\nMarch 29\\, 8:00 am - 1:00 pm PTApril 5\\, 8:00 am \r\n - 1:00 pm PTApril 19\\, 8:00 am - 1:00 pm PTThe full syllabus and schedule a\r\n re available here. Continuing Education or Advanced Professional Developmen\r\n t credits (30 hours) are included in the tuition cost\\; STAP funds can be a\r\n pplied. \\n\\nThis 30-hour course can be taken on its own or as part of the f\r\n ollowing YogaX offerings: \\n\\n75-Hour Mental Health Certificate 300-Hour Th\r\n erapeutic Yoga Teacher Training300-Hour Yoga Therapeutics in Healthcare800-\r\n Hour Yoga Therapy TrainingIf you have any questions\\, please reach out to y\r\n ogaxteam@stanford.edu.\r\nDTEND:20260329T160000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:30-Hour Therapeutic Breathwork Course \r\nUID:tag:localist.com\\,2008:EventInstance_52134585860046\r\nURL:https://events.stanford.edu/event/30-hour-therapeutic-breathwork-course\r\n -8687\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260330T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098418045\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260330T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910843102\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260329T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809528691\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nPalm Sunday celebrates the\r\n  entry of Jesus into Jerusalem.\r\nDTEND:20260329T190000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Palm Sunday Ecumenical Christian Service\r\n  \r\nUID:tag:localist.com\\,2008:EventInstance_51958474720100\r\nURL:https://events.stanford.edu/event/upw-palm-sunday-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260329T203000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691974437\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260329T210000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682850207\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260329T223000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708335384\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260329T230000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260329T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668862465\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:See undergraduate leaves of absence and graduate leaves of abse\r\n nce). See Tuition and Refund Schedule for a full refund schedule.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Deadline to submit Leave of Absence for full refund (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464253121983\r\nURL:https://events.stanford.edu/event/deadline-to-submit-leave-of-absence-f\r\n or-full-refund-5-pm-4323\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:First day of quarter\\; instruction begins for all students.\r\nUID:tag:localist.com\\,2008:EventInstance_49464237248982\r\nURL:https://events.stanford.edu/event/first-day-of-quarter-instruction-begi\r\n ns-for-all-students-9303\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – First day of instruction Q6 POM.\r\nUID:tag:localist.com\\,2008:EventInstance_49464314510220\r\nURL:https://events.stanford.edu/event/md-first-day-of-instruction-q6-pom-50\r\n 30\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA - First day of clerkships for Period 10.\r\nUID:tag:localist.com\\,2008:EventInstance_49464319199655\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-10-5981\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA - First day of clerkships for Period 10.\r\nUID:tag:localist.com\\,2008:EventInstance_49464342653013\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-10-4165\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353997911\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Period 11 clerkship drop deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_51783479373843\r\nURL:https://events.stanford.edu/event/period-11-clerkship-drop-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:Students must be \"at status\"\\; i.e.\\, students must have a stud\r\n y list with sufficient units to meet requirements for their status\\, whethe\r\n r full-time\\, 8-9-10 units (graduate students only)\\, or have submitted a p\r\n etition for Undergraduate Special Registration Status or Graduate Special R\r\n egistration Status. The late study list fee is $200.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Preliminary Study List deadline (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464245704772\r\nURL:https://events.stanford.edu/event/preliminary-study-list-deadline-5-pm-\r\n 4802\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of spring quarter and the start of classe\r\n s (except MBA and MSx courses).\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: First Day of Quarter & Instruction Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472524140506\r\nURL:https://events.stanford.edu/event/spring-quarter-first-day-of-quarter-i\r\n nstruction-begins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (by 5 p.m.) to submit a Leave of Absence p\r\n etition to be eligible for a full refund. See the undergraduate and graduat\r\n e leaves of absence. See the Tuition and Refund Schedule for a full refund \r\n schedule.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Leave of Absence Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472524345324\r\nURL:https://events.stanford.edu/event/spring-quarter-leave-of-absence-deadl\r\n ine\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to complete the Preliminary Study List in \r\n which students must be \"at status\" (i.e.\\, students must have a study list \r\n with sufficient units to meet the requirements for their status or have sub\r\n mitted a petition for Undergraduate Special Registration Status or Graduate\r\n  Special Registration Status). The late study list fee is $200.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260330\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Preliminary Study List Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472524245987\r\nURL:https://events.stanford.edu/event/spring-quarter-preliminary-study-list\r\n -deadline-2557\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260331T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260330T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Virtual Only) \r\nUID:tag:localist.com\\,2008:EventInstance_51533432126017\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-virtual-only-5597\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260331T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260330T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098419070\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260331T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260330T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910844127\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260331T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260330T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382808255\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Testing the power and limitations of connectome-based functiona\r\n l predictions in the fruit fly visual system\\n\\nAbstract:\\n\\nOur brains are\r\n  capable of remarkable feats of computation\\, but the extent to which neura\r\n l processing is constrained by circuit wiring remains unclear. Connectome d\r\n atasets\\, offering descriptions of synaptic connectivity with unprecedented\r\n  scope and resolution\\, have become invaluable tools for understanding this\r\n  relationship in many animals\\, including the fruit fly. While these wiring\r\n  diagrams have been used to predict the function of cells and circuits\\, th\r\n e challenge of obtaining physiological recordings from many identified cell\r\n  types has prevented a broad validation of this approach. To overcome this \r\n challenge\\, I first developed a novel method to efficiently characterize th\r\n e visual selectivity of scores of cell types in the fruit fly optic lobe. D\r\n rawing on connectome data\\, I then quantitatively compared these measured r\r\n esponses to simple connectivity-based functional predictions. I found that \r\n strong connections exerted a disproportionately large influence on downstre\r\n am activity\\, inconsistent with a connection-weighted summation rule for po\r\n stsynaptic integration. Across cell types\\, connectivity data showed a surp\r\n risingly limited capacity to predict neuronal function\\, suggesting that no\r\n n-synaptic mechanisms must play a significant role in defining the brain’s \r\n computational repertoire. These results reframe our understanding of struct\r\n ure and function in the brain and establish a powerful set of constraints f\r\n or optimizing connectome-based predictions in other systems.\\n\\nSpeaker Bio\r\n :\\n\\nTim is a postdoctoral fellow in Tom Clandinin's lab\\, where he has bee\r\n n exploring the genetic\\, synaptic\\, and circuit-level constraints on compu\r\n tation in the fruit fly visual system. He earned his undergraduate degree a\r\n t Hamilton College in upstate New York\\, and completed his PhD in the lab o\r\n f Kathy Nagel at New York University. Tim's graduate work explored multi-mo\r\n dal integration in the invertebrate compass system\\, and his results were a\r\n mong the first to implicate vector computation in sensory-guided navigation\r\n . In the future\\, Tim hopes to combine his experience in sensory physiology\r\n  with a longstanding interest in brain development to dissect the developme\r\n ntal mechanisms that specify the functional properties of cells and circuit\r\n s.\r\nDTEND:20260331T003000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260330T230000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\\, James Lin and Nisa Leung Seminar\r\n  Room\\, E153\r\nSEQUENCE:0\r\nSUMMARY:Tim Currier - Testing the power and limitations of connectome-based\r\n  functional predictions in the fruit fly visual system\r\nUID:tag:localist.com\\,2008:EventInstance_51889466738698\r\nURL:https://events.stanford.edu/event/tim-currier-testing-the-power-and-lim\r\n itations-of-connectome-based-functional-predictions-in-the-fruit-fly-visual\r\n -system\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260331\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353998936\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, Summer course planning opens in Axess for undergradu\r\n ate and graduate students\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260331\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Planning Opens\r\nUID:tag:localist.com\\,2008:EventInstance_50472524442612\r\nURL:https://events.stanford.edu/event/summer-quarter-planning-opens\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083911Z\r\nDTSTART;VALUE=DATE:20260331\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer quarter planning opens for enrollment.\r\nUID:tag:localist.com\\,2008:EventInstance_49463844289960\r\nURL:https://events.stanford.edu/event/summer-quarter-planning-opens-for-enr\r\n ollment-197\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Fidelity Investments and TIAA p\r\n rovide free individual financial counseling on campus at your convenience? \r\n They can offer guidance on the best strategy to meet your retirement goals \r\n through Stanford's retirement savings plans.\\n\\nContact Fidelity directly t\r\n o schedule an appointment with a representative to review your current and \r\n future retirement savings options:\\n\\nFidelity appointment scheduler(800) 6\r\n 42-7131\r\nDTEND:20260401T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260331T150000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, 139\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with Fidelity (Main Campus\\, Huang Bldg\\, Room\r\n  139) (By Appointment Only)\r\nUID:tag:localist.com\\,2008:EventInstance_51533438311779\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-fid\r\n elity-main-campus-huang-bldg-room-139-by-appointment-only-7920\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:In honor of Women’s History Month\\, we are proud to unveil our \r\n latest book exhibit: \"Women in Science.\" Located in the Li & Ma Science Lib\r\n rary\\, this collection celebrates the women scientists\\, researchers\\, and \r\n innovators who have transformed our world.\\n\\nFrom the laboratory to the fi\r\n eld\\, these titles highlight the diverse and often under-told stories of wo\r\n men who pioneered new frontiers in STEM.\\n\\nExhibit Highlights\\n\\nStop by t\r\n o browse our curated selection\\, featuring:\\n\\nMemoirs of Discovery: Dive i\r\n nto the personal journeys of scientists like Hope Jahren in Lab Girl or Dia\r\n ne Boyd’s experiences in A Woman Among Wolves.\\n\\nGlobal Perspectives: Expl\r\n ore international contributions with titles such as Japanese Women in Scien\r\n ce and Engineering and Women in Global Science.\\n\\nHidden Histories: Learn \r\n about the foundational work of African American chemists and the \"Immortal \r\n Life\" of Henrietta Lacks.\\n\\nCareer & Culture: Examine the modern landscape\r\n  of the field through books like Women in STEM Careers and Every Other Thur\r\n sday.\r\nDTEND:20260401T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260331T160000Z\r\nGEO:37.430651;-122.171413\r\nLOCATION:Sapp Center for Science Teaching and Learning\\, 315\\, Li & Ma Scie\r\n nce Library\r\nSEQUENCE:0\r\nSUMMARY:Celebrating Women's History Month: Discovering Inspiring Stories of\r\n  Women in Science\r\nUID:tag:localist.com\\,2008:EventInstance_52279098420095\r\nURL:https://events.stanford.edu/event/celebrating-womens-history-month-disc\r\n overing-inspiring-stories-of-women-in-science\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260401T000000Z\r\nDTSTAMP:20260308T083911Z\r\nDTSTART:20260331T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910845152\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260401T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260331T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382810304\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Discover how Gallup’s U.S. Daily Tracking Poll and World Poll c\r\n an deepen your research.\\n\\nThis hybrid talk will be held on March 31st at \r\n 11am-12pm in the Tierney Room (121A) of Green Library. \\nExplore time-serie\r\n s visualizations and cross-tabs available through Stanford’s Gallup Analyti\r\n cs subscription. The U.S. Daily Tracking Poll (2008–2016) surveyed about 7\\\r\n ,000 adults weekly\\, offering nearly 1\\,900 variables and large cumulative \r\n sample sizes for detailed demographic and geographic analysis. The World Po\r\n ll provides global insights on key issues such as safety\\, food access\\, go\r\n vernance\\, employment\\, and well-being.\r\nDTEND:20260331T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260331T180000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, 121A\\, Tierney Room\r\nSEQUENCE:0\r\nSUMMARY:Behind the Polls: Understanding Gallup's Data Collection\r\nUID:tag:localist.com\\,2008:EventInstance_52259388167984\r\nURL:https://events.stanford.edu/event/behind-the-polls-understanding-gallup\r\n s-data-collection\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Advancements in novel molecular biology techniques have enabled\r\n  the development of promising biomarkers for medical and consumer applicati\r\n ons. Epigenetic modifications have yielded novel biomarkers of exposures\\, \r\n lifestyle\\, and aging\\, generating considerable excitement and momentum in \r\n both research and industry. However\\, these biomarkers suffer from underlyi\r\n ng biases due to training datasets derived from non-representative populati\r\n ons. This talk will highlight existing biases and misuses of epigenetic agi\r\n ng biomarkers\\, with a focus on epigenetic age\\, a novel measure of biologi\r\n cal age that is widely utilized in research and now available for direct-to\r\n -consumer testing. Data on disparities among underrepresented populations w\r\n ill demonstrate the potential pitfalls of using existing algorithms without\r\n  acknowledging their current limitations.\\n\\nSponsored by the Research Inst\r\n itute of CCSRE.\r\nDTEND:20260331T201500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260331T190000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, CCSRE Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Andres Cardenas\\, \"Bias and Equitable Use of Epigenetic Biomarkers \r\n in Diverse Populations\\,\" in conversation with Daphne Martschenko\r\nUID:tag:localist.com\\,2008:EventInstance_52215194998335\r\nURL:https://events.stanford.edu/event/andres-cardenas-bias-and-equitable-us\r\n e-of-epigenetic-biomarkers-in-diverse-populations-in-conversation-with-daph\r\n ne-martschenko\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: The 2011 Fukushima Dai’ichi nuclear disaster w\r\n as the worst industrial nuclear catastrophe to hit Japan. It was a major ev\r\n ent\\, rated at the highest severity\\, which released radioactive elements i\r\n nto the power plant’s surrounding environment when back-up systems failed a\r\n nd could not sufficiently cool the nuclear reactors. At least 164\\,000 peop\r\n le were permanently or temporarily displaced. Radioactive Governance offers\r\n  an ethnographic look at how the disaster was handled by Japan. Unlike prio\r\n r nuclear-related narratives\\, such as those surrounding Chernobyl or Hiros\r\n hima\\, which focused on themes of harm\\, trauma\\, and victimization\\, the J\r\n apanese government consistently put forward a discourse of minimal or no ra\r\n diation-related dangers\\, a gradual bringing home of former evacuees\\, a re\r\n starting of nuclear power plants\\, and the promotion of a resilient mindset\r\n  in the face of adversity. This narrative worked to counter other understan\r\n dings of recovery\\, such as those of worried citizens unsuccessfully fighti\r\n ng for permanent evacuation because they were afraid to go back to their ho\r\n mes. Providing a rich theorization of how both governments and citizens sha\r\n pe narratives about catastrophic events\\, Radioactive Governance not only d\r\n isplays how Fukushima became a story of hope and resilience rather than of \r\n victimization\\, but also how radioactive governance shifted from the nuclea\r\n r secrecy that characterized the Cold War era to relying on international o\r\n rganizations and domestic citizens to co-manage the aftermath of disasters.\r\n \\n\\nAbout the speaker: Maxime Polleri is an Assistant Professor in the Depa\r\n rtment of Anthropology at Université Laval and a member of the Graduate Sch\r\n ool of International Studies. As an anthropologist of technoscience\\, he st\r\n udies the governance of disasters\\, waste and misinformation\\, with a prima\r\n ry focus on nuclear topics and a regional expertise on Japan.\r\nDTEND:20260331T211500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260331T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Radioactive Governance: The Politics of Revitalization in Post-Fuku\r\n shima Japan\r\nUID:tag:localist.com\\,2008:EventInstance_52261347584708\r\nURL:https://events.stanford.edu/event/radioactive-governance-the-politics-o\r\n f-revitalization-in-post-fukushima-japan-5663\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260331T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260331T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491617691\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Please join us for our 2026 Spring seminar series on “Entrepren\r\n eurship in Asian High-Tech Industries.” Each year\\, this series surveys the\r\n  most recent trends\\, patterns\\, and challenges of entrepreneurship in Asia\r\n  and their relevance to Silicon Valley and the U.S. Guest speakers include \r\n entrepreneurs\\, investors and mentors\\, and other experts on the current en\r\n trepreneurial ecosystems of major Asia economies. On Tuesday\\, March 31st\\,\r\n  US-ATMC Director Dr. Richard Dasher\\, will kick-off the series with “Asia \r\n Entrepreneurship Update 2026\\,” an overview of current trends and dynamics \r\n of major entrepreneurial ecosystems in Asia.\\n\\nDr. Richard Dasher has dire\r\n cted the US-Asia Technology Management Center since 1994 and is Adjunct Pro\r\n fessor of East Asia Languages and Cultures at Stanford University. From 199\r\n 8 – 2017\\, he served concurrently as Executive Director of the Center for I\r\n ntegrated Systems (now Stanford System X Alliance) and held Consulting Prof\r\n essor appointments in the Department of Electrical Engineering. In 2004\\, D\r\n r. Dasher became the first non-Japanese person to join the governance of a \r\n Japanese national university\\, serving on the Board of Directors and then o\r\n n the Management Council of Tohoku University until 2011. Other service (se\r\n lected) includes the Program Committee of the World Premier International R\r\n esearch Center Initiative (WPI) of MEXT since its founding in 2007\\, and ad\r\n visory roles with research institutes\\, accelerators\\, and nonprofits in As\r\n ia\\, Canada\\, and the U.S.\\n\\n---\\n\\nThe Entrepreneurship in Asian High-Tec\r\n h Industries series begins March 31\\, 2026 and continues until June 2\\, 202\r\n 6. Seminars will be held in-person and on Zoom\\, Tuesdays\\, 4:30 PM – 5:50 \r\n PM.\\n\\nRegistration:\\n\\nTo attend in-person\\, please register over Eventbri\r\n te here.\\n\\nTo attend by Zoom\\, please register here.\r\nDTEND:20260401T005000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260331T233000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Bishop Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Asia Entrepreneurship Update 2026\r\nUID:tag:localist.com\\,2008:EventInstance_52074846632173\r\nURL:https://events.stanford.edu/event/asia-entrepreneurship-update-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260401T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663081908\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260401\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294385087\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260401\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355533822\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260401\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353999961\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260402T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910846177\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260401T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105024127\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260402T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382812353\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Need help setting up your Canvas course or have questions about\r\n  Canvas? We are offering Canvas sessions via Zoom. *Must access Zoom and au\r\n thenticate utilizing your Stanford email account. Passcode: 031743 Meeting \r\n ID: 948 2797 4676\\n\\nBasic Canvas Overview: \\n\\nWednesday\\, March 25th @10a\r\n mThursday\\, March 26th @10amWednesday\\, April 1st @10amThursday\\, April 2nd\r\n  @10am Can’t attend?  Please check out our Canvas First Steps and Tips and \r\n explore our Teaching with Canvas resources for ideas to save time\\, enhance\r\n  student engagement\\, and support collaboration.\\n\\nNote: Not for Continuin\r\n g Studies or the School of Medicine faculty.  For SoM\\, contact medcanvas@s\r\n tanford.edu. For Continuing Studies\\, contact continuingstudies@stanford.ed\r\n u.\r\nDTEND:20260401T180000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring 2026 Canvas Overview Sessions\r\nUID:tag:localist.com\\,2008:EventInstance_52066155433792\r\nURL:https://events.stanford.edu/event/spring-2026-canvas-overview-sessions\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Session Description:\\n\\nAlthough much work examines foreign aid\r\n ’s impact on development outcomes\\, its effect on bureaucracies and institu\r\n tions that are key to development\\, and profoundly influenced by aid interv\r\n entions\\, remains understudied. I argue that project-based aid alters finan\r\n cial and social aspects of work over which bureaucrats hold salient prefere\r\n nces\\, generating tradeoffs that drive bureaucrats to redirect effort from \r\n routine functions toward donor-funded initiatives. Drawing on interviews\\, \r\n surveys\\, and survey experiments with more than 600 Ugandan bureaucrats\\, I\r\n  find that\\, despite preferring government funding and autonomy\\, bureaucra\r\n ts are drawn to better-paid aid projects\\, thus diverting effort away from \r\n regular duties. They also prefer departments with substantial donor funding\r\n \\, although it undermines the equity and teamwork they value. These finding\r\n s reveal why aid can weaken bureaucracies: the same incentives that boost p\r\n erformance on donor projects divert effort from government programming and \r\n erode the organizational cohesion needed for lasting bureaucratic capacity.\r\n  \\n\\nRSVP to attend\\n\\n \\n\\nBiography: Maria Nagawa is a Postdoctoral Schol\r\n ar at the Center on Democracy\\, Development\\, and the Rule of Law at Stanfo\r\n rd University. Previously\\, she was a Postdoctoral Fellow at The Niehaus Ce\r\n nter for Globalization and Governance at Princeton University. Her research\r\n  bridges comparative politics\\, international relations\\, and public policy\r\n  to examine how public institutions function under conditions of foreign in\r\n tervention\\, weak legitimacy\\, and uneven development. Drawing on fieldwork\r\n  across Africa\\, Latin America\\, and Asia\\, her work combines surveys\\, sur\r\n vey experiments\\, interviews\\, and administrative data to examine bureaucra\r\n ts' incentives\\, the resilience of civil society\\, and the agency of vulner\r\n able groups. Her research speaks to current debates on international influe\r\n nce\\, postcolonial legacies\\, state capacity\\, and citizen trust. It is gui\r\n ded by a core normative concern: how to build states that are legitimate\\, \r\n equitable\\, and effective\\, particularly in developing countries. She holds\r\n  a joint PhD in Public Policy and Political Science from Duke University\\, \r\n an MA in International Economic Policy from Sciences Po\\, and a BA in Comme\r\n rce from Makerere University. Before joining graduate school\\, she was a Le\r\n cturer at Makerere University Business School and a Research Associate at t\r\n he Economic Policy Research Centre in Kampala\\, Uganda. She has also been a\r\n  consultant with the International Development Research Centre in Ottawa\\, \r\n Canada\\, a visiting researcher at the BRICS Policy Center in Rio de Janeiro\r\n \\, Brazil\\, and a visiting scholar at the University of Colorado\\, Denver’s\r\n  School of Public Affairs.\r\nDTEND:20260401T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T190000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 123\r\nSEQUENCE:0\r\nSUMMARY:\"Foreign Aid and the Performance of Bureaucrats\" - Maria Nagawa\r\nUID:tag:localist.com\\,2008:EventInstance_52188693762711\r\nURL:https://events.stanford.edu/event/foreign-aid-and-the-performance-of-bu\r\n reaucrats-maria-nagawa\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for a PATH+ talk entitled\\, \"Selections from Ibn\r\n  Jinnī's Khaṣāʾiṣ\" by Myungin Sohn (Comparative Literature\\, Stanford). \\n\\\r\n nMore detalis to follow.\r\nDTEND:20260401T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 260\\, Pigott Hall\\, Rm 216\r\nSEQUENCE:0\r\nSUMMARY:PATH+: Myungin Sohn: Selections from Ibn Jinnī's Khaṣāʾiṣ\r\nUID:tag:localist.com\\,2008:EventInstance_52278692572046\r\nURL:https://events.stanford.edu/event/path-myungin-sohn-selections-from-ibn\r\n -jinnis-khaai\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Honors in the Arts is an Interdisciplinary Honors program (IHN)\r\n \\, open to undergraduates in any major. Over the course of their senior yea\r\n r\\, Honors in the Arts students develop a creative thesis project that goes\r\n  beyond the traditional boundaries of their major. The program supports col\r\n laborative or individual projects that center research creation\\, combine t\r\n wo or more kinds of art practice\\, or blend art and research in some creati\r\n ve yet rigorous way. All students will work with a faculty advisor and a gr\r\n ad student mentor\\, and will participate in a weekly workshop with a cohort\r\n  of interdisciplinary peers.\\n\\nJoin us for this online proposal writing wo\r\n rkshop to learn practical tips and strategies for crafting a compelling pro\r\n ject proposal.\r\nDTEND:20260401T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T193000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Honors in the Arts - Proposal Workshop\r\nUID:tag:localist.com\\,2008:EventInstance_52269028947719\r\nURL:https://events.stanford.edu/event/honors-in-the-arts-proposal-workshop\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Mark Mimee\\, \"Addi\r\n tive and Subtractive Approaches in Microbiome Engineering\"\r\nDTEND:20260401T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Mark Mimee\\, \"Additive\r\n  and Subtractive Approaches in Microbiome Engineering\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144367248475\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-mark-mimee-additive-and-subtractive-approaches-in-microbiome-engineeri\r\n ng\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260402T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260401T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743783383\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260402\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294386112\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260402\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355534847\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260402\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Conferral of degrees\\, Winter Quarter. Graduates will have access t\r\n o official degree certifications and transcripts the day after degrees are \r\n posted.\r\nUID:tag:localist.com\\,2008:EventInstance_49463614499299\r\nURL:https://events.stanford.edu/event/conferral-of-degrees-winter-quarter-g\r\n raduates-will-have-access-to-official-degree-certifications-and-transcripts\r\n -the-day-after-degrees-are-posted-3269\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260402\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146353999962\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the GSB begins instruction for MBA and MSx courses o\r\n nly. See the Graduate School of Business academic calendar for a full sched\r\n ule.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260402\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: GSB Instruction Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472524665860\r\nURL:https://events.stanford.edu/event/spring-quarter-gsb-instruction-begins\r\n -9680\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the university confers degrees for the most recent w\r\n inter quarter.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260402\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Conferral of Degrees\r\nUID:tag:localist.com\\,2008:EventInstance_50472524550139\r\nURL:https://events.stanford.edu/event/winter-quarter-conferral-of-degrees-4\r\n 045\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260403T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910846178\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260403T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382815426\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Workshop\r\nDESCRIPTION:Need help setting up your Canvas course or have questions about\r\n  Canvas? We are offering Canvas sessions via Zoom. *Must access Zoom and au\r\n thenticate utilizing your Stanford email account. Passcode: 031743 Meeting \r\n ID: 948 2797 4676\\n\\nBasic Canvas Overview: \\n\\nWednesday\\, March 25th @10a\r\n mThursday\\, March 26th @10amWednesday\\, April 1st @10amThursday\\, April 2nd\r\n  @10am Can’t attend?  Please check out our Canvas First Steps and Tips and \r\n explore our Teaching with Canvas resources for ideas to save time\\, enhance\r\n  student engagement\\, and support collaboration.\\n\\nNote: Not for Continuin\r\n g Studies or the School of Medicine faculty.  For SoM\\, contact medcanvas@s\r\n tanford.edu. For Continuing Studies\\, contact continuingstudies@stanford.ed\r\n u.\r\nDTEND:20260402T180000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring 2026 Canvas Overview Sessions\r\nUID:tag:localist.com\\,2008:EventInstance_52066155435841\r\nURL:https://events.stanford.edu/event/spring-2026-canvas-overview-sessions\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260402T191500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762182961\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260402T194500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794477337\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260402T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491618716\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260403T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743784408\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:A book launch organized by Professor Mikael Wolfe\\, featuring C\r\n o-Editors Edward Beatty\\, (Professor of History and Global Affairs\\, U. of \r\n Norte Dame)\\, and Israel Solares\\, (Inst. for resarch and Applied Mathemati\r\n cs\\, UNAM). An Engineered World examines the dramatic and global expansion \r\n of modern professional engineering between 1870 and 1950. Over these decade\r\n s\\, the number of people who called themselves “engineers\" (or were recogni\r\n zed as such by others) expanded from a small and eclectic number of individ\r\n uals to one of the most numerous\\, mobile\\, and influential professional gr\r\n oups in the 20th century. Tens of thousands of university-trained engineers\r\n \\, and other professionalized technical experts – a few famous\\, but most a\r\n nonymous – became critical to the technological\\, organizational\\, and poli\r\n tical development of global capitalism and socialism.\\n\\nThis collection ed\r\n ited by Edward Beatty and Israel Solares presents eight case studies of eng\r\n ineers' work and interactions situated in local\\, national\\, regional place\r\n s\\, but always intersecting with global influences.\r\nDTEND:20260403T010000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260402T230000Z\r\nGEO:37.424764;-122.172243\r\nLOCATION:Stanford Humanities Center Boardroom\\, Boardroom\r\nSEQUENCE:0\r\nSUMMARY:An Engineered World Roundtable: The Role of Engineers in Global Mod\r\n ernity\r\nUID:tag:localist.com\\,2008:EventInstance_52189153417476\r\nURL:https://events.stanford.edu/event/an-engineered-world-roundtable-the-ro\r\n le-of-engineers-in-global-modernity\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Jeremy Frey (b. 1978\\, Passamaquoddy Indian Township Reservatio\r\n n\\, Maine) is one of the most celebrated Indigenous weavers today. A sevent\r\n h-generation Passamaquoddy basket maker\\, Frey learned traditional Wabanaki\r\n  weaving techniques from his mother and through apprenticeships at the Main\r\n e Indian Basketmakers Alliance. Building on these cultural foundations\\, Fr\r\n ey produces conceptually ambitious and meticulously crafted baskets from fo\r\n raged raw materials\\, such as sweetgrass\\, cedar\\, spruce root\\, and porcup\r\n ine quills\\, while engaging with new materials across video\\, prints\\, and \r\n installation. \\n\\nJoin us for a conversation between Frey and co-curator of\r\n  Jeremy Frey: Woven\\, Ramey Mize (Susan G. Detweiler Associate Curator of A\r\n merican Art at the Philadelphia Art Museum). The two will discuss and refle\r\n ct on cultural agency\\, resilience\\, and the artist’s commitment to honorin\r\n g this ancestral art form through breathtaking formal innovations and his u\r\n nique artistic vision. \\n\\nThis program is presented in conjunction with Je\r\n remy Frey: Woven on view at the Cantor through July 20\\, 2026. The exhibiti\r\n on is organized by the Portland Museum of Art\\, Maine.\\n\\nAll public progra\r\n ms at the Cantor Arts Center are always free! Space for this program is lim\r\n ited\\; advance registration is recommended. Those who have registered will \r\n have priority for seating.\\n\\nRSVP here.\\n\\n________\\n\\nParking\\n\\nFree vis\r\n itor parking is available along Lomita Drive as well as on the first floor \r\n of the Roth Way Garage Structure\\, located at the corner of Campus Drive We\r\n st and Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. From the Palo Al\r\n to Caltrain station\\, the Cantor Arts Center is about a 20-minute walk or t\r\n he free Marguerite shuttle will bring you to campus via the Y or X lines. \\\r\n n\\nDisability parking is located along Lomita Drive near the main entrance \r\n of the Cantor Arts Center. Additional disability parking is located on Muse\r\n um Way and in Parking Structure 1 (Roth Way & Campus Drive). Please click h\r\n ere to view the disability parking and access points.\\n\\nAccessibility Info\r\n rmation or Requests\\n\\nCantor Arts Center at Stanford University is committ\r\n ed to ensuring our programs are accessible to everyone. To request access i\r\n nformation and/or accommodations for this event\\, please complete this form\r\n  at least one week prior to the event: museum.stanford.edu/access.\\n\\nFor q\r\n uestions\\, please contact disability.access@stanford.edu or Kwang-Mi Ro\\, k\r\n wangmi8@stanford.edu\\, (650) 723-3469.\\n\\nConnect with the Cantor Arts Cent\r\n er! Subscribe to our mailing list and follow us on Instagram. \\n\\nPhoto cre\r\n dit: John D. and Catherine T. MacArthur Foundation\r\nDTEND:20260403T023000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T010000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, The John L. Eastman\\, '61 Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Jeremy Frey: Woven\r\nUID:tag:localist.com\\,2008:EventInstance_51517279704940\r\nURL:https://events.stanford.edu/event/jeremy-frey-woven\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:My Memoirs\\, written in Persian by Partow Nooriala—Iranian poet\r\n \\, fiction writer\\, and critic—was published in August 2025\\, and reprinted\r\n  in March 2026 by Asemana Books. In this intimate narrative\\, she shares pe\r\n rsonal and social experiences with honesty and warmth\\, painting the portra\r\n it of an Iranian-American woman and mother who\\, within a patriarchal socie\r\n ty and through life’s hardships\\, chooses clarity over despair. Volume One \r\n reflects her memories of Iran\\; Volume Two will follow her journey in Ameri\r\n ca.  Event is in Persian.\\n\\n“Partow Nooriala\\, skillfully\\, beautifully\\, \r\n and with complete naturalness\\, carries her memories forward—drawing only o\r\n n her observations and experiences\\, without judgment—to portray various mo\r\n ments of history\\, politics\\, and society. Through her sharp and fair depic\r\n tions\\, she revives the historical moments shared by her own generation and\r\n  ours. One of the most important aspects of the book—though presented witho\r\n ut direct emphasis and seen through the clear lens of Partow’s perspective—\r\n is the powerful presence of the Iranian woman: her tireless effort to manag\r\n e life\\, to build herself\\, to avoid stagnation\\, and to remain aware of he\r\n r intelligence and capability as a human being\\, even when she may appear q\r\n uiet or silent. In a single sentence\\, this book may be the most honest int\r\n erpretation of contemporary history during a particular period—and an excep\r\n tional contribution to the history of literature\\, written by an analytical\r\n  and critical author.” From Hangameh Abbasi’s review. Learn more and order \r\n a copy from Asemana Books. \\n\\n\\n\\nPartow Nooriala was born in Iran into an\r\n  educated family. Both of her grandfathers\\, her mother\\, and her eldest br\r\n other were poets and literary figures. From her teenage years\\, she develop\r\n ed a deep interest in literature\\, and to date has published twelve books o\r\n f poetry\\, literary and art criticism\\, plays\\, and stories. In 1994\\, she \r\n received the First Prize for Best Critic of the Year from the jury of the B\r\n aran Publishing Literary Competition in Sweden.\\n\\nBook cover credit: Negar\r\n  Assari\\n\\nPart of the Stanford Festival or Iranian Arts\\n\\nStanford is com\r\n mitted to ensuring its facilities\\, programs and services are accessible to\r\n  everyone. To request access information and/or accommodations for this eve\r\n nt\\, please complete https://tinyurl.com/AccessStanford at the latest one w\r\n eek before the event.\r\nDTEND:20260403T030000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T013000Z\r\nLOCATION:In person at Stanford\r\nSEQUENCE:0\r\nSUMMARY:Book Talk: The Memoirs of Partow Nooriala\\, Volume One (Iran)\r\nUID:tag:localist.com\\,2008:EventInstance_51323214712307\r\nURL:https://events.stanford.edu/event/book-talk-the-memoirs-of-partow-noori\r\n ala-volume-one-iran\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260403\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294388161\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260403\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355535872\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260403\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354000987\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:To commemorate the fiftieth anniversary of the Copyright Act of\r\n  1976\\, Stanford Law School and the Stanford Technology Law Review have bro\r\n ught together an outstanding group of scholars to discuss the past\\, presen\r\n t\\, and future of the Copyright Act.\\n\\nThis event is free and open to the \r\n public. Registration is recommended.\r\nDTEND:20260404T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T150000Z\r\nGEO:37.423105;-122.166932\r\nLOCATION:Munger Complex\\, Paul Brest Hall\r\nSEQUENCE:0\r\nSUMMARY:Commemorating 50 Years of the 1976 Copyright Act\r\nUID:tag:localist.com\\,2008:EventInstance_52241550677064\r\nURL:https://events.stanford.edu/event/commemorating-50-years-of-the-1976-co\r\n pyright-act\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260404T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910847203\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Global Risk team is offering virtual pre-departure resource\r\n  review sessions specifically for internationally traveling faculty\\, resea\r\n rchers.\\n\\nIn this session\\, Global Risk will cover\\n\\nhigh-level travel ri\r\n sk overview and mitigations\\n\\ncurrent events impacting travel\\n\\ntraveling\r\n  as a non-U.S. citizen\\n\\ntraveling to destinations with\\n\\nrestrictive pri\r\n vacy laws\\n\\ndata security concerns\\n\\nelevated medical and security risks\\\r\n n\\nincident response processes and resources\\n\\ncampus services available t\r\n o support them\\, their research\\, and their work.\\n\\n \\n\\nThe session will \r\n be 30 minutes\\, with the option to remain for an optional Q&A.\r\nDTEND:20260403T163000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Global Risk Resource Review for Faculty\\, Researchers (April)\r\nUID:tag:localist.com\\,2008:EventInstance_51808320811094\r\nURL:https://events.stanford.edu/event/global-risk-resource-review-for-facul\r\n ty-researchers-april\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260404T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382817475\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260404T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817888010\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260403T193000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699841728\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:SDRC Friday Seminar\\, 04/03/26\\n\\n \\n\\nAmanda Cambraia\\, PhD\\nP\r\n ostdoctoral Research Fellow\\, Molecular Physiology and Biophysics\\, Vanderb\r\n ilt University\\n\\n \\n\\n\"Calorie Restriction Up Regulates PD-L1 Signaling to\r\n  Promote Beta Cell Longevity in NOD mice\"\r\nDTEND:20260403T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T190000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\r\nSEQUENCE:0\r\nSUMMARY:SDRC Friday Seminar - Amanda Cambraia\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_52251550788116\r\nURL:https://events.stanford.edu/event/sdrc-friday-seminar-amanda-coelho-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nGood Friday commemorates t\r\n he Passion of Jesus Christ.\r\nDTEND:20260403T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T190000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Good Friday Ecumenical Christian Service\r\n  \r\nUID:tag:localist.com\\,2008:EventInstance_51958621190521\r\nURL:https://events.stanford.edu/event/upw-good-friday-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260403T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682851232\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:What explains immigrants’ integration into host-country labor m\r\n arkets? Bridging group-level and structural accounts of labor market inequa\r\n lity\\, this study investigates the role of immigration regimes\\, or the ass\r\n emblage of laws\\, administrative rules\\, and enforcement practices that str\r\n ucture cross-border movement\\, assign legal categories\\, and mediate access\r\n  to rights and resources. We examine whether and how newly restrictive immi\r\n gration regimes can erode immigrants’ prior labor market integration vis-à-\r\n vis the native born. Using a sequential mixed-methods design\\, we analyze t\r\n he case of South American immigrants to Chile\\, which in 2021 passed new im\r\n migration restrictions following rapid demographic change. Analyses of nati\r\n onally-representative surveys show that immigrant groups who matched or exc\r\n eeded Chileans on several labor market outcomes in 2017 experienced signifi\r\n cant declines by 2022. We refer to this as labor market disintegration. The\r\n se declines are not explained by migrant selectivity\\, social networks\\, ci\r\n vil society support\\, or duration of residence. Sixty-nine in-depth intervi\r\n ews with South American immigrants reveal two mechanisms that link immigrat\r\n ion regimes to labor market disintegration: recategorization\\, whereby immi\r\n grants are shifted into legal statuses that reduce access to work authoriza\r\n tion and citizenship\\, and hypersegmentation\\, whereby even well-credential\r\n ed immigrants are confined to low-wage jobs with little mobility. We conclu\r\n de with implications for immigrant integration under restrictive regimes em\r\n erging worldwide.\\n\\nMayra Feddersen is an Associate Professor at Universid\r\n ad Adolfo Ibáñez. In 2017\\, she earned her Ph.D. from the Jurisprudence and\r\n  Social Policy Program (JSP) at UC Berkeley School of Law. In 2011\\, she re\r\n ceived her Master at the same institution. Her research focuses on immigrat\r\n ion policy\\, immigrant labor integration\\, and social legal studies on form\r\n al institutions. Mayra serves as one of the principal researchers within th\r\n e MIGRA Millennium nucleus\\, deputy director of CIDS\\, and president of the\r\n  CPM directory.\r\nDTEND:20260403T213000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260403T203000Z\r\nGEO:37.422017;-122.165624\r\nLOCATION:Bolivar House\r\nSEQUENCE:0\r\nSUMMARY:Immigration Regimes and Labor Market Integration:   The Case of Sou\r\n th American Immigrants to Chile\r\nUID:tag:localist.com\\,2008:EventInstance_52206695125755\r\nURL:https://events.stanford.edu/event/immigration-regimes-and-labor-market-\r\n integration-the-case-of-south-american-immigrants-to-chile\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us at Harmony House for IDA’s monthly First Fridays! A gat\r\n hering space for artists\\, students\\, and community to connect\\, unwind\\, a\r\n nd create together. Each month\\, we open our doors at the Harmony House  fo\r\n r an evening of conversation\\, art-making\\, and chill vibes over food and d\r\n rinks. Whether you’re here to meet new people\\, share your work\\, or just h\r\n ang out\\, First Fridays are a chance to slow down and be in creative commun\r\n ity.\r\nDTEND:20260404T020000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T000000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at IDA (Social)\r\nUID:tag:localist.com\\,2008:EventInstance_50731549502930\r\nURL:https://events.stanford.edu/event/first-fridays-at-ida-social\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us for the First Fridays event series at the EVGR Pub & Be\r\n er Garden! \\n\\nWe provide pub food until it runs out.\\n\\nThe first Friday o\r\n f each month from 5:00 p.m. to 7:00 p.m.\\, with our kick-off event occurrin\r\n g THIS FRIDAY\\, 11.7.2025.\r\nDTEND:20260404T020000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T000000Z\r\nGEO:37.426705;-122.157614\r\nLOCATION:EVGR Pub & Beer Garden\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at the EVGR Pub & Beer Garden\r\nUID:tag:localist.com\\,2008:EventInstance_51757169760607\r\nURL:https://events.stanford.edu/event/evgr-first-fridays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260404\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294389186\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260404\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355536897\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260404\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354002012\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260405T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910848228\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260404T183000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078575545\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260404T193000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699843777\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260404T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691977510\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260404T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682853281\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260404T223000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708337433\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260404T230000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260404T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668864515\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260405\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294391235\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260405\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355538946\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260405\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354003037\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260406T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910849253\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260405T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809529716\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nEaster Sunday celebrates t\r\n he resurrection of Jesus.\r\nDTEND:20260405T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Easter Sunday Ecumenical Christian Servi\r\n ce \r\nUID:tag:localist.com\\,2008:EventInstance_51958631938115\r\nURL:https://events.stanford.edu/event/ups-easter-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260405T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691980583\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260405T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682854306\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260405T223000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740369420\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260405T223000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708339482\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260405T230000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260405T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668866564\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260406\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Axess opens for course enrollment (5:30 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463849651331\r\nURL:https://events.stanford.edu/event/axess-opens-for-course-enrollment-530\r\n -pm-1968\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260406\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354004062\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260407T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260406T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910849254\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260407T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260406T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382819524\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The first Monday of each month\\, the Knight Initiative for Brai\r\n n Resilience will host monthly seminars to bring together awardees\\, affili\r\n ated professors and students for a series of 'lab meeting' styled talks. Tw\r\n o speakers will discuss their brain resilience research\\, experiences in th\r\n e field\\, and answer questions about their work.\\n\\nTo support our research\r\n ers' participation in this open science ‘lab-meeting style’ exchange of ide\r\n as\\, these seminars are not streamed/recorded and are only open to members \r\n of the Stanford community. \\n\\nJordan Moore\\, Stanford University\\n\\nTalk t\r\n itle TBD\\n\\nLay research TBD\\n\\n \\n\\nRahul Nagvekar\\, Stanford University\\n\r\n \\nTalk title TBD\\n\\nLay research TBD\\n\\n \\n\\n \\n\\nEVENT POSTER COMING SOON\r\nDTEND:20260406T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260406T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Brain Resilience Seminar: Jordan Moore and Rahul Nagvekar\r\nUID:tag:localist.com\\,2008:EventInstance_49919872111902\r\nURL:https://events.stanford.edu/event/brain-resilience-seminar-jordan-moore\r\n -and-rahul-nagvekar\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260407T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260407T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430656369\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, Axess opens for undergraduate and graduate students \r\n to enroll in courses.\r\nDTEND:20260407T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260407T003000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Axess Opens for Course Enrollment\r\nUID:tag:localist.com\\,2008:EventInstance_50472524786704\r\nURL:https://events.stanford.edu/event/summer-quarter-axess-opens-for-course\r\n -enrollment-9748\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260407\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354005087\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day for students to add or drop GSB courses. S\r\n ee the full Graduate School of Business academic calendar for more informat\r\n ion.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260407\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: GSB MBA/MSx Add/Drop Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472524886042\r\nURL:https://events.stanford.edu/event/spring-quarter-gsb-mbamsx-adddrop-dea\r\n dline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260408T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260407T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910850279\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260408T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260407T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382822597\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Planning for retirement can feel overwhelming\\, especially if y\r\n ou are unsure how your retirement plan works or whether you are saving enou\r\n gh. With so many options\\, rules\\, and financial priorities competing for y\r\n our attention\\, it can be easy to put retirement planning off for another d\r\n ay. However\\, taking even small steps now can make a meaningful difference \r\n for your future financial security.\\n\\nIn this free webinar\\, you will lear\r\n n the fundamentals of understanding your retirement plan and the steps need\r\n ed to enroll. We will walk through how to evaluate whether you are on track\r\n  with your savings and explore practical ways to increase your contribution\r\n s over time\\, even if you are starting later or saving on a limited budget.\r\n \\n\\nWhether you are just beginning your retirement journey or want reassura\r\n nce that you are making the most of your current plan\\, you will leave with\r\n  greater confidence\\, clearer next steps\\, and tools to help you start savi\r\n ng for the future you envision.\\n\\nThis class will not be recorded. Attenda\r\n nce requirement for incentive points - at least 80% of the live session.  R\r\n equest disability accommodations and access info.\\n\\nClass details are subj\r\n ect to change.\r\nDTEND:20260407T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260407T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Get Started and Save for the Future You\r\nUID:tag:localist.com\\,2008:EventInstance_52220231252778\r\nURL:https://events.stanford.edu/event/get-started-and-save-for-the-future-y\r\n ou\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260407T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260407T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491619741\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260408T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663082933\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260408T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622315918\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260408\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294395334\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260408\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355539971\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260408\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354006112\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260409T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910851304\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260408T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105025152\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260409T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382824646\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Date and Time: 11:00AM–12:00PM\\, Wednesday\\, April 8\\, 2026\\n\\n\r\n Location: Hybrid - Branner Earth Sciences Library and Zoom (link provided u\r\n pon registration)\\n\\nLead Instructor: Maricela Abarca (Data Curator for Int\r\n erdisciplinary Sustainability)\\n\\nWherever you are in the research data lif\r\n ecycle\\, this workshop will help you assess your data hygiene and adopt dat\r\n a management strategies that enhance the integrity of your data. We will in\r\n troduce FAIR (Findable\\, Reproducible\\, Interoperable\\, Reusable) and CARE \r\n (Collective Benefit\\, Authority to Control\\, Responsibility\\, Ethics) princ\r\n iples and discuss how to implement them in your work. Those interested in o\r\n pen science and open scholarship will benefit from this session.\\n\\nTopics \r\n that will be covered:\\n\\nFAIR & CAREData management plansData sharing best \r\n practicesRepository selectionPersistent identifiersWhere and how to get tai\r\n lored data management helpIf you would like to learn more about Data Manage\r\n ment and Sharing Plans for funding agencies\\, check out the upcoming Data M\r\n anagement and Sharing Plans 101 workshop on April 22\\, 2026.\\n\\nPlease regi\r\n ster to attend. Registration is exclusively open to current Stanford Affili\r\n ates.\r\nDTEND:20260408T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T180000Z\r\nGEO:37.426402;-122.172635\r\nLOCATION:Mitchell Earth Sciences\\, Branner Earth Sciences Library\\, Teachin\r\n g Corner\r\nSEQUENCE:0\r\nSUMMARY:FAIR and CARE Research Data Management\r\nUID:tag:localist.com\\,2008:EventInstance_52260719971041\r\nURL:https://events.stanford.edu/event/fair-and-care-research-data-managemen\r\n t\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Returning to work after welcoming a new baby can be both exciti\r\n ng and challenging. As a working parent\\, you may be navigating new routine\r\n s and shifting priorities and have questions about balancing work\\, family\\\r\n , and self-care during this important transition. You do not have to naviga\r\n te this phase alone.\\n\\nIn this supportive and interactive virtual workshop\r\n \\, you will learn about campus and community resources available at Stanfor\r\n d to help you blend your work and family needs. Gain actionable tips and pr\r\n actical ideas to ease the transition back to work and explore self-care str\r\n ategies that support your well-being during this time of change.\\n\\nThis fr\r\n ee workshop is specifically designed for all Stanford employees who are wel\r\n coming a child and are planning to take leave in the next three months\\, ar\r\n e currently on leave\\, or have returned from leave within the past three to\r\n  six months. Partners and babies are welcome to join\\, creating a welcoming\r\n  space for conversation\\, connection\\, and shared learning.\\n\\nThis class w\r\n ill not be recorded. Attendance requirement for incentive points - at least\r\n  80% of the live session.  Request disability accommodations and access inf\r\n o.\\n\\n\\n\\nClass details are subject to change.\r\nDTEND:20260408T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:BABBLE - Back After Baby Bonding Leave Ends\r\nUID:tag:localist.com\\,2008:EventInstance_52220231299888\r\nURL:https://events.stanford.edu/event/babble-back-after-bonding-leave-ends\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Each quarter\\, the Stanford Archaeology Center invites prominen\r\n t archaeologists from around the globe to be in residence for a week as a D\r\n istinguished Lecturer. During their residency\\, the Distinguished Lecturer \r\n gives two lectures and interacts with faculty\\, postdoctoral scholars and s\r\n tudents. Stanford Archaeology Center will host Emeritus Prof. Randall McGui\r\n re from  Binghamton University over two days (April 8 and April 9) for the \r\n Spring Quarter of this academic year. \\n\\nAbstract:\\n\\nAt the end of the 20\r\n th century\\, radical scholars embraced the concept of community archaeology\r\n . Now\\, in the third decade of the 21stcentury\\, community archaeology has \r\n become de rigueur and often over simplified. Furthermore\\, we are doing it \r\n in a radically changed political atmosphere. The global rise of reactionary\r\n  populism and fascism leads me to reassess community archaeology\\, not to r\r\n eject it out of hand\\, but to suggest that we need to reconsider how and wh\r\n y we do it\\, and who we do it for. Around the world\\, reactionary anti-inte\r\n llectual movements are changing how communities see themselves and others. \r\n These movements have altered the practice of politics\\, increased polarizat\r\n ion and fostered extremism. This change in atmosphere makes the social role\r\n  of archaeology more relevant but also more challenging. Scholars need to r\r\n ecognize how complicated and difficult it is to do an archaeology for the c\r\n ommunity and to maintain liberal ideals. We need to problematize popular no\r\n tions of community\\, the public and political activism. Most importantly\\, \r\n we need to constantly ask the question --- archaeology for whom\\, how and w\r\n hy?\r\nDTEND:20260408T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T190000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\\, 106\r\nSEQUENCE:0\r\nSUMMARY:Distinguished Lecture Series | Archaeology\\, and Reactionary Populi\r\n sm: Critiquing Community Archaeology\r\nUID:tag:localist.com\\,2008:EventInstance_52252398940641\r\nURL:https://events.stanford.edu/event/distinguished-lecture-series-archaeol\r\n ogy-and-reactionary-populism-critiquing-community-archaeology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Brenda Berlin\\, J.D.\\, University Ombuds and trained mediator\\,\r\n  will lead an interactive session focused on building practical skills for \r\n navigating conflict and other high-stakes conversations with greater confid\r\n ence and effectiveness. Participants will gain insight into how emotions ar\r\n e activated during conflict\\, learn strategies for managing those reactions\r\n \\, and develop practical tools for planning\\, framing\\, and successfully na\r\n vigating challenging conversations. The session will also highlight Stanfor\r\n d resources available to support you when addressing conflict on your own f\r\n eels overwhelming or unworkable.\\n\\nExperience Level: Entry-Level and beyon\r\n d (a good refresher for those familiar with the topic)\\n\\nRegister Here Fac\r\n ilitated by Brenda Berlin\\, J.D.\\, University Ombuds and trained mediator\\n\r\n \\nAbout Quick Bytes:\\n\\nGet valuable professional development wisdom that y\r\n ou can apply right away! Quick Bytes sessions cover a variety of topics and\r\n  include lunch. Relevant to graduate students at any stage in any degree pr\r\n ogram.\\n\\nSee the full Quick Bytes schedule\r\nDTEND:20260408T201500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T190000Z\r\nLOCATION:Tresidder Memorial Union\\, Oak West Lounge\r\nSEQUENCE:0\r\nSUMMARY:Quick Bytes: Resources and Skills for High Stakes Conversations wit\r\n h Advisors\\, Peers and Others\r\nUID:tag:localist.com\\,2008:EventInstance_52197824962894\r\nURL:https://events.stanford.edu/event/quick-bytes-resources-and-skills-for-\r\n high-stakes-conversations-with-advisors-peers-and-others\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Would you like to learn about the scientific resources that are\r\n  available at the Wu Tsai Neurosciences Institute & Sarafan ChEM-H? \\n\\nWe \r\n invite anybody interested in using our facilities and learning about the in\r\n ternal and external resources that the community labs have to offer. Discov\r\n er scientific resources\\, meet the directors of the individual labs\\, enjoy\r\n  lunch and network\\, and tour the community labs! \\n\\nRegister here by Apri\r\n l 7\\n\\nDate: April 8\\, 2026Time: 12pm – 1pm PSTLocation: Stanford Neuroscie\r\n nces Building\\, E241Learn more about the Neurosciences Community Labs at th\r\n e Wu Tsai Neurosciences Institute.\\n\\nLearn more about the Nucleus at the S\r\n arafan ChEM-H\r\nDTEND:20260408T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Shared Resources at Wu Tsai Neuro & Sarafan ChEM-H: Lunch &amp\\; Le\r\n arn\r\nUID:tag:localist.com\\,2008:EventInstance_51583174299735\r\nURL:https://events.stanford.edu/event/neurosciences-community-labs-lunch-am\r\n p-learn-3723\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260408T201500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51958777360744\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Grace Chen\\, \"Circ\r\n ular RNA Immunity\"\r\nDTEND:20260408T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Grace Chen\\, \"Circular\r\n  RNA Immunity\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144399713484\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-grace-chen-circular-rna-immunity\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260409T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743785433\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant person in your life\\, or are experiencing feelings of grief in a \r\n time of uncertainty\\, this is an opportunity to share your experiences\\, su\r\n ggestions\\, and concerns with others in a safe and supportive environment.\\\r\n n\\nStudent Grief Gatherings are held 3x/quarter and are facilitated by staf\r\n f from ORSL\\, Well-Being\\, CAPS and GLO. This event is free and open only t\r\n o Stanford students.\r\nDTEND:20260409T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260408T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden\r\nSEQUENCE:0\r\nSUMMARY:Student Grief & Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_52093114047613\r\nURL:https://events.stanford.edu/event/student-grief-gathering\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us to hear from GSB founder Jenna Nicholas\\, MBA '17\\, on \r\n the launch of her book Enlightened Bottom Line\\, exploring how purpose and \r\n spirituality can transform business and investing. Open and free to partici\r\n pate.\\n\\nRegister here\\n\\nBrought to you by Stanford Graduate School of Bus\r\n iness' Center for Social Innovation\\, Stanford SENSA\\, and Well-Being Coach\r\n ing at\\nVaden Health Services\\n\\n***\\n\\nWhat if business and investing coul\r\n d be rooted in the deepest values of the human spirit?\\n\\nIn her groundbrea\r\n king book\\, Enlightened Bottom Line\\, Jenna Nicholas explores the powerful \r\n intersection of spirituality\\, business\\, and investing—an intersection too\r\n  often overlooked in a world driven by profit alone. Drawing on moving stor\r\n ies of entrepreneurs\\, investors\\, and leaders who are living out this inte\r\n gration\\, along with cutting-edge research\\, Nicholas reveals how spiritual\r\n  wisdom can guide ethical choices in finance and business.\\n\\nUnlike other \r\n books on business or investing\\, Enlightened Bottom Line is not just about \r\n strategies\\, numbers\\, or policies. It is about reimagining what wealth\\, s\r\n uccess\\, and leadership can truly mean when guided by purpose\\, compassion\\\r\n , and integrity. It offers readers concrete frameworks and real-world examp\r\n les to align their financial decisions with their deepest beliefs.\\n\\nThis \r\n book is for leaders\\, investors\\, entrepreneurs\\, changemakers\\, and anyone\r\n  seeking to make their work and money matter—people who feel the tension be\r\n tween striving for success and yearning for meaning. Readers will walk away\r\n  not only with tools and insights\\, but also with a renewed sense of hope: \r\n that business and investing can serve as vehicles for healing\\, justice\\, a\r\n nd spiritual growth.\\n\\nAt its heart\\, this is more than a book about money\r\n  or management—it is an invitation to transform how we live\\, work\\, and le\r\n ad.\\n\\nAbout the Speaker\\n\\nJenna Nicholas is an investor\\, entrepreneur\\, \r\n advisor\\, author\\, coach and speaker. She is the president of LightPost Cap\r\n ital\\, an investment and acquisition firm\\, and the Co-Founder and CEO of I\r\n mpact Experience\\, which advances equity across climate\\, healthcare\\, educ\r\n ation\\, and investments. Jenna is the author of Enlightened Bottom Line: Ex\r\n ploring the intersection of spirituality\\, business and investing.\\n\\nAn ac\r\n tive angel investor\\, Jenna has backed over three unicorns. She previously \r\n served as Investment Partner at One Planet Group\\, where she also led corpo\r\n rate development and acquired four companies. Prior\\, she worked with the W\r\n orld Bank Treasury on green bonds and sustainability projects\\, with Toniic\r\n  supporting its global impact community\\, and with the Calvert Special Equi\r\n ties team investing in education technology\\, financial inclusion\\, renewab\r\n le energy\\, and sustainable agriculture. As Project Manager of Divest-Inves\r\n t Philanthropy\\, she led a coalition of foundations of over 170 foundations\r\n  representing $50 billion in assets under management shifting capital from \r\n fossil fuels into impact solutions\\, which she shared on the TEDx Portland \r\n stage.\\n\\nJenna serves as an advisor to Ethic and the Nexus Global Youth Su\r\n mmit and previously sat on Apollo Global Management's Impact Advisory Commi\r\n ttee. She co-chaired the Emerging Leaders Council of LISC\\, co-taught at Ts\r\n inghua School of Economics and Management\\, and is Vice President of Stanfo\r\n rd Angels and Entrepreneurs. She holds an MBA from Stanford Graduate School\r\n  of Business\\, a BA in International Relations from Stanford with study at \r\n Oxford University\\, and has been recognized as a Forbes 30 Under 30 Social \r\n Entrepreneur\\, PDSoros Fellow\\, Echoing Green Fellow\\, and is a Council on \r\n Foreign Relations member. Jenna serves on the board and investment committe\r\n e of the Oakland Museum of California. Jenna has been featured in the New Y\r\n ork Times\\, Financial Times\\, Forbes\\, amongst other publications. Jenna is\r\n  an active member of the Bahá’í Faith.\r\nDTEND:20260409T020000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T000000Z\r\nGEO:37.428109;-122.161027\r\nLOCATION:Graduate School of Business\\, Seawell Board Room\\, Bass Library Ro\r\n om 400\r\nSEQUENCE:0\r\nSUMMARY:Enlightened Bottom Line: Rethinking Success in Business and Investi\r\n ng\r\nUID:tag:localist.com\\,2008:EventInstance_51890277799916\r\nURL:https://events.stanford.edu/event/enlightened-bottom-line-rethinking-su\r\n ccess-in-business-and-investing-1496\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260409T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379383494\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Performance\r\nDESCRIPTION:Stanford Public Humanities and the Creative Writing Program inv\r\n ite you to an evening of poetry and conversation between two beloved writer\r\n s\\, Hanif Abdurraqib and Aracelis Girmay. Book selling/signing to follow. \\\r\n n\\nPlease RSVP at this link to attend.\\n\\nHanif Abdurraqib is an award-winn\r\n ing poet\\, essayist\\, and cultural critic from Columbus\\, Ohio and the 2025\r\n -26 Denning Visiting Artist at Stanford. His newest release\\, There's Alway\r\n s This Year: On Basketball and Ascension (Random House\\, 2024) was a New Yo\r\n rk Times Bestseller and longlisted for the National Book Award in nonfictio\r\n n and the winner of the National Book Critics Circle Award for Criticism. H\r\n is previous book\\, A Little Devil In America (Random House\\, 2021) was a wi\r\n nner of the Andrew Carnegie Medal and the Gordon Burn Prize. He is the auth\r\n or of two full-length poetry collections\\, The Crown Ain't Worth Much (Butt\r\n on Poetry\\, 2016) and A Fortune For Your Disaster (Tin House\\, 2019). In 20\r\n 21\\, Abdurraqib was named a MacArthur Fellow\\, and in 2024 was named a Wind\r\n ham-Campbell Prize recipient. He is a graduate of Beechcroft High School.\\n\r\n \\naracelis girmay is the author of four full-length poetry collections incl\r\n uding the recently published GREEN OF ALL HEADS. She is also the editor of \r\n the anthology So We Can Know: Writers of Color on Pregnancy\\, Loss\\, Aborti\r\n on\\, and Birth as well as How to Carry Water: Selected Poems of Lucille Cli\r\n fton. Her writing has appeared in e-flux\\, Granta\\, Los Angeles Review of B\r\n ooks\\, The Paris Review\\, The Yale Review\\, and elsewhere. She served as th\r\n e Editor-at-Large of the BOA Editions Blessing the Boats Selections from 20\r\n 21-2025. girmay is on the editorial board of the African Poetry Book Fund a\r\n nd is the Knight Family Professor of Creative Writing at Stanford.\r\nDTEND:20260409T030000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T013000Z\r\nGEO:37.424305;-122.170842\r\nLOCATION:Tresidder Union\\, Oak Lounge\r\nSEQUENCE:0\r\nSUMMARY:An Evening of Poetry with Hanif Abdurraqib and Aracelis Girmay\r\nUID:tag:localist.com\\,2008:EventInstance_52145129413007\r\nURL:https://events.stanford.edu/event/an-evening-of-poetry-with-hanif-abdur\r\n raqib-and-aracelis-girmay\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260409\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294397383\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260409\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355540996\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260409\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354007137\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Did you know that advisors from Vanguard\\, Fidelity Investments\r\n  and TIAA provide free individual financial counseling on campus at your co\r\n nvenience? They can offer guidance on the best strategy to meet your retire\r\n ment goals through Stanford’s retirement savings plans.\\n\\nContact TIAA dir\r\n ectly to schedule an appointment with a representative to review your curre\r\n nt and future retirement savings options:\\n\\nTIAA(866) 843-5640TIAA.ORG/SCH\r\n EDULENOW\r\nDTEND:20260410T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T150000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, Room 139\r\nSEQUENCE:0\r\nSUMMARY:Financial Counseling with TIAA (Main Campus\\, Huang Bldg\\, Room 139\r\n ) \r\nUID:tag:localist.com\\,2008:EventInstance_52187633068874\r\nURL:https://events.stanford.edu/event/copy-of-financial-counseling-with-tia\r\n a-main-campus-huang-bldg-room-136-3222\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260410T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910852329\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260410T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382827719\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260409T191500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762185010\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event is sponsored by the Center for South Asia.\\n\\nAbout \r\n the event\\nIn this talk\\, I explore how Bollywood songs have become a power\r\n ful medium for dreaming\\, striving\\, and self-making in twenty-first-centur\r\n y India. Once dismissed as escapist fantasy\\, Bollywood’s emotionally charg\r\n ed songs now serve as tools for self-transformation in what has been dubbed\r\n  “Aspirational India.” Drawing on more than two years of fieldwork in Mumba\r\n i\\, I trace how upcoming singers\\, amateur students\\, teachers\\, and Bollyw\r\n ood producers use Bollywood songs to perform what I call “dreamwork”: the m\r\n usical and discursive work of promoting\\, imagining\\, and striving for desi\r\n red selves and futures. Across playback singing schools\\, reality televisio\r\n n shows\\, and the broader music industry\\, filmi singing is a site of both \r\n imaginative potential and precarity\\, promising social mobility while reins\r\n cribing inequalities of caste\\, class\\, and gender. Rather than dismissing \r\n my interlocutors’ aspirational dreams\\, however\\, I argue that we must take\r\n  their musical dreamwork seriously in order to understand the cultural dyna\r\n mics of emerging neoliberal economies. Through the lens of dreamwork\\, I th\r\n eorize the efficacy of musical practice as a tool for shaping subjectivity \r\n while outlining a political economy of the imagination in relation to music\r\n al practice.\\n\\nAbout the speaker\\nAnaar Desai-Stephens is Assistant Profes\r\n sor of Ethnomusicology at the CUNY Graduate Center\\, having previously serv\r\n ed as a faculty member at the Eastman School of Music\\, University of Roche\r\n ster. Her research focuses on popular\\, media economies\\, and aspirational \r\n subjectivity in India and her first monograph\\, Voicing Aspiration: Bollywo\r\n od Songs and Dreamwork in Contemporary India\\, will be published with Wesle\r\n yan University Press (Spring 2026). Her work has appeared in Twentieth Cent\r\n ury Music\\; Culture\\, Theory\\, Critique\\; and The Routledge Handbook of Sou\r\n th Asian Cinema\\, amongst others. Current research projects focus on the in\r\n tersection of whiteness\\, gender and sexuality in the Bollywood culture ind\r\n ustry\\, and how doulas and midwives listen in New York state. Anaar is trai\r\n ned as a violinist and vocalist across a range of genres.\r\nDTEND:20260409T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T190000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Voicing Aspiration: Bollywood Songs and Dreamwork in Contemporary I\r\n ndia\r\nUID:tag:localist.com\\,2008:EventInstance_52252045400323\r\nURL:https://events.stanford.edu/event/voicing-aspiration-bollywood-songs-an\r\n d-dreamwork-in-contemporary-india\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260409T194500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794479386\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Veronica Roberts\\, John and Jill Freidenrich Director\\, Ca\r\n ntor Arts Center for this special highlights tour of Jeremy Frey: Woven.\\n\\\r\n nJeremy Frey: Woven is the first solo museum exhibition of works by MacArth\r\n ur “genius” award winner Jeremy Frey\\, and the Cantor will be its only West\r\n  Coast venue. Renowned for his innovation in basketry\\, Frey has been advan\r\n cing his practice over the last twenty years. The exhibition will present o\r\n ver 30 objects\\, ranging from early point baskets and urchin forms to more \r\n recent monumental multicolored vases with meticulous porcupine quillwork\\, \r\n as well as new work in video\\, prints\\, and large-scale woven sculpture. Th\r\n e exhibition premiered at the Portland Museum of Art in May 2024\\, before t\r\n raveling to the Art Institute in Chicago and the Bruce Museum in Connecticu\r\n t. Jeremy Frey: Woven is organized by the Portland Museum of Art\\, Maine.\\n\r\n \\nAll public programs at the Cantor Arts Center are always free! Space for \r\n this program is limited\\; advance registration is recommended.\\n\\nRSVP here\r\n .\\n\\n________\\n\\nParking\\n\\nPaid visitor parking is available along Lomita \r\n Drive as well as on the first floor of the Roth Way Garage Structure\\, loca\r\n ted at the corner of Campus Drive West and Roth Way at 345 Campus Drive\\, S\r\n tanford\\, CA 94305. From the Palo Alto Caltrain station\\, the Cantor Arts C\r\n enter is about a 20-minute walk or there the free Marguerite shuttle will b\r\n ring you to campus via the Y or X lines.\\n\\nDisability parking is located a\r\n long Lomita Drive near the main entrance of the Cantor Arts Center. Additio\r\n nal disability parking is located on Museum Way and in Parking Structure 1 \r\n (Roth Way & Campus Drive). Please click here to view the disability parking\r\n  and access points.\\n\\n________\\n\\nAccessibility Information or Requests\\n\\\r\n nCantor Arts Center at Stanford University is committed to ensuring our pro\r\n grams are accessible to everyone. To request access information and/or acco\r\n mmodations for this event\\, please complete this form at least one week pri\r\n or to the event: museum.stanford.edu/access.\\n\\nFor questions\\, please cont\r\n act disability.access@stanford.eduor D Fukunaga\\, fukunaga@stanford.edu.\\n\\\r\n n----------\\n\\nImage: Jeremy Frey (Passamaquoddy\\, born 1978)\\, Defensive\\,\r\n  2022\\, ash\\, sweetgrass\\, and dye\\, 12 1/2 x 7 1/2 x 7 1/2 inches. Collect\r\n ion of Carole Katz\\, California. © Jeremy Frey. Image courtesy Eric Stoner\r\nDTEND:20260409T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY: Lunchtime Curator Talk | Jeremy Frey: Woven\r\nUID:tag:localist.com\\,2008:EventInstance_52022783834816\r\nURL:https://events.stanford.edu/event/jeremy-frey_april-9\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260409T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491620766\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260410T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743786458\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:\"Development Mismatch? Evidence from Agricultural Projects in P\r\n astoral Africa\"\\n\\nWe study the consequences of a clash between contemporar\r\n y development initiatives and traditional economic practices in Africa. Cro\r\n p agriculture has expanded considerably across the continent in recent year\r\n s. Much of this expansion has occurred in traditionally pastoral areas. Thi\r\n s is believed to be a major cause of conflict between pastoral and agricult\r\n ural ethnic groups. We test this hypothesis using geocoded data on agricult\r\n ural development projects across Africa from 1995-2014. We find that implem\r\n enting agricultural projects in traditionally pastoral areas leads to a two\r\n -fold increase in the risk of conflict. We find no equivalent effect for ag\r\n ricultural projects implemented in traditionally agricultural areas\\, nor f\r\n or non-agricultural projects implemented in either location. We also find t\r\n hat this mechanism contributes to the spread of extremist-religious conflic\r\n t in the form of jihadist attacks. The effects are muted when agricultural \r\n projects are paired with pastoral projects\\, which is more likely to occur \r\n when pastoral groups have more political power. Despite these effects on co\r\n nflict\\, we find that crop agriculture projects increase nighttime luminosi\r\n ty in both agricultural and pastoral areas. Evidence from survey data sugge\r\n sts that the gains in pastoral areas are concentrated in on-pastoral househ\r\n olds. Our results indicate that \"development mismatch\" - i.e.\\, imposing pr\r\n ojects that are misaligned with local communities - can be costly.\\n\\nBio\\n\r\n \\nNathan Nunn is a Professor at the Vancouver School of Economics. He studi\r\n es the historical and dynamic processes of economic development\\, with part\r\n icular attention to how institutions and culture evolve across societies. H\r\n is research interests span political economy\\, economic history\\, developme\r\n nt\\, cultural economics\\, and international trade. He holds a Canada Resear\r\n ch Chair in cultural economics\\, is a Fellow of CIFAR in the Boundaries\\, M\r\n embership & Belonging program\\, an NBER Faculty Research Fellow\\, and a Res\r\n earch Fellow at BREAD\\, and currently serves as an editor at the Quarterly \r\n Journal of Economics. His research has examined the historical processes of\r\n  a wide range of factors crucial for economic development\\, including distr\r\n ust\\, gender norms\\, religiosity\\, norms of rule-following\\, conflict\\, imm\r\n igration\\, state formation\\, support for democracy\\, kinship\\, religious be\r\n liefs\\, and zero-sum thinking.\r\nDTEND:20260409T213000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Environmental Behavioral Sciences Seminar with Nathan Nunn\r\nUID:tag:localist.com\\,2008:EventInstance_50710557008045\r\nURL:https://events.stanford.edu/event/environmental-behavioral-sciences-sem\r\n inar-5231\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Chronomaps are agents that reveal connections and adjacencies n\r\n ot readily apparent to human perception. Unlike human observation or landsc\r\n ape depictions in 2D representations\\, they allow for an experience of land\r\n scape that honors the adjacency of places and timescales. In chronomaps\\, n\r\n othing is a disparate entity. Rather\\, each feature interpenetrates and flo\r\n ws into others. This births new awareness of relationships between landscap\r\n es and new ways of imagining them\\, rewriting the boundaries between observ\r\n er and observed.\\n\\nThis presentation examines transitional landscapes as d\r\n ynamic systems that shape fundamental relationships between human activitie\r\n s and natural processes\\, relationships that planners and policymakers ofte\r\n n overlook. Through the case studies of the Sunset Dunes and the former Gre\r\n at Highway corridor along San Francisco's ocean edge\\, Chronomaps emerges a\r\n s a vital agent of imaginality and relationality\\, redefining how time\\, sp\r\n ace\\, and human experience intersect.\\n\\nChronomaps proposes that the capac\r\n ity to hold dynamic images in the mind is the essential precursor to relati\r\n onal thought. Before meaningful connections between objects\\, events\\, or s\r\n cales of existence can be contemplated\\, imagination must first be activate\r\n d. Once mobilized\\, it renders relationships perceptible\\, visible in the m\r\n ind's eye\\, and these newly perceived connections catalyze ever deeper laye\r\n rs of imaginative engagement.\\n\\nThrough the investigative instruments of c\r\n artography and videography\\, Chronomaps transforms static locations into li\r\n ving stages of interaction. Places are no longer inert coordinates but dyna\r\n mic theaters where timescales\\, humanscales\\, and material environments con\r\n verge. Mapping becomes not merely descriptive but generative — stirring the\r\n  psyche and inviting viewers to perceive layered temporalities and relation\r\n al networks embedded within space.\\n\\nUltimately\\, Chronomaps is not simply\r\n  a method of observing space. It is a fundamental reorientation of percepti\r\n on — a shift in how we inhabit and understand the world. Through the transf\r\n ormative power of the image\\, space becomes relational\\, time becomes palpa\r\n ble\\, and human experience becomes situated within a continuously unfolding\r\n \\, moving map of connections.\\n\\nABOUT THE SPEAKER\\n\\nDr. Ben Gitai\\n\\nDr. \r\n Ben Gitai brings together geography\\, architecture\\, and interconnected fie\r\n lds through his multidisciplinary research and practice. He has held teachi\r\n ng positions at leading Swiss and French institutions\\, including ETH Zuric\r\n h and EPFL\\, as well as scientific collaboration with the David Rumsey Mapp\r\n ing Center\\, Stanford University.\\n\\nHis work draws from landscape architec\r\n ture\\, landscape ecology\\, urban planning\\, political geography\\, and histo\r\n ry to examine how spatial configurations evolve across time and reflect und\r\n erlying social\\, political\\, economic\\, and power dynamics. Through these l\r\n enses\\, he develops metabolic and ecological design approaches.\\n\\nCentral \r\n to his research is the recontextualization of mapping as a tool for portray\r\n ing the intricate connections between human activities and natural systems.\r\n  This approach reveals new perspectives on the forces that continuously sha\r\n pe and reshape our built and natural environments.\\n\\nDr. Gitai currently s\r\n erves as head coordinator of the Habitat Research Center and works as both \r\n scientist and lecturer at the Laboratory of Landscape Development at EPFL\\,\r\n  where he develops research on transitional landscapes.\r\nDTEND:20260409T233000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T213000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library)\r\nSEQUENCE:0\r\nSUMMARY:Chronomapping Transitional Landscapes: Time\\, Space\\, and Human Exp\r\n erience Along the Sunset Dune and the Former Great Highway in San Francisco\r\nUID:tag:localist.com\\,2008:EventInstance_52269958057828\r\nURL:https://events.stanford.edu/event/chronomapping-transitional-landscapes\r\n -time-space-and-human-experience-along-the-sunset-dune-and-the-former-great\r\n -highway-in-san-francisco\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: America’s Founding Fathers feared that a stand\r\n ing army would be a permanent political danger\\, yet the US military has in\r\n  the 250 years since become a bulwark of democracy. Kori Schake explains wh\r\n y in this compelling history of civil-military relations from independence \r\n to the challenges of the present.\\n\\nThe book begins with General George Wa\r\n shington’s vital foundational example of subordination to elected leaders d\r\n uring the Revolutionary War. Schake recounts numerous instances in the foll\r\n owing century when charismatic military leaders tried to challenge politica\r\n l leaders and explains the emergence of restrictions on uses of the militar\r\n y for domestic law enforcement. She explores the crucial struggle between P\r\n resident Andrew Johnson and Congress after Abraham Lincoln’s assassination\\\r\n , when Ulysses Grant had to choose whether to obey the commander in chief o\r\n r the law—and chose to obey the law. And she shows how the professionalizat\r\n ion of the military in the 20th century inculcated norms of civilian contro\r\n l.\\n\\nThe US military is historically anomalous for maintaining its strengt\r\n h and popularity while never becoming a threat to democracy. Schake conclud\r\n es by asking if its admirable record can be sustained when the public is pu\r\n lling the military into the political divisions of our time.\\n\\nAbout the s\r\n peaker: Kori Schake leads the foreign and defense policy team at the Americ\r\n an Enterprise Institute. She is the author of Safe Passage: the Transition \r\n from British to American Hegemony\\, and a contributing writer at The Atlant\r\n ic\\, War on the Rocks\\, and Bloomberg.\r\nDTEND:20260410T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T223000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:The State and the Soldier: A Conversation with the Author\r\nUID:tag:localist.com\\,2008:EventInstance_52267877660255\r\nURL:https://events.stanford.edu/event/the-state-and-the-soldier-a-conversat\r\n ion-with-the-author\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a free tour of Denning House and explore its treehouse-ins\r\n pired architecture and art collection.\\n\\nBuilt in 2018 specifically to hou\r\n se Knight-Hennessy Scholars\\, Denning House provides an inspiring venue for\r\n  scholars\\, staff\\, and visitors\\, and a magnificent setting for art. A gif\r\n t from Roberta Bowman Denning\\, '75\\, MBA '78\\, and Steve Denning\\, MBA '78\r\n \\, made the building possible. Read more about Denning House in Stanford Ne\r\n ws.\\n\\nTour size is limited. Registration is required to attend a tour of D\r\n enning House.\\n\\nNote: Most parking at Stanford is free of charge after 4 p\r\n m. Denning House is in box J6 on the Stanford Parking Map. Please see Stanf\r\n ord Parking for more information on visitor parking at Stanford. Tours last\r\n  approximately 30 minutes.\r\nDTEND:20260409T233000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260409T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Tour Denning House\\, home to Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51579186490288\r\nURL:https://events.stanford.edu/event/copy-of-tour-denning-house-home-to-kn\r\n ight-hennessy-scholars-2565\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Jean will show you how to find trustworthy diabetes and wellnes\r\n s information online and how the Health Library can help. You’ll learn simp\r\n le tips for spotting reliable sites and steering clear of misinformation.\\n\r\n \\nThis presentation is part of the monthly Diabetes Wellness Group webinar \r\n series from the Stanford Medicine Diabetes Care Program. Webinars are free \r\n and open to adults with diabetes and their families. You don’t need to be a\r\n  Stanford patient to join.\\n\\nJean Johnson\\, MLS\\, AHIP\\, is a medical libr\r\n arian at Stanford Health Library.\r\nDTEND:20260410T010000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T000000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Finding Reliable Health Information Online\r\nUID:tag:localist.com\\,2008:EventInstance_52189162100478\r\nURL:https://events.stanford.edu/event/finding-reliable-health-information-o\r\n nline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Abstract:\\n\\nFrom around the beginning of the Common Era up to \r\n roughly 600 CE\\, the fertile ground of Indian Buddhism gave rise to several\r\n  hundreds of Mahāyāna sūtras. Given the sheer scale of this body of literat\r\n ure\\, it is hardly surprising that still only a fraction of it has undergon\r\n e careful examination. The texts that have garnered attention so far have b\r\n een mainly those felt to resonate with Western philosophical sensibilities\\\r\n ; those especially salient in living Buddhist traditions\\; and those for wh\r\n ich there happens to be surviving Sanskrit evidence. Most of the others sti\r\n ll await their turn. What\\, if anything\\, can we learn from such marginal M\r\n ahāyāna sūtras?\\n\\nIn this talk\\, I highlight one such work\\, a mid-length \r\n text titled *Sūrata-sūtra\\, surviving in Chinese (Xulai jing 須賴經 [T. 329]) \r\n and Tibetan (Des pas zhus pa [D71]) translations. By exploring several of i\r\n ts distinctive doctrinal positions\\, I consider the potential of such margi\r\n nal texts to illuminate central themes in Mahāyāna studies.\\n\\nBio:\\n\\nRafa\r\n l Felbur\\, PhD (Stanford University\\, 2018)\\, is Akademischer Assistent to \r\n the Chair of Buddhist Studies at the University of Heidelberg\\, Germany. He\r\n  works on the intellectual\\, cultural\\, and social dynamics of the encounte\r\n r between India and China in the first millennium CE. Trained as a philolog\r\n ist and historian\\, he specializes in the textual evidence for these proces\r\n ses: translations of Indic Buddhist scriptures into Chinese\\, commentaries\\\r\n , bibliographic works\\, polemical and exegetical tracts\\, and official docu\r\n ments. Long interested in the Chinese reception of Indian Madhyamaka ideas\\\r\n , he has published an English translation of Sengzhao’s Zhao lun within the\r\n  Bukkyō Dendō Kyōkai’s English Tripiṭaka Series. Before joining Heidelberg\\\r\n , as a post-doctoral researcher in the Open Philology project at Leiden Uni\r\n versity\\, Netherlands\\, he prepared a monograph on the Sūrata-paripṛcchā\\, \r\n a Mahāyāna sūtra hitherto neglected in modern scholarship\\, from Tibetan an\r\n d Chinese sources.\r\nDTEND:20260410T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T000000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, 2nd Floor\\, Room 224\r\nSEQUENCE:0\r\nSUMMARY:Rafal Felbur: \"In the Great Vehicle Down Roads Less Traveled: Refle\r\n ctions on the Study of Marginal Mahāyāna Texts Based on the *Sūrata-sūtra\"\r\nUID:tag:localist.com\\,2008:EventInstance_50586877135051\r\nURL:https://events.stanford.edu/event/rafal-felbur-in-the-great-vehicle-dow\r\n n-roads-less-traveled-reflections-on-the-study-of-marginal-mahayana-texts-b\r\n ased-on-the-surata-sutra\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260410T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404966907\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260410\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Application deadline for Spring Quarter degree conferral (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464347255238\r\nURL:https://events.stanford.edu/event/application-deadline-for-spring-quart\r\n er-degree-conferral-5-pm-5647\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260410\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294399432\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260410\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355542021\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260410\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354008162\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to apply to graduate at the end of spring \r\n quarter. Late application fee after this date is $50\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260410\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Application Deadline for Degree Conferral\r\nUID:tag:localist.com\\,2008:EventInstance_50472524981283\r\nURL:https://events.stanford.edu/event/spring-quarter-application-deadline-f\r\n or-degree-conferral\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260411T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910852330\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260411T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382829768\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260411T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817889035\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260410T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802455300\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260410T193000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699844802\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Join us for a free webinar to learn how to integrate the scienc\r\n e of giving into your life\\, ensuring that generosity remains a source of j\r\n oy rather than depletion. Using evidence-based strategies\\, we’ll discuss h\r\n ow to cultivate generosity in a way that is both fulfilling and sustainable\r\n \\, even during challenging times.\\n\\nMany of us devote our time\\, energy\\, \r\n and resources to supporting others—whether family\\, friends\\, colleagues\\, \r\n patients\\, or our communities. With a sustainable approach\\, we can learn t\r\n o give with intention and lower the risk of burning out.\\n\\nThis engaging w\r\n ebinar explores the many dimensions of giving\\, from financial contribution\r\n s to offering time\\, care\\, expertise\\, and advocacy. We’ll examine how gen\r\n erosity plays a role in our daily lives\\, workplaces\\, and nonprofit effort\r\n s\\, and how giving is positively associated with well-being and social conn\r\n ections.\\n\\nWhether you give professionally or personally\\, this session wi\r\n ll provide practical insights to help you give in a sustainable way to supp\r\n ort both yourself and others.\\n\\nThis class will be recorded and a one-week\r\n  link to the recording will be shared with all registered participants. To \r\n receive incentive points\\, attend at least 80% of the live session or liste\r\n n to the entire recording within one week.  Request disability accommodatio\r\n ns and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260410T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Art of Sustainable Giving\r\nUID:tag:localist.com\\,2008:EventInstance_52220231397180\r\nURL:https://events.stanford.edu/event/the-art-of-sustainable-giving-8033\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260410T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260410T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682856355\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260411\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294400457\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260411\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355544070\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Overview\\nThis course brings together experts in the field of a\r\n dvanced bronchoscopy to provide an introduction to beam computed tomography\r\n  (CBCT)\\, its application to bronchoscopy\\, and its role in future bronchos\r\n copic interventions. As treatments for lung cancer and other thoracic malig\r\n nancies continue to improve\\, there is increasing pressure for growth and a\r\n dvancement in the realm of diagnostic bronchoscopy. Cone beam computed tomo\r\n graphy (CBCT) is an advanced imaging modality with unparalleled capabilitie\r\n s for intraprocedural visualization and guidance. This course will provide \r\n insights and guidance into operationalizing a CBCT-guided bronchoscopy prog\r\n ram at the institutional level\\, and the interdisciplinary approach to adva\r\n nced bronchoscopy from the allied health professional's perspective. Lastly\r\n \\, the course offers several hands-on sessions for attendees to experience \r\n and become familiar with CBCT technologies.\\n\\nRegistration\\nPhysicians: $2\r\n 50\\nRN\\, RT\\, APP\\, and other healthcare professionals: $75\\nTrainees (Resi\r\n dents): $75\\nFellows:  **Complimentary registration \\; Must update CME Prof\r\n ile with institution/organization for verification and email Sonia VIttori \r\n svittori@stanford.edu for promotion code**\\n\\nIndustry Registration & Spons\r\n orship Opportunities: Please visit the Cone Beam CT & Advanced Imaging in P\r\n eripheral Bronchoscopy Industry Page\\n\\nNEW THIS YEAR\\n*Due to increased at\r\n tendance\\, the same hands-on session will be held on Saturday and Sunday.  \r\n \\n*All Attendee dinner on Saturday\\, April 11\\, 2026\\n\\nCredits\\nAMA PRA Ca\r\n tegory 1 Credits™ (7.25 hours)\\, Non-Physician Participation Credit (7.25 h\r\n ours)\\n\\nTarget Audience\\nSpecialties - Critical Care & Pulmonology\\, Oncol\r\n ogy\\nProfessions - Fellow/Resident\\, Non-Physician\\, Physician\\, Respirator\r\n y Therapist\\, Student\\n\\nObjectives\\nAt the conclusion of this activity\\, l\r\n earners should be able to:\\n\\n1. Describe the role of CBCT in diagnostic br\r\n onchoscopy.\\n2. Discuss the key differences and benefits of CBCT-guided bro\r\n nchoscopy as compared to other bronchoscopic techniques.\\n3. List the main \r\n features and general operation of CBCT as used in diagnostic bronchoscopy.\\\r\n n4. Identify potential methods for overcoming the challenge of obtaining ac\r\n cess to CBCT.\\n\\nAccreditation \\nIn support of improving patient care\\, Sta\r\n nford Medicine is jointly accredited by the Accreditation Council for Conti\r\n nuing Medical Education (ACCME)\\, the Accreditation Council for Pharmacy Ed\r\n ucation (ACPE)\\, and the American Nurses Credentialing Center (ANCC)\\, to p\r\n rovide continuing education for the healthcare team.\\n\\nCredit Designation\\\r\n nAmerican Medical Association (AMA)\\nStanford Medicine designates this Live\r\n  Activity for a maximum of 7.25 AMA PRA Category 1 Credits™. Physicians sho\r\n uld claim only the credit commensurate with the extent of their participati\r\n on in the activity.\\n\\nAmerican Board of Internal Medicine MOC Credit\\nSucc\r\n essful completion of this CME activity\\, which includes participation in th\r\n e evaluation component\\, enables the participant to earn up to 6.25 MOC poi\r\n nts in the American Board of Internal Medicine’s (ABIM) Maintenance of Cert\r\n ification (MOC) program. It is the CME activity provider’s responsibility t\r\n o submit participant completion information to ACCME for the purpose of gra\r\n nting ABIM MOC credit.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260411\r\nGEO:37.433075;-122.175049\r\nLOCATION:Stanford Hospital\r\nSEQUENCE:0\r\nSUMMARY:Cone Beam CT and Advanced Imaging in Peripheral Bronchoscopy\r\nUID:tag:localist.com\\,2008:EventInstance_51126453670826\r\nURL:https://events.stanford.edu/event/cone-beam-ct-and-advanced-imaging-in-\r\n peripheral-bronchoscopy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260411\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354009187\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260412T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910853355\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260411T183000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078576570\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260411T193000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699846851\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260411T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691983656\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260411T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682857380\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260411T223000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708341531\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260411T230000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260411T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668868614\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Join us for Gian Carlo Menotti's The Medium – a gripping one-ho\r\n ur chamber opera which confronts faith\\, the manipulation of the truth and \r\n its consequences.\\n\\nWe set the opera in early 20th century London\\, where \r\n Madame Flora\\, a charlatan psychic\\, makes money by pretending to connect h\r\n er customers with their dead loved ones. Her accomplices are her daughter M\r\n onica and the silent\\, adopted Toby. When Madame Flora begins to imagine th\r\n e spirits herself\\, her own truth unravels in madness with deadly repercuss\r\n ions. In an age increasingly shaped by distortion and manufactured truths\\,\r\n  The Medium remains chillingly relevant.\\n\\nAdmission Information\\n\\nGenera\r\n l – $21.90 | Seniors (65+) and Students – $11.70\\nPrice shown reflects tota\r\n l cost including online per-ticket fee.Stanford students with valid ID rece\r\n ive free admission to special previews on April 8 & 9 at 7:30pm.Nearest par\r\n king: Wilbur Parking Lot\r\nDTEND:20260412T040000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T023000Z\r\nGEO:37.426027;-122.16346\r\nLOCATION:Toyon Hall\r\nSEQUENCE:0\r\nSUMMARY:The Medium – Gian Carlo Menotti\r\nUID:tag:localist.com\\,2008:EventInstance_52205556848568\r\nURL:https://events.stanford.edu/event/the-medium-2\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260412\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294401482\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260412\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355545095\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Overview\\nThis course brings together experts in the field of a\r\n dvanced bronchoscopy to provide an introduction to beam computed tomography\r\n  (CBCT)\\, its application to bronchoscopy\\, and its role in future bronchos\r\n copic interventions. As treatments for lung cancer and other thoracic malig\r\n nancies continue to improve\\, there is increasing pressure for growth and a\r\n dvancement in the realm of diagnostic bronchoscopy. Cone beam computed tomo\r\n graphy (CBCT) is an advanced imaging modality with unparalleled capabilitie\r\n s for intraprocedural visualization and guidance. This course will provide \r\n insights and guidance into operationalizing a CBCT-guided bronchoscopy prog\r\n ram at the institutional level\\, and the interdisciplinary approach to adva\r\n nced bronchoscopy from the allied health professional's perspective. Lastly\r\n \\, the course offers several hands-on sessions for attendees to experience \r\n and become familiar with CBCT technologies.\\n\\nRegistration\\nPhysicians: $2\r\n 50\\nRN\\, RT\\, APP\\, and other healthcare professionals: $75\\nTrainees (Resi\r\n dents): $75\\nFellows:  **Complimentary registration \\; Must update CME Prof\r\n ile with institution/organization for verification and email Sonia VIttori \r\n svittori@stanford.edu for promotion code**\\n\\nIndustry Registration & Spons\r\n orship Opportunities: Please visit the Cone Beam CT & Advanced Imaging in P\r\n eripheral Bronchoscopy Industry Page\\n\\nNEW THIS YEAR\\n*Due to increased at\r\n tendance\\, the same hands-on session will be held on Saturday and Sunday.  \r\n \\n*All Attendee dinner on Saturday\\, April 11\\, 2026\\n\\nCredits\\nAMA PRA Ca\r\n tegory 1 Credits™ (7.25 hours)\\, Non-Physician Participation Credit (7.25 h\r\n ours)\\n\\nTarget Audience\\nSpecialties - Critical Care & Pulmonology\\, Oncol\r\n ogy\\nProfessions - Fellow/Resident\\, Non-Physician\\, Physician\\, Respirator\r\n y Therapist\\, Student\\n\\nObjectives\\nAt the conclusion of this activity\\, l\r\n earners should be able to:\\n\\n1. Describe the role of CBCT in diagnostic br\r\n onchoscopy.\\n2. Discuss the key differences and benefits of CBCT-guided bro\r\n nchoscopy as compared to other bronchoscopic techniques.\\n3. List the main \r\n features and general operation of CBCT as used in diagnostic bronchoscopy.\\\r\n n4. Identify potential methods for overcoming the challenge of obtaining ac\r\n cess to CBCT.\\n\\nAccreditation \\nIn support of improving patient care\\, Sta\r\n nford Medicine is jointly accredited by the Accreditation Council for Conti\r\n nuing Medical Education (ACCME)\\, the Accreditation Council for Pharmacy Ed\r\n ucation (ACPE)\\, and the American Nurses Credentialing Center (ANCC)\\, to p\r\n rovide continuing education for the healthcare team.\\n\\nCredit Designation\\\r\n nAmerican Medical Association (AMA)\\nStanford Medicine designates this Live\r\n  Activity for a maximum of 7.25 AMA PRA Category 1 Credits™. Physicians sho\r\n uld claim only the credit commensurate with the extent of their participati\r\n on in the activity.\\n\\nAmerican Board of Internal Medicine MOC Credit\\nSucc\r\n essful completion of this CME activity\\, which includes participation in th\r\n e evaluation component\\, enables the participant to earn up to 6.25 MOC poi\r\n nts in the American Board of Internal Medicine’s (ABIM) Maintenance of Cert\r\n ification (MOC) program. It is the CME activity provider’s responsibility t\r\n o submit participant completion information to ACCME for the purpose of gra\r\n nting ABIM MOC credit.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260412\r\nGEO:37.433075;-122.175049\r\nLOCATION:Stanford Hospital\r\nSEQUENCE:0\r\nSUMMARY:Cone Beam CT and Advanced Imaging in Peripheral Bronchoscopy\r\nUID:tag:localist.com\\,2008:EventInstance_51126453671851\r\nURL:https://events.stanford.edu/event/cone-beam-ct-and-advanced-imaging-in-\r\n peripheral-bronchoscopy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260412\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354009188\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260413T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910854380\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260412T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809530741\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260412T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51969417151555\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260412T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691986729\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260412T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682858405\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Welcome to Sankofa Sunday: University Praise & Worship at Stanf\r\n ord! The history of Black Church at Stanford dates back to 1989 when severa\r\n l students and the then Associate Dean Rev. Floyd Thompkins formed a worshi\r\n pping community to meet the spiritual and cultural yearnings of the Black C\r\n ommunity at Stanford. After a robust History the service was discontinued u\r\n ntil 2022 when the need once again led by students and staff began to reviv\r\n e Black Church as an occasional service once a month.\r\nDTEND:20260412T213000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T203000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Sankofa Sundays: University Praise & Worship\r\nUID:tag:localist.com\\,2008:EventInstance_51958646498326\r\nURL:https://events.stanford.edu/event/sankofa-sundays-university-praise-wor\r\n ship\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:在博物馆导览员的带领下，探索坎特艺术中心的收藏品。导览员将为您介绍来自不同文化和不同时期的精选作品。\\n\\n欢迎您参与对话，分\r\n 享您对游览过程中所探讨主题的想法，或者按照自己的舒适程度参与互动。\\n\\n导览免费，但需提前登记。请通过以下链接选择并 RSVP 您希望参加的日期。\\\r\n n\\nFebruary 8\\, 2026: https://thethirdplace.is/event/February\\n\\nMarch 8\\, \r\n 2026: https://thethirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thet\r\n hirdplace.is/event/April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/M\r\n ay\\n\\nJune 14\\, 2026: https://thethirdplace.is/event/June\\n\\n______________\r\n _____________________________\\n\\nExplore the Cantor's collections with a mu\r\n seum engagement guide who will lead you through a selection of works from d\r\n ifferent cultures and time periods.\\n\\n Participants are welcomed to partic\r\n ipate in the conversation and provide their thoughts on themes explored thr\r\n oughout the tour but are also free to engage at their own comfort level. \\n\r\n \\n Tours are free of charge but require advance registration. Please select\r\n  and RSVP for your preferred date using the links below.\\n\\nFebruary 8\\, 20\r\n 26: https://thethirdplace.is/event/February\\n\\nMarch 8\\, 2026: https://thet\r\n hirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thethirdplace.is/event\r\n /April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/May\\n\\nJune 14\\, 20\r\n 26: https://thethirdplace.is/event/June\r\nDTEND:20260412T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Chinese \r\nUID:tag:localist.com\\,2008:EventInstance_51897285070922\r\nURL:https://events.stanford.edu/event/public-tour-cantor-highlights-chinese\r\n -language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:This program is co-sponsored by the Stanford Historical Society\r\n  and the Stanford Department of Music.\\n\\nIn-person family event. Children \r\n are welcome. Free and open to the public. Open seating.\\nRegistration requi\r\n red. Register now.\\n\\nJoin us on a sentimental journey back in time.\\n\\nIn \r\n homage to Stanford’s rich musical heritage\\, Professor Steve Sano will dire\r\n ct the Stanford Chamber Chorale as they perform selections from the heyday \r\n of the Stanford Songbook (1890-1915). Their performances will be interwoven\r\n  with historical commentaries and rarely seen images from the University Ar\r\n chives\\, followed by light refreshments and a carillon recital by Universit\r\n y Carillonneur Timothy Zerlang. Dr. Zerlang will perform selections from th\r\n e Stanford Songbook from atop Hoover Tower.\\n\\nProgram:\\nHail\\, Stanford\\, \r\n Hail (1893)\\nCome Join the Band (1901)\\nStanford Red\\nCardinal Forever\\, a \r\n solo piano rag\\nSons of the Stanford Red (1910)\\nThat Stanford Rag (1915)\\,\r\n  from the Junior Opera\\, “The College Prince”\\nOne\\, Two\\, Three\\, Four (19\r\n 06)\\nThe Victorious Cardinal\\nThe Cardinal Fighting Song\\nStanford Mandalay\r\n \\n\\nSteve Sano (MA '91\\, DMA '94) is Professor of Music at Stanford\\, and t\r\n he Professor Harold C. Schmidt Director of Choral Studies\\, in which capaci\r\n ty he conducts the Stanford Chamber Chorale and the Symphonic Chorus. Profe\r\n ssor Sano has been a Bass University Fellow in Undergraduate Studies\\, serv\r\n ed as the Faculty Director of Asian American Studies\\, and is the recipient\r\n  of the 2005 Deans Award for Distinguished Teaching. He has appeared as gue\r\n st conductor with many of the world’s leading choral organizations\\, and is\r\n  a scholar and performer of Hawaiian slack key guitar.  \\n\\nTimothy Zerlang\r\n  (DMA ’89) is University Carillonneur and a lecturer at the Stanford Depart\r\n ment of Music. He began playing the Hoover Tower carillon in 1984 under the\r\n  tutelage of Dr. Jame B. Angell. Upon Dr. Angell’s retirement in 1990\\, Dr.\r\n  Zerlang took over as university carillonneur and has served in that capaci\r\n ty ever since\\; playing at commencements\\, convocations and other universit\r\n y events and public occasions. Dr. Zerlang is an Advanced Lecturer in the D\r\n epartment of Music.\\n\\nThe Stanford Chamber Chorale is Stanford’s premier s\r\n mall vocal ensemble. Known for its “exquisite singing with polished refinem\r\n ent\\,” the Chorale performs internationally and has been nominated for a nu\r\n mber of Grammy Awards. Its 25 members are drawn from both the undergraduate\r\n  and graduate populations at Stanford.\r\nDTEND:20260412T233000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T210000Z\r\nGEO:37.432044;-122.166135\r\nLOCATION:Bing Concert Hall\r\nSEQUENCE:0\r\nSUMMARY:What We Sang Then: A Historic Recital of Favorites from the Stanfor\r\n d Songbook\r\nUID:tag:localist.com\\,2008:EventInstance_50729331982541\r\nURL:https://events.stanford.edu/event/stanford-songbook-and-carillon-recita\r\n l-a-musical-tribute-to-tradition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260412T223000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708343580\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260412T230000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668870663\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy the melodic chiming of the 48 bronze bells serenading cam\r\n pus today.  The bells can be heard outdoors anywhere in the vicinity of Hoo\r\n ver Tower.\\n\\nThe performance is free and open to the public. \\n\\nAbout the\r\n  Carillon\\n\\nNamed in honor of First Lady and Stanford alumna\\, Lou Henry H\r\n oover\\, the carillon is composed of 48 bells located on the 14th floor of H\r\n oover Tower.  The carillon was a gift from the Belgian-American Education F\r\n oundation\\, which symbolizes an overall purpose to promote peace and person\r\n al freedom and to foster ideas that strengthen a free society.\\n\\nFor more \r\n on the history of the Hoover Carillon\\, click here.\\n\\nIf you are concerned\r\n  about a scheduling conflict\\, please reach out to towercarillon@stanford.e\r\n du.\r\nDTEND:20260412T230000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260412T223000Z\r\nGEO:37.42868;-122.16835\r\nLOCATION:Hoover Tower\r\nSEQUENCE:0\r\nSUMMARY:Lou Henry Hoover Carillon Performance \r\nUID:tag:localist.com\\,2008:EventInstance_50037818701633\r\nURL:https://events.stanford.edu/event/lou_henry_hoover_carillon_performance\r\n _5127\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260413\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354010213\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260414T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910855405\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260414T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382831817\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event is hosted by the Indo-Pacific Policy Lab.\\n\\nAbout t\r\n he event: In Retrench\\, Defend\\, Compete\\, Charles L. Glaser advances a tho\r\n ught-provoking strategy for securing vital US interests in the face of Chin\r\n a's rise.\\n\\nMany believe China's ascent will drive it to war with the Unit\r\n ed States. Yet this is far from inevitable\\; geography and nuclear weapons \r\n should ensure US security. The real danger\\, Glaser contends\\, lies in East\r\n  Asia's territorial disputes\\, especially over Taiwan. To reduce the risk o\r\n f war\\, Glaser makes a bold case for ending US security commitments to Taiw\r\n an and carefully calibrating its policies on protecting South China Sea mar\r\n itime features. The United States should also strengthen its alliances with\r\n  Japan and South Korea and eliminate unnecessarily provocative nuclear and \r\n conventional weapons policies. These measures\\, Glaser argues\\, would defus\r\n e China's biggest security concerns while preserving America's core strateg\r\n ic interests.\\n\\nFusing theoretical insights with policy analysis\\, Retrenc\r\n h\\, Defend\\, Compete lays out a distinctive and compelling approach for man\r\n aging the world's most consequential geopolitical rivalry—before it's too l\r\n ate.\\n\\nAbout the speaker: Charles L. Glaser is a Senior Fellow in the MIT \r\n Security Studies Program and Professor Emeritus of Political Science and In\r\n ternational Affairs at George Washington University. He was the Founding Di\r\n rector of the Elliott School's Institute for Security and Conflict Studies.\r\n \\n\\nGlaser studies international relations theory and international securit\r\n y policy. His research focuses on defensive realism and deterrence theory\\,\r\n  as well as U.S. security policy regarding China\\, nuclear weapons\\, and en\r\n ergy security.\\n\\nHis books include Retrench\\, Defend\\, Compete: Securing A\r\n merica’s Future Against a Rising China\\, Rational Theory of International P\r\n olitics and Analyzing Strategic Nuclear Policy\\; and two co-edited volumes—\r\n Managing U.S. Nuclear Operations in the 21st Century and Crude Strategy.\r\nDTEND:20260413T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T190000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Book Talk: Retrench\\, Defend\\, Compete: Securing America’s Future A\r\n gainst a Rising China\r\nUID:tag:localist.com\\,2008:EventInstance_52197643839290\r\nURL:https://events.stanford.edu/event/book-talk-retrench-defend-compete-sec\r\n uring-americas-future-against-a-rising-china\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Join us for a noontime webinar to discover how your daily diet \r\n impacts not just your physical health\\, but also your brain function and em\r\n otional resilience.\\n\\nYou will learn how the foods we eat influence our gu\r\n t microbiome\\, which communicates with our immune system and ultimately aff\r\n ects neurotransmitter signaling in our brains. We'll delve into the benefit\r\n s of the Mediterranean Diet for gut health and how to incorporate its mood-\r\n boosting principles into any lifestyle.\\n\\nWe'll also uncover how sugar and\r\n  refined carbohydrates affect hormones and cortisol levels. You will learn \r\n practical strategies to manage the blood sugar effects of these foods\\, ena\r\n bling you to consume carbohydrates wisely for optimal health and well-being\r\n .\\n\\nBy the end of the session\\, you'll have a deeper understanding of the \r\n science behind nutrition's impact on the brain and mood\\, along with practi\r\n cal tips for enhancing your well-being through diet.\\n\\nThis class will be \r\n recorded and a one-week link to the recording will be shared with all regis\r\n tered participants. To receive incentive points\\, attend at least 80% of th\r\n e live session or listen to the entire recording within one week.  Request \r\n disability accommodations and access info.\\n\\nClass details are subject to \r\n change.\r\nDTEND:20260413T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Food and Mood\r\nUID:tag:localist.com\\,2008:EventInstance_52220231443266\r\nURL:https://events.stanford.edu/event/food-and-mood-7947\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour,Lecture/Presentation/Talk\r\nDESCRIPTION:Join Jason Linetzky\\, Museum Director at the Anderson Collectio\r\n n\\, on this special tour of Spotlights. \\n\\nThe Anderson Collection debuts \r\n a spotlight installation of celebrated artist—Susan Rothenberg. For the fir\r\n st time\\, visitors can experience focused presentations of her work at the \r\n museum\\, with multiple pieces brought into focus in a dedicated gallery spa\r\n ce. \\n\\nRSVP here.\r\nDTEND:20260413T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T200000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, Upstairs Galleries\r\nSEQUENCE:0\r\nSUMMARY:Curator Talk | Spotlights with Jason Linetzky\r\nUID:tag:localist.com\\,2008:EventInstance_51305241278864\r\nURL:https://events.stanford.edu/event/April-curator-talk-spotlights-with-ja\r\n son-linetzky\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDTEND:20260414T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T230000Z\r\nGEO:37.431462;-122.174561\r\nLOCATION:Clark Center\\, Clark Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Biology Seminar Series Nettie Stevens Lecture : Angelike Stathopoul\r\n os “Chromatin coordination and feedback enable precise gene regulation duri\r\n ng development”\r\nUID:tag:localist.com\\,2008:EventInstance_52278437941192\r\nURL:https://events.stanford.edu/event/biology-seminar-series-nettie-stevens\r\n -lecture-angelike-stathopoulos-chromatin-coordination-and-feedback-enable-p\r\n recise-gene-regulation-during-development\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Continue the conversation: Join the speaker for a complimentary\r\n  dinner in the Theory Center (second floor of the neurosciences building) a\r\n fter the seminar\\n\\nNeural circuits mediating social memory behaviorsAbstra\r\n ct coming soon\\n\\n \\n\\nSteven SiegelbaumColumbia University\\n\\nVisit Lab We\r\n bsite \\n\\nHosted by Sabrina Liu (Stanford Profile)\\n\\n \\n\\nAbout the Mind\\,\r\n  Brain\\, Computation\\, and Technology (MBCT) Seminar SeriesThe Stanford Cen\r\n ter for Mind\\, Brain\\, Computation and Technology (MBCT) Seminars explore w\r\n ays in which computational and technical approaches are being used to advan\r\n ce the frontiers of neuroscience. \\n\\nThe series features speakers from oth\r\n er institutions\\, Stanford faculty\\, and senior training program trainees. \r\n Seminars occur about every other week\\, and are held at 4:00 pm on Mondays \r\n at the Cynthia Fry Gunn Rotunda - Stanford Neurosciences E-241. \\n\\nQuestio\r\n ns? Contact neuroscience@stanford.edu\\n\\nSign up to hear about all our upco\r\n ming events\r\nDTEND:20260414T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260413T230000Z\r\nLOCATION:Stanford Neurosciences Building | Gunn Rotunda (E241)\r\nSEQUENCE:0\r\nSUMMARY:MBCT Seminar: Steven Siegelbaum - Neural circuits mediating social \r\n memory behaviors\r\nUID:tag:localist.com\\,2008:EventInstance_50919730119073\r\nURL:https://events.stanford.edu/event/mbct-seminar-steven-siegelbaum-neural\r\n -circuits-mediating-social-memory-behaviors\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260414T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430657394\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260414\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354011238\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting,Performance\r\nDESCRIPTION:In partnership with the Vice Provost for Graduate Education Gra\r\n duate Student Appreciation Week\\n\\nCome out and enjoy a specialty coffee wh\r\n ile you chat about teaching with CTL! We want to show our appreciation for \r\n the great work that you all do as teaching assistants and instructors by of\r\n fering a specialty coffee to the first 30 people who engage with CTL repres\r\n entatives at Voyager Coffee at the times listed below. We look forward to s\r\n eeing you there.\\n\\nTuesday\\, April 14\\, 9–10 a.m. at Voyager CoffeeThursda\r\n y\\, April 16\\, 1–2 p.m. at Voyager CoffeeVoyager Coffee is located on the G\r\n round Level\\, Computing and Data Science (CoDa)\\, 389 Jane Stanford Way.\r\nDTEND:20260414T170000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T160000Z\r\nGEO:37.430043;-122.171561\r\nLOCATION:Voyager Coffee\\, Ground Level\\, Computing and Data Science (CoDa)\r\nSEQUENCE:0\r\nSUMMARY:CTL Graduate Teaching Coffee Breaks\r\nUID:tag:localist.com\\,2008:EventInstance_52259679664484\r\nURL:https://events.stanford.edu/event/ctl-graduate-teaching-coffee-breaks\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for the 13th annual Stanford Center on Longevity Design\r\n  Challenge Finals! \\n\\nPrevention by Design- Creating Healthy Lifestyles fo\r\n r Long Lives: University students globally designed solutions to empower in\r\n dividuals to lead healthier\\, longer lives through preventive health strate\r\n gies.\\n\\nThis free event will be held in-person in Li Ka Shing Center at St\r\n anford University. Everyone is welcome and encouraged to attend! It will fe\r\n ature:\\n\\nPitches by the finalists showcasing their innovative designsA key\r\n note by Jamie Zeitzer\\, Professor (Research) of Psychiatry and Behavioral S\r\n ciences (Sleep Medicine)\\, Stanford UniversityLunch and networking opportun\r\n itiesAwards ceremony (1st place: $10\\,000\\, 2nd place: $5\\,000\\, 3rd place:\r\n  $2\\,000)Register here: Stanford Center on Longevity Design Challenge 2026 \r\n Finals April 14\\, 2026\\n\\nCome all day or to individual events. Agenda fort\r\n hcoming.\\n\\nParking: The closest visitor and commuter parking is located in\r\n  the Stock Farm Garage: 360 Oak Rd\\, Stanford\\, CA 94305. \\n\\nThe Stanford \r\n Center on Longevity Design Challenge is a global competition aimed at encou\r\n raging students to design products and services to improve the lives of peo\r\n ple across all ages. Established in 2013\\, the Challenge is focused on ways\r\n  to motivate and empower people in their daily lives both inside their home\r\n s and in their community.\r\nDTEND:20260414T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T160000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, Berg Hall C\r\nSEQUENCE:0\r\nSUMMARY:FINALS Stanford Center on Longevity Design Challenge 2026\r\nUID:tag:localist.com\\,2008:EventInstance_52197261950367\r\nURL:https://events.stanford.edu/event/finals-stanford-center-on-longevity-d\r\n esign-challenge-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260415T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910856430\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260415T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382835914\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260415T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068295616\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260414T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491621791\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Abstract:  Quantum platforms are approaching a scale at which t\r\n hey will enable the realization of a vast number of quantum circuits. Some \r\n of these will solve computational problems of interest to industry and comm\r\n erce\\; others will address longstanding questions about quantum systems\\; a\r\n nd still others will vindicate Wigner and Dyson. Yet even this will leave a\r\n mple room for posing entirely new questions about many-body quantum systems\r\n .In this talk\\, I will describe two possibilities. The first is a concrete \r\n proposal: defining and studying quantum games of various kinds. The second \r\n is a broader vision: using quantum platforms in a “discovery mode\\,” analog\r\n ous to the role particle accelerators have played in uncovering new particl\r\n e physics.\\n\\nShivaji Sondhi is a theoretical condensed matter physicist wh\r\n ose work spans quantum many-body physics and statistical mechanics. Born in\r\n  India\\, he received his PhD from UCLA and spent twenty-five years on the f\r\n aculty at Princeton University. He is currently the Wykeham Professor of Ph\r\n ysics in the Rudolf Peierls Centre for Theoretical Physics at the Universit\r\n y of Oxford. His research has made foundational contributions to the quantu\r\n m Hall effect\\, including the discovery of skyrmions\\; to quantum magnetism\r\n \\, sharing the Europhysics Prize for the discovery of magnetic monopoles\\; \r\n and to the theoretical discovery of time crystals. His work continues to sh\r\n ape modern understanding of emergent phenomena in quantum matter.\r\nDTEND:20260414T233000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T223000Z\r\nGEO:37.428953;-122.172839\r\nLOCATION:Hewlett Teaching Center\\, 201\r\nSEQUENCE:0\r\nSUMMARY:Applied Physics/Physics Colloquium: Shivaji Sondhi- \"How Might Quan\r\n tum Platforms Reshape Many-Body Physics?\" \r\nUID:tag:localist.com\\,2008:EventInstance_52189915484057\r\nURL:https://events.stanford.edu/event/applied-physicsphysics-colloquium-shi\r\n vaji-sondhi-how-might-quantum-platforms-reshape-many-body-physics\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Science is full of metaphors. From black holes \"eating\" stars\\,\r\n  to yeast \"cell factories\"\\, to brain \"circuitry\" —the language researchers\r\n  use has the power to shape how ideas are received and remembered. Whether \r\n you're crafting a grant proposal\\, communicating across disciplines\\, or bu\r\n ilding a public profile\\, the ability to translate complex research into re\r\n sonant\\, accessible ideas sets strong scientists apart. Over 3 weekly sessi\r\n ons\\, you'll learn how to build a science metaphor from the ground up—notic\r\n ing the metaphors already embedded in your field\\, evaluating what makes th\r\n em effective or limiting\\, and developing your own with intention.You'll\\nl\r\n eave with a sharper communication toolkit and a deeper understanding of how\r\n  language shapes the way your work is understood and valued.\\n\\nIntensity L\r\n evel: Mild intensity\\n\\nMultiple topics are covered at a steady pace\\, with\r\n  in-class activities requiring some preparation. Some out-of-class work is \r\n required\\, and regular in-class participation is expected. Students will de\r\n velop a moderate level of skill-building during the course.Facilitated by: \r\n Kel Haung\\, student\\n\\nDetails: \\n\\nWhen: April 14\\, 21\\, 28 (Tuesdays)\\, 4\r\n -6PM\\n\\nOpen to enrolled graduate students at any stage in any discipline o\r\n r degree program. Postdocs will be accepted if space is available\\, but pri\r\n ority is given to graduate students.\\n\\nMetaphors in Science is an in-perso\r\n n\\, three-part workshop. Session dates are Tuesday's April 14\\, 21\\,28 from\r\n  4-6PM. Space is limited. Due to the workshop’s interactive format\\, full p\r\n articipation in all three sessions is required. Dinner will be served. \\n\\n\r\n If you are accepted to this workshop\\, you must confirm your place by submi\r\n tting a Student Participation Fee Agreement\\, which authorizes VPGE to char\r\n ge $50 to your Stanford bill – only if you do not fully participate in the \r\n event. You will receive a link to the Agreement and instructions if you are\r\n  offered a place.\\n\\nApplication deadline: Tuesday\\, April 7th @11:59PM PT.\r\n \\n\\nApply here\r\nDTEND:20260415T010000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T230000Z\r\nLOCATION:EVGR 144B\r\nSEQUENCE:0\r\nSUMMARY:Metaphors in Science: A Researcher's Guide to Communicating Ideas T\r\n hat Stick\r\nUID:tag:localist.com\\,2008:EventInstance_52198127517675\r\nURL:https://events.stanford.edu/event/metaphors-in-science-a-researchers-gu\r\n ide-to-communicating-ideas-that-stick\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, April 14\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\, o\r\n r Zoom for a presentation by Charles Rudin\\, MD\\, PhD\\, deputy director of \r\n the Memorial Sloan Kettering Cancer Center. \\n\\nThe event is open to Stanfo\r\n rd Cancer Institute members\\, postdocs\\, fellows\\, and students\\, as well a\r\n s Stanford University and Stanford Medicine faculty\\, trainees\\, and staff \r\n interested in basic\\, translational\\, clinical\\, and population-based cance\r\n r research.\\n\\nRegistration is encouraged.\r\nDTEND:20260415T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260414T230000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: Insights into Sm\r\n all Cell Lung Cancer\r\nUID:tag:localist.com\\,2008:EventInstance_51288461802914\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-insights-into-small-cell-lung-cancer\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for this Global Health Conversation with Dr. Mamphela R\r\n amphele\\, a medical doctor\\, social anthropologist\\, and global public serv\r\n ant. She was co-founder of The Black Consciousness Movement with Steve Biko\r\n  that reignited the struggle for freedom in South Africa.\\n\\nIn conversatio\r\n n with Global Health Faculty Fellow and veteran interviewer Paul Costello\\,\r\n  Dr. Ramphele will discuss her life\\, career\\, and insights on activism and\r\n  leadership in global health worldwide.\\n\\nAbout Dr. Ramphele:\\n\\nMamphela \r\n Ramphele is a world-renowned figure with an outstanding career as an activi\r\n st\\, medical doctor\\, academic\\, businesswoman\\, and thought leader. She wa\r\n s Co-President of the Club of Rome from October 2018 until end of term in N\r\n ovember 2023. She is the Co-Founder & Global Brand Ambassador of ReimagineS\r\n A since 2016. Previously\\, she served as a Managing Director at the World B\r\n ank from 2000 to 2004 and as Vice-Chancellor of the University of Cape Town\r\n \\, South Africa\\, from 1996 to 2000.\\n\\nShe is a medical doctor\\, a social \r\n anthropologist\\, and global public servant. She was Vice Chancellor of the \r\n University of Cape Town\\, a Managing Director at the World Bank\\, and non-E\r\n xecutive Director of many large companies and Civil Society Organisations. \r\n She is an author and recipients of many awards including 24 honorary degree\r\n s.\\n\\nDate: Tuesday April 14th\\, 5-6pm\\n\\nLocation: Li Ka Shing Center\\, LK\r\n SC 320\\n\\nIn-person only.\\n\\nIf you have questions\\, please email globalhea\r\n lth@stanford.edu.\r\nDTEND:20260415T010000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T000000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, 320\r\nSEQUENCE:0\r\nSUMMARY:A Global Health Conversation With Dr. Mamphela Ramphele\r\nUID:tag:localist.com\\,2008:EventInstance_52059866053033\r\nURL:https://events.stanford.edu/event/a-global-health-conversation-with-dr-\r\n mamphela-ramphele\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260415T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663083958\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260415T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622317967\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewA Premier Educational Experience in the Heart of Wine C\r\n ountry\\n\\nJoin us in the beautiful and serene setting of wine country for t\r\n he 4th Annual Updates in Gastroenterology and Hepatology—a dynamic and enga\r\n ging course designed to bring you the latest advances in the diagnosis and \r\n management of gastrointestinal and liver disorders. The program incorporate\r\n s cutting-edge medical education with the opportunity to unwind amidst vine\r\n yards\\, rolling hills\\, and exceptional hospitality.\\n\\nTailored for gastro\r\n enterologists\\, hepatologists\\, primary care physicians\\, internists\\, fami\r\n ly practitioners\\, nurse practitioners\\, physician assistants\\, and nurses\\\r\n , this comprehensive one-day course offers evidence-based updates in a pict\r\n uresque\\, retreat-like atmosphere perfect for learning and professional con\r\n nection.\\n\\nRegistrationEarly Bird Registration (through January 15\\, 2026)\r\n \\nPhysicians: $595\\nAdvanced Practice Providers: $395\\nTrainees: $150\\nIndu\r\n stry: $895\\n\\nJanuary 16\\, 2026 through March 15\\, 2026\\nPhysicians: $695\\n\r\n Advanced Practice Providers: $495\\nTrainees: $150\\nIndustry: $895\\n\\n March\r\n  16\\, 2026 hrough April 15\\, 2026\\nPhysicians: $795\\nAdvanced Practice Prov\r\n iders: $595\\nTrainees: $150\\nIndustry: $895\\n\\nSTAP-eligible employees can \r\n use STAP funds towards the registration fees for this activity.  Complete t\r\n he STAP Reimbursement Request Form and submit to your department administra\r\n tor. \\n\\nCreditsAMA PRA Category 1 Credits™ (20.00 hours)\\, AAPA Category 1\r\n  CME credits (20.00 hours)\\, ANCC Contact Hours (20.00 hours)\\, Non-Physici\r\n an Participation Credit (20.00 hours)\\n\\nTarget AudienceSpecialties - Famil\r\n y Medicine & Community Health\\, Gastroenterology & Hepatology\\, Internal Me\r\n dicine\\, Primary Care & Population Health\\, SurgeryProfessions - Advance Pr\r\n actice Nurse (APN)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\, \r\n Physician Associate\\, Registered Nurse (RN)\\, Student ObjectivesAt the conc\r\n lusion of this activity\\, learners should be able to:\\n1. Understand advanc\r\n es in therapeutic endoscopy and approach to pancreaticobiliary disease\\n2. \r\n Integrate updates in chronic liver disease and liver transplantation into c\r\n urrent management of patients\\n3. Review the most recent screening and surv\r\n eillance protocols for gastrointestinal malignancy\\n4. Evaluate medical and\r\n  surgical treatment approaches for gastroesophageal reflux and other esopha\r\n geal disorders\\n5. Incorporate new diagnostics and therapeutics for managem\r\n ent of inflammatory bowel disease\\n6. Describe changes in approach to small\r\n  and large bowel disorders\\n7. Analyze the complaint of dysphagia and other\r\n  symptoms of dysmotility with updated diagnostic and therapeutic frameworks\r\n \\n\\nAccreditationIn support of improving patient care\\, Stanford Medicine i\r\n s jointly accredited by the Accreditation Council for Continuing Medical Ed\r\n ucation (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\,\r\n  and the American Nurses Credentialing Center (ANCC)\\, to provide continuin\r\n g education for the healthcare team.  \\n\\nCredit Designation \\nAmerican Med\r\n ical Association (AMA) \\nStanford Medicine designates this Live Activity fo\r\n r a maximum of 20.00 AMA PRA Category 1 CreditsTM.  Physicians should claim\r\n  only the credit commensurate with the extent of their participation in the\r\n  activity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\nStanford Medic\r\n ine designates this live activity for a maximum of 20 ANCC contact hours.  \r\n \\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStanford Medicine Prov\r\n ider approved by the California Board of Registered Nursing\\, Provider Numb\r\n er 17874\\, for 20.00 contact hours.\\n\\nAmerican Academy of Physician Associ\r\n ates (AAPA) - Live \\nStanford Medicine has been authorized by the American \r\n Academy of PAs (AAPA) to award AAPA Category 1 CME credit for activities pl\r\n anned in accordance with AAPA CME Criteria. This live activity is designate\r\n d for 20 AAPA Category 1 CME credits. PAs should only claim credit commensu\r\n rate with the extent of their participation.  \\n\\nAmerican Board of Interna\r\n l Medicine MOC Credit \\nSuccessful completion of this CME activity\\, which \r\n includes participation in the evaluation component\\, enables the participan\r\n t to earn up to 20 MOC points in the American Board of Internal Medicine’s \r\n (ABIM) Maintenance of Certification (MOC) program. It is the CME activity p\r\n rovider’s responsibility to submit participant completion information to AC\r\n CME for the purpose of granting ABIM MOC credit.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260415\r\nLOCATION:Sonoma\\, CA\r\nSEQUENCE:0\r\nSUMMARY:4th Annual Updates in Gastroenterology & Hepatology\r\nUID:tag:localist.com\\,2008:EventInstance_50943099684438\r\nURL:https://events.stanford.edu/event/4th-annual-updates-in-gastroenterolog\r\n y-hepatology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260415\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294405581\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260415\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355546120\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260415\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354012263\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260415\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter Cardinal Care Petition for Early Cancellation due to\r\n  Degree Conferral deadline\\; see the Cardinal Care website and Student Heal\r\n th Matters for more information.\r\nUID:tag:localist.com\\,2008:EventInstance_49463620722802\r\nURL:https://events.stanford.edu/event/winter-quarter-cardinal-care-petition\r\n -for-early-cancellation-due-to-degree-conferral-deadline-see-the-cardinal-c\r\n are-website-and-student-health-matters-for-more-information\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a winter quarter Cardinal Care P\r\n etition for early cancellation due to degree conferral deadline. See the Ca\r\n rdinal Care website and Student Health Matters for more information.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260415\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Winter Quarter: Cardinal Care Early Cancellation Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472525079596\r\nURL:https://events.stanford.edu/event/winter-quarter-cardinal-care-early-ca\r\n ncellation-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260416T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910857455\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This event is co-sponsored by the Center for South Asia\\, the C\r\n enter for African Studies\\, and the Program in Feminist\\, Gender\\, and Sexu\r\n ality Studies at Stanford University.\\n\\nPlease note that there will be a l\r\n ecture as part of this 2-day exhibition. Click here for lecture details. \\n\r\n \\nThis exhibition will take place on Wednesday April 15 and Thursday\\, Apri\r\n l 16\\, 2026. Exact times TBC. \\n\\nThere will be a private tour \\n\\nAbout th\r\n e event \\nDrawing on her 2025 multimedia exhibition commemorating the 180th\r\n  anniversary of Indian presence in Trinidad and Tobago\\, Dr. Gabrielle Jame\r\n la Hosein explores the botanical as an imaginative phyto-archive. She exami\r\n nes how reworked forms of folk art can center the contribution of Indian in\r\n dentured labourers to the Caribbean landscape through the seeds\\, spices\\, \r\n and plant cuttings they carried in the hold of ships between 1838 and 1917.\r\n  In this history\\, visualised especially through portraiture\\, plants emerg\r\n e as co-migrants with their own stories of subjectivity\\, settlement and ad\r\n aptation.\\n\\nThis phyto-migration is memorialised in jahajin bandals (ship-\r\n sister bundles) that visualise Indian women’s transoceanic practices of bot\r\n anical home-making. Women’s art forms such as mehndi (henna) document and r\r\n eimagine plants like moringa\\, pumpkin\\, bitter gourd\\, curry leaf\\, tamari\r\n nd\\, and spinach as archives of rural life and women’s labour. Through jewe\r\n llery\\, rangoli designs\\, and community film-making\\, Hosein engages in emb\r\n odied theorising that departs from Euro-creole landscape traditions\\, unfol\r\n ding how stories of plantation survival entwine landscape\\, culture\\, famil\r\n y\\, and love.\\n\\nIn dialogue with movements for reparation and repair\\, Hos\r\n ein speculatively recovers erased narratives\\, challenges sugar’s dominance\r\n  in Caribbean praxes of remembering\\, and makes visible mixed-race motherin\r\n g and queer abundance. The botanical thus becomes a living archive of the a\r\n fterlife of indenture. By creatively imagining Indo-Caribbean histories\\, f\r\n eminine aesthetics\\, and agricultural traditions\\, Hosein tells a deeply pe\r\n rsonal\\, familial\\, and political story of women’s labour\\, the gender diff\r\n erential economies of cane and rice\\, and women’s generational transformati\r\n ons in the post-indenture Caribbean.\\n\\nAbout the speaker\\nDr. Gabrielle Ja\r\n mela Hosein is an Indo-Caribbean feminist scholar\\, writer and activist who\r\n  received the Medal for the Development of Women (Gold) in 2022 for her con\r\n tribution to Trinidad and Tobago. She is Senior Lecturer and former Head at\r\n  the Institute for Gender and Development Studies\\, The University of the W\r\n est Indies\\, St. Augustine (2016–2020)\\, former Vice-Chair of the Equal Opp\r\n ortunity Commission (2020-2023) and has been involved in Caribbean feminist\r\n  organising for thirty years. She co-edited the collections Indo-Caribbean \r\n Feminisms: Charting Crossings in Geography\\, Discourse\\, and Politics (CRGS\r\n  2012) and Indo-Caribbean Feminist Thought: Genealogies\\, Theories\\, Enactm\r\n ents (2016). Her publications include\\, “No Pure Place for Resistance: Refl\r\n ections on Being Ms. Mastana Bahar 2000 (2011)\\, “Modern Negotiations: Indo\r\n -Trinidadian Girlhood and Gender Differential Creolization” (2012)\\, “Democ\r\n racy\\, Gender and Indian Muslim Modernity in Trinidad” (2015)\\, “A Letter t\r\n o My Great-Grandmother” (2018)\\, “Post-Indentureship Caribbean Feminist Tho\r\n ught\\, Transoceanic Feminisms\\, and the Convergence of Asymmetries” (2020)\\\r\n , The Botanical Afterlives of Indenture: Mehndi as Imaginative Visual Archi\r\n ve (2024)\\, and the poem “Chutney Love” (2019). Her blog\\, Diary of a Mothe\r\n ring Worker\\, has been published as a national newspaper column since 2012\\\r\n , and includes numerous columns on Indo-Caribbean gender relations and femi\r\n nisms. The exhibition\\, The Botanical Afterlife of Indenture: Imaginative A\r\n rchives\\, was first held at the Art Society of Trinidad and Tobago in June \r\n 2025.\\n\\nPhoto: The photographer credit is Abigail Hadeed\r\nDTEND:20260416T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T160000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:The Botanical Afterlife of Indenture: Indian Women's Labour and Ima\r\n ginative Phyto-Archives (2-day Exhibition) \r\nUID:tag:localist.com\\,2008:EventInstance_51376240599179\r\nURL:https://events.stanford.edu/event/the-botanical-afterlife-of-indenture-\r\n indian-womens-labour-and-imaginative-phyto-archives-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260415T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105026177\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Textiles are intimate creations\\, worn on our bodies or otherwi\r\n se integrated into daily life. They serve as functional and decorative item\r\n s while also acting as dynamic archives of cultural history\\, memory\\, and \r\n identity. Highly skilled and labor-intensive processes are involved in thei\r\n r creation\\, from preparing fiber materials to weaving to ornamental techni\r\n ques like embroidery.\\n\\nWoven Narratives: Textiles as Living Archives unra\r\n vels stories of textiles from different cultural contexts. The exhibition p\r\n ulls from the permanent collection of the Stanford University Archaeology C\r\n ollections\\, featuring anthropological and archaeological textiles and obje\r\n cts related to textile production from diverse communities in Mexico\\, Guat\r\n emala\\, Peru\\, Thailand\\, Japan\\, and the Philippines. Textiles are archive\r\n s of heritage and identity\\, technique and style\\, oppression and resistanc\r\n e\\, and relationships among people and between people and environments. Wov\r\n en Narratives traces thematic threads that illustrate enduring and evolving\r\n  textile traditions and practices.\\n\\n• • •\\n\\nWoven Narratives: Textiles a\r\n s Living Archives is the newest exhibition of the Stanford University Archa\r\n eology Collections (SUAC). The exhibit was curated by students in the Sprin\r\n g 2025 course “Introduction to Museum Practice.”\\n\\nThe exhibit is on view \r\n at the Stanford Archaeology Center starting Monday\\, June 2\\, 2025. Members\r\n  of the Stanford community can view the exhibit using their Stanford ID car\r\n d to access the building. Members of the public (those without Stanford ID \r\n cards) can schedule an appointment for access to the building for a self-gu\r\n ided tour Monday through Thursday between 9am and 5pm by emailing kott@stan\r\n ford.edu.\r\nDTEND:20260416T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T160000Z\r\nGEO:37.425892;-122.16938\r\nLOCATION:Building 500\\, Archaeology Center\r\nSEQUENCE:0\r\nSUMMARY:Woven Narratives: Textiles as Living Archives\r\nUID:tag:localist.com\\,2008:EventInstance_49650382840011\r\nURL:https://events.stanford.edu/event/woven-narratives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260416T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068296641\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Emily Derbyshire\\,\r\n  \"Interdisciplinary approaches to reveal malaria parasite vulnerabilities\"\r\nDTEND:20260415T203000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Emily Derbyshire\\, \"In\r\n terdisciplinary approaches to reveal malaria parasite vulnerabilities\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144436080571\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-emily-derbyshire-interdisciplinary-approaches-to-reveal-malaria-parasi\r\n te-vulnerabilities\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260416T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743786459\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:This seminar is held on Wednesday at 3PM rather than the usual \r\n Thursday at noon time. There will be a reception held in the Theory Center \r\n following the seminar.\\n\\nTalk title to be announcedAbstract coming soon\\n\\\r\n n \\n\\nWilliam NewsomeHarman Family Provostial Professor and Professor of Ne\r\n urobiology and\\, by courtesy\\, of Psychology\\, Stanford University\\n\\nHoste\r\n d by Stephen Baccus (Baccus Lab)\\n\\n \\n\\nSign up for Speaker Meet-upsEngage\r\n ment with our seminar speakers extends beyond the lecture. On seminar days\\\r\n , invited speakers meet one-on-one with faculty members\\, have lunch with a\r\n  small group of trainees\\, and enjoy dinner with a small group of faculty a\r\n nd the speaker's host.\\n\\nIf you’re a Stanford faculty member or trainee in\r\n terested in participating in these Speaker Meet-up opportunities\\, click th\r\n e button below to express your interest. Depending on availability\\, you ma\r\n y be invited to join the speaker for one of these enriching experiences.\\n\\\r\n nNote: For this seminar\\, the faculty meetings will be occuring on Wed. Apr\r\n  15 (seminar day)\\, while the trainee lunch and faculty dinner will be on T\r\n hurs. Apr 16.\\n\\nSpeaker Meet-ups Interest Form\\n\\n \\n\\nEric M. Shooter Lec\r\n tureDr. Eric M. Shooter was an emeritus professor of neurobiology at Stanfo\r\n rd University's School of Medicine\\, the inaugural chair of the Neurobiolog\r\n y department\\, and a valuable mentor to the community. Renowned globally fo\r\n r his contributions to neurobiology\\, Shooter's research focused on the str\r\n ucture and function of neurotrophins\\, essential proteins for the survival \r\n of nerve cells. His work could lead to nerve regeneration in individuals wi\r\n th spinal cord injuries and help combat neurodegenerative diseases. Despite\r\n  his passing in 2018\\, his positive impact on the neurobiology field and th\r\n e neuroscience community of Stanford continues on. \\n\\nIn 2007\\, the annual\r\n  Shooter lecture\\, co-hosted by Wu Tsai Neurosciences Institute and Departm\r\n ent of Neurobiology\\, was established to continue Shooter's legacy of nurtu\r\n ring Stanford's neurobiology community. Integrated into the Wu Tsai Neuro S\r\n eminar Series\\, these annual Shooter lectures particularly focus on neurobi\r\n ology topics. This year marks the 18th Annual Shooter lecture.\\n\\n About th\r\n e Wu Tsai Neurosciences Seminar SeriesThe Wu Tsai Neurosciences Institute s\r\n eminar series brings together the Stanford neuroscience community to discus\r\n s cutting-edge\\, cross-disciplinary brain research\\, from biochemistry to b\r\n ehavior and beyond.\\n\\nTopics include new discoveries in fundamental neurob\r\n iology\\; advances in human and translational neuroscience\\; insights from c\r\n omputational and theoretical neuroscience\\; and the development of novel re\r\n search technologies and neuro-engineering breakthroughs.\\n\\nUnless otherwis\r\n e noted\\, seminars are held Thursdays at 12:00 noon PT.\\n\\nSign up to learn\r\n  about all our upcoming events\r\nDTEND:20260415T230000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260415T220000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: William Newsome - Talk Title TBA (Eric M. Sh\r\n ooter Lecture)\r\nUID:tag:localist.com\\,2008:EventInstance_52061015883115\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-william-newsome\r\n -talk-title-tba-eric-m-shooter-lecture\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260416T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379384519\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event is co-sponsored by the Center for South Asia\\, the C\r\n enter for African Studies\\, and the Program in Feminist\\, Gender\\, and Sexu\r\n ality Studies at Stanford University.\\n\\nPlease note that this lecture is p\r\n art of a two day exhibition. Click here for exhibition details. \\n\\nAbout t\r\n he event \\n\\nCreated to play on the streets in Trinidad and Tobago’s Carniv\r\n al in 2025\\, Nachorious is a Caribbean mas(querade) that commemorates 180 y\r\n ears of the Indian ‘nautch girl’ – variously figured as dancer\\, courtesan\\\r\n , tawa’if\\, devadasi\\, widow\\, bazaar woman\\, and sex worker - escaping Bri\r\n tish imperialism\\, dispossession\\, criminalization\\, evangelism\\, political\r\n  punishment and impoverishment through the journey of indenture.\\n\\nStereot\r\n yped as notoriously immoral and sexually loose\\, indentured Indian women we\r\n re framed as a threat to the colonial system itself. Remembered through the\r\n  Carnivalesque character of a nach gyal or bad gyal mas\\, Nachorious dances\r\n  in the decolonial spirit of freedom and resistance.\\n\\nThis Jouvay mas\\, p\r\n erformed in the hours before dawn on Carnival Monday and invoking both the \r\n rejected and otherworldly\\, is made with indenture records from 1867\\, text\r\n  from Guyanese Mahadai Das’s poetry\\, historiography on the nautch-girl\\, a\r\n nd sonic embodiment of women dancers’ legacy for the Caribbean.\\n\\nAs Nacho\r\n rious is a nach gyal - the spirit of the women dancers who arrived on inden\r\n ture ships as well as those cast as immoral or stereotyped as prostitutes\\,\r\n  there must be nach gyal dancing when tracing the historical and conceptual\r\n  origins of this post-indenture feminist Jouvay mas.\\n\\nThus\\, we lotay [ro\r\n ll it]\\; invoking her journey from India to the Caribbean through sonic\\, e\r\n mbodied\\, licentious\\, collective remembering that insists on these bad gya\r\n ls’ generative abundance in the colonial archive and their sisterhood and s\r\n olidarity with the Afro-Caribbean jamette.\\n\\nIn this way\\, Nachorious offe\r\n rs a loose waist spiritual\\, aesthetic\\, archival\\, performative\\, and tran\r\n soceanic methodology for feminist practices of memorialisation as well as p\r\n ost-indenture feminisms in and beyond Carnival.\\n\\nThis talk will be of par\r\n ticular interest to performance artists and dancers as well as scholars of \r\n British imperialism\\, Indian indentureship\\, the Caribbean\\, carnivals\\, an\r\n d contemporary feminisms. There will be dancing.\\n\\nAbout the speaker\\nDr. \r\n Gabrielle Jamela Hosein is an Indo-Caribbean feminist scholar\\, writer and \r\n activist who received the Medal for the Development of Women (Gold) in 2022\r\n  for her contribution to Trinidad and Tobago. She is Senior Lecturer and fo\r\n rmer Head at the Institute for Gender and Development Studies\\, The Univers\r\n ity of the West Indies\\, St. Augustine (2016–2020)\\, former Vice-Chair of t\r\n he Equal Opportunity Commission (2020-2023) and has been involved in Caribb\r\n ean feminist organising for thirty years. She co-edited the collections Ind\r\n o-Caribbean Feminisms: Charting Crossings in Geography\\, Discourse\\, and Po\r\n litics (CRGS 2012) and Indo-Caribbean Feminist Thought: Genealogies\\, Theor\r\n ies\\, Enactments (2016). Her publications include\\, “No Pure Place for Resi\r\n stance: Reflections on Being Ms. Mastana Bahar 2000 (2011)\\, “Modern Negoti\r\n ations: Indo-Trinidadian Girlhood and Gender Differential Creolization” (20\r\n 12)\\, “Democracy\\, Gender and Indian Muslim Modernity in Trinidad” (2015)\\,\r\n  “A Letter to My Great-Grandmother” (2018)\\, “Post-Indentureship Caribbean \r\n Feminist Thought\\, Transoceanic Feminisms\\, and the Convergence of Asymmetr\r\n ies” (2020)\\, The Botanical Afterlives of Indenture: Mehndi as Imaginative \r\n Visual Archive (2024)\\, and the poem “Chutney Love” (2019). Her blog\\, Diar\r\n y of a Mothering Worker\\, has been published as a national newspaper column\r\n  since 2012\\, and includes numerous columns on Indo-Caribbean gender relati\r\n ons and feminisms. The exhibition\\, The Botanical Afterlife of Indenture: I\r\n maginative Archives\\, was first held at the Art Society of Trinidad and Tob\r\n ago in June 2025.\\n\\nPhoto: The photographer credit is Abigail Hadeed\r\nDTEND:20260416T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T003000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Nachorious: The Nach Gyal as Post Indenture Caribbean Feminist Jouv\r\n ay Mas\r\nUID:tag:localist.com\\,2008:EventInstance_51039662813468\r\nURL:https://events.stanford.edu/event/the-botanical-afterlife-of-indenture-\r\n indian-womens-labour-and-imaginative-phyto-archives\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Co-sponsored by the Creative Writing Program and the Stanford H\r\n umanities Center\\, we are pleased to announce a reading with Stegner Fellow\r\n s in Poetry and Fiction: Ladan Khoddam-Khorasani\\, Kanak Kapur\\, and Bhion \r\n Achimba. \\n\\nThis event is open to Stanford affiliates and the general publ\r\n ic. Registration is encouraged but not required. Register here\\n\\n____\\n\\nل\r\n ادن خدام خراسانی Ladan Khoddam-Khorasani (she/they) is a poet\\, educator an\r\n d public health practitioner. She is interested in how we will use poetry a\r\n nd language to take care of one another.\\n\\nKanak Kapur is a writer origina\r\n lly from Mumbai. Her short fiction has appeared in the New Yorker\\, the Sew\r\n anee Review\\, and more. Her debut novel is forthcoming from Riverhead Books\r\n  in 2027.\\n\\nBhion Achimba grew up in rural southeastern Nigeria and came t\r\n o the US as a Harvard University Scholar at Risk Fellow and a visiting poet\r\n  in the English Department. A graduate of Brown University's MFA program\\, \r\n they were named the 2023 Ruth Lilly & Dorothy Sargent Rosenberg Fellow by t\r\n he Poetry Foundation and have been published in The New York Times\\, The Pa\r\n ris Review\\, The Atlantic\\, Poetry\\, Foreign Policy Magazine\\, et cetera. B\r\n hion has been awarded fellowships and residencies by PEN International\\, Th\r\n e Fine Arts Work Center\\, Yaddo\\, Monson Arts\\, St. Botolph Foundation\\, an\r\n d the University of Utah’s English Department\\, where they received the Vic\r\n e-Presidential Doctoral Fellowship. He lives in Berkeley\\, California.\r\nDTEND:20260416T030000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T013000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:Stegner Fellow Reading with Ladan Khoddam-Khorasani\\, Kanak Kapur\\,\r\n  and Bhion Achimba\r\nUID:tag:localist.com\\,2008:EventInstance_50789724282070\r\nURL:https://events.stanford.edu/event/stegner-fellow-reading-with-ladan-kho\r\n ddam-khorasani-and-kanak-kapur\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewA Premier Educational Experience in the Heart of Wine C\r\n ountry\\n\\nJoin us in the beautiful and serene setting of wine country for t\r\n he 4th Annual Updates in Gastroenterology and Hepatology—a dynamic and enga\r\n ging course designed to bring you the latest advances in the diagnosis and \r\n management of gastrointestinal and liver disorders. The program incorporate\r\n s cutting-edge medical education with the opportunity to unwind amidst vine\r\n yards\\, rolling hills\\, and exceptional hospitality.\\n\\nTailored for gastro\r\n enterologists\\, hepatologists\\, primary care physicians\\, internists\\, fami\r\n ly practitioners\\, nurse practitioners\\, physician assistants\\, and nurses\\\r\n , this comprehensive one-day course offers evidence-based updates in a pict\r\n uresque\\, retreat-like atmosphere perfect for learning and professional con\r\n nection.\\n\\nRegistrationEarly Bird Registration (through January 15\\, 2026)\r\n \\nPhysicians: $595\\nAdvanced Practice Providers: $395\\nTrainees: $150\\nIndu\r\n stry: $895\\n\\nJanuary 16\\, 2026 through March 15\\, 2026\\nPhysicians: $695\\n\r\n Advanced Practice Providers: $495\\nTrainees: $150\\nIndustry: $895\\n\\n March\r\n  16\\, 2026 hrough April 15\\, 2026\\nPhysicians: $795\\nAdvanced Practice Prov\r\n iders: $595\\nTrainees: $150\\nIndustry: $895\\n\\nSTAP-eligible employees can \r\n use STAP funds towards the registration fees for this activity.  Complete t\r\n he STAP Reimbursement Request Form and submit to your department administra\r\n tor. \\n\\nCreditsAMA PRA Category 1 Credits™ (20.00 hours)\\, AAPA Category 1\r\n  CME credits (20.00 hours)\\, ANCC Contact Hours (20.00 hours)\\, Non-Physici\r\n an Participation Credit (20.00 hours)\\n\\nTarget AudienceSpecialties - Famil\r\n y Medicine & Community Health\\, Gastroenterology & Hepatology\\, Internal Me\r\n dicine\\, Primary Care & Population Health\\, SurgeryProfessions - Advance Pr\r\n actice Nurse (APN)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\, \r\n Physician Associate\\, Registered Nurse (RN)\\, Student ObjectivesAt the conc\r\n lusion of this activity\\, learners should be able to:\\n1. Understand advanc\r\n es in therapeutic endoscopy and approach to pancreaticobiliary disease\\n2. \r\n Integrate updates in chronic liver disease and liver transplantation into c\r\n urrent management of patients\\n3. Review the most recent screening and surv\r\n eillance protocols for gastrointestinal malignancy\\n4. Evaluate medical and\r\n  surgical treatment approaches for gastroesophageal reflux and other esopha\r\n geal disorders\\n5. Incorporate new diagnostics and therapeutics for managem\r\n ent of inflammatory bowel disease\\n6. Describe changes in approach to small\r\n  and large bowel disorders\\n7. Analyze the complaint of dysphagia and other\r\n  symptoms of dysmotility with updated diagnostic and therapeutic frameworks\r\n \\n\\nAccreditationIn support of improving patient care\\, Stanford Medicine i\r\n s jointly accredited by the Accreditation Council for Continuing Medical Ed\r\n ucation (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\,\r\n  and the American Nurses Credentialing Center (ANCC)\\, to provide continuin\r\n g education for the healthcare team.  \\n\\nCredit Designation \\nAmerican Med\r\n ical Association (AMA) \\nStanford Medicine designates this Live Activity fo\r\n r a maximum of 20.00 AMA PRA Category 1 CreditsTM.  Physicians should claim\r\n  only the credit commensurate with the extent of their participation in the\r\n  activity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\nStanford Medic\r\n ine designates this live activity for a maximum of 20 ANCC contact hours.  \r\n \\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStanford Medicine Prov\r\n ider approved by the California Board of Registered Nursing\\, Provider Numb\r\n er 17874\\, for 20.00 contact hours.\\n\\nAmerican Academy of Physician Associ\r\n ates (AAPA) - Live \\nStanford Medicine has been authorized by the American \r\n Academy of PAs (AAPA) to award AAPA Category 1 CME credit for activities pl\r\n anned in accordance with AAPA CME Criteria. This live activity is designate\r\n d for 20 AAPA Category 1 CME credits. PAs should only claim credit commensu\r\n rate with the extent of their participation.  \\n\\nAmerican Board of Interna\r\n l Medicine MOC Credit \\nSuccessful completion of this CME activity\\, which \r\n includes participation in the evaluation component\\, enables the participan\r\n t to earn up to 20 MOC points in the American Board of Internal Medicine’s \r\n (ABIM) Maintenance of Certification (MOC) program. It is the CME activity p\r\n rovider’s responsibility to submit participant completion information to AC\r\n CME for the purpose of granting ABIM MOC credit.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260416\r\nLOCATION:Sonoma\\, CA\r\nSEQUENCE:0\r\nSUMMARY:4th Annual Updates in Gastroenterology & Hepatology\r\nUID:tag:localist.com\\,2008:EventInstance_50943099686487\r\nURL:https://events.stanford.edu/event/4th-annual-updates-in-gastroenterolog\r\n y-hepatology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260416\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294407630\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260416\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355547145\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260416\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MedOnboard Best Practices/Updates\r\nUID:tag:localist.com\\,2008:EventInstance_51314577350094\r\nURL:https://events.stanford.edu/event/medonboard-best-practicesupdates\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260416\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354013288\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Overview\\n\\nRooted in Community. Transforming Care. \\n\\nCelebra\r\n ting Black Maternal Health Week 2026 \\n\\nThis year’s conference holds speci\r\n al significance as it aligns with the ten-year anniversary of Black Materna\r\n l Health Week. The theme acknowledges the week’s focus on “justice and joy”\r\n  during the birthing experience and the role of healthcare professionals in\r\n  fostering positive health and experience outcomes through exceptional care\r\n . \\n\\nThe Mid-Coastal California Perinatal Outreach Program (MCCPOP) is loc\r\n ated at Stanford University School of Medicine\\, Division of Neonatology. M\r\n CCPOP leaders include neonatologists and maternal fetal medicine specialist\r\n s who consult on perinatal clinical care questions and provide education on\r\n  current standards of care for mothers and newborns. These leaders partner \r\n with the California Maternal Quality Care Collaborative (CMQCC) and the Cal\r\n ifornia Perinatal Quality Care Collaborative (CPQCC)\\, as well as other spe\r\n cialists and healthcare providers at Stanford Medicine\\, to provide a full \r\n spectrum of expertise\\, supporting high quality care for newborns and for w\r\n omen. For over forty years\\, the Annual MCCPOP Perinatal Potpourri Conferen\r\n ce has provided current advances in maternal\\, fetal\\, and neonatal medicin\r\n e for healthcare providers around the world. Perinatal clinicians and other\r\n  experts present on a variety of topics through lectures\\, panel presentati\r\n ons and case-based discussions. \\n\\nThis year’s program will include a focu\r\n s on multiple advances in perinatal care. Agenda subject to change. Some in\r\n cluded topics: \\n\\nBlack Maternal Mental Health\\n\\nSevere Maternal Morbidit\r\n y\\n\\nNeonatal Pain Management\\n\\nEquitable Use of AI\\n\\nObstetric Sepsis\\n\\\r\n nAnemia and Pregnancy\\n\\nPlacenta Accreta Spectrum\\n\\nRegistration\\n\\nVirtu\r\n al attendance fees:\\nPhysicians: $300\\n\\nNurses/AHPs/Pharmacists/Social Wor\r\n kers/Registered Dietitians/Midwives: $150\\n\\nFellows/Residents: $80\\n\\nPubl\r\n ic Health/Community Health Organizations Staff NOT Seeking Continuing Educa\r\n tion Credit: $80\\n\\nBIH/PEI Partners: $80\\n\\nDoulas: $50\\n\\nStudents: $50\\n\r\n \\nIn person day 1 attendance fees:\\n\\nPhysicians: $200\\n\\nNurses/AHPs/Pharm\r\n acists/Social Workers/Registered Dietitians/Midwives: $125\\n\\nFellows/Resid\r\n ents: $100\\n\\nPublic Health/Community Health Organizations Staff NOT Seekin\r\n g Continuing Education Credit: $100\\n\\nBIH/PEI Partners: $100\\n\\nDoulas: $1\r\n 00\\n\\nStudents: $100\\n\\nIn person day 1 plus virtual day 2 attendance fees:\r\n \\n\\nPhysicians: $350\\n\\nNurses/AHPs/Pharmacists/Social Workers/Registered D\r\n ietitians/Midwives: $200\\n\\nFellows/Residents: $140\\n\\nPublic Health/Commun\r\n ity Health Organizations Staff NOT Seeking Continuing Education Credit: $14\r\n 0\\n\\nBIH/PEI Partners: $140\\n\\nDoulas: $100\\n\\nStudents: $100\\n\\nRegistrati\r\n on fees may be paid by Visa\\, MasterCard\\, or American Express.\\n\\nIf you a\r\n re registering a group of 5 or more from one organization\\, email hollykm@s\r\n tanford.edu for a 20% discount.\\n\\nSTAP-eligible employees can use STAP fun\r\n ds towards the registration fees for this activity. Complete the STAP Reimb\r\n ursement Request Form and submit to your department administrator.\\n\\nYour \r\n email address is used for critical information\\, including registration con\r\n firmation\\, evaluation\\, and certificate. Be sure to include an email addre\r\n ss that you check frequently. \\n\\nCredits\\n\\nAMA PRA Category 1 Credits™ (1\r\n 2.75 hours)\\, ANCC Contact Hours (12.75 hours)\\, ASWB Continuing Education \r\n (ACE) credits (12.75 hours)\\, CA BRN - California Board of Registered Nurse\r\n s Contact Hours (12.75 hours)\\, Non-Physician Participation Credit (12.75 h\r\n ours)\\n\\nTarget Audience\\n\\nSpecialties - Maternal-Child Health\\, Maternal-\r\n Fetal Medicine\\, Midwifery\\, Neonatology\\, Obstetrics & Gynecology\\, Pediat\r\n rics\\, Reproductive Endocrinology and Infertility\\n\\nProfessions - Advance \r\n Practice Nurse (APN)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\\r\n , Registered Nurse (RN)\\, Student\\n\\nObjectives\\n\\nAt the conclusion of thi\r\n s activity\\, learners should be able to:\\n\\n1. Utilize the most recent clin\r\n ical guidelines for effective pain management in newborns.\\n2. Integrate a \r\n respect-based approach to Black maternal mental health that honors the live\r\n d experience and dismantles a mask of resilience to foster stigma-free supp\r\n ort.\\n3. Identify the optimal time for umbilical cord clamping to maximize \r\n neonatal health benefits.\\n4. Employ evidence-based strategies to address i\r\n dentified disparities in care\\, specifically regarding Severe Maternal Morb\r\n idity (SMM)\\, mental health care\\, anemia and newborn pain management.\\n\\nA\r\n ccreditation\\n\\nIn support of improving patient care\\, Stanford Medicine is\r\n  jointly accredited by the Accreditation Council for Continuing Medical Edu\r\n cation (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\, \r\n and the American Nurses Credentialing Center (ANCC)\\, to provide continuing\r\n  education for the healthcare team. \\n\\nCredit Designation \\nAmerican Medic\r\n al Association (AMA) \\nStanford Medicine designates this Live Activity for \r\n a maximum of 12.75 AMA PRA Category 1 CreditsTM.  Physicians should claim o\r\n nly the credit commensurate with the extent of their participation in the a\r\n ctivity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\nStanford Medicin\r\n e designates this live activity for a maximum of 12.75 ANCC contact hours. \r\n \\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStanford Medicine Prov\r\n ider approved by the California Board of Registered Nursing\\, Provider Numb\r\n er 17874\\, for 12.75 contact hours.\\n\\nASWB Approved Continuing Education C\r\n redit (ACE) – Social Work Credit \\nAs a Jointly Accredited Organization\\, S\r\n tanford Medicine is approved to offer social work continuing education by t\r\n he Association of Social Work Boards (ASWB) Approved Continuing Education (\r\n ACE) program. Organizations\\, not individual courses\\, are approved under t\r\n his program. Regulatory boards are the final authority on courses accepted \r\n for continuing education credit. Social workers completing this activity re\r\n ceive 12.75 general continuing education credits.\r\nDTEND:20260416T233000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T150000Z\r\nLOCATION:Stanford University School of Medicine\\, Division of Neonatology\r\nSEQUENCE:0\r\nSUMMARY:MCCPOP Perinatal Potpourri Conference 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51952339441756\r\nURL:https://events.stanford.edu/event/mccpop-perinatal-potpourri-conference\r\n -2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260417T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910858480\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260417T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068297666\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260416T191500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762186035\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260416T194500Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794482459\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting,Performance\r\nDESCRIPTION:In partnership with the Vice Provost for Graduate Education Gra\r\n duate Student Appreciation Week\\n\\nCome out and enjoy a specialty coffee wh\r\n ile you chat about teaching with CTL! We want to show our appreciation for \r\n the great work that you all do as teaching assistants and instructors by of\r\n fering a specialty coffee to the first 30 people who engage with CTL repres\r\n entatives at Voyager Coffee at the times listed below. We look forward to s\r\n eeing you there.\\n\\nTuesday\\, April 14\\, 9–10 a.m. at Voyager CoffeeThursda\r\n y\\, April 16\\, 1–2 p.m. at Voyager CoffeeVoyager Coffee is located on the G\r\n round Level\\, Computing and Data Science (CoDa)\\, 389 Jane Stanford Way.\r\nDTEND:20260416T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T200000Z\r\nGEO:37.430043;-122.171561\r\nLOCATION:Voyager Coffee\\, Ground Level\\, Computing and Data Science (CoDa)\r\nSEQUENCE:0\r\nSUMMARY:CTL Graduate Teaching Coffee Breaks\r\nUID:tag:localist.com\\,2008:EventInstance_52259679665509\r\nURL:https://events.stanford.edu/event/ctl-graduate-teaching-coffee-breaks\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260416T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491622816\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260417T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743787484\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:Jen Burney Bio\\n\\nJennifer (Jen) Burney is a Professor in Globa\r\n l Environmental Policy and Earth System Science in the Doerr School of Sust\r\n ainability. Her research focuses on the coupled relationships between clima\r\n te and food security – measuring air pollutant emissions and concentrations\r\n \\, quantifying the effects of climate and air pollution on land use and foo\r\n d systems\\, understanding how food production and consumption contribute to\r\n  climate change\\, and designing and evaluating technologies and strategies \r\n for adaptation and mitigation among the world’s farmers. Her research group\r\n  combines methods from physics\\, ecology\\, statistics\\, remote sensing\\, ec\r\n onomics\\, and policy to understand critical scientific uncertainties in thi\r\n s coupled system and to provide evidence for what will – or won’t – work to\r\n  simultaneously end hunger and stabilize earth’s climate. She earned a PhD \r\n in physics in 2007\\, completed postdoctoral fellowships in both food securi\r\n ty and climate science\\, and was named a National Geographic Emerging Explo\r\n rer in 2011\\; prior to joining the Doerr School\\, she served on the faculty\r\n  at UC San Diego's School of Global Policy and Strategy and Scripps Institu\r\n tion of Oceanography.\\n\\nShanJun Li Bio\\n\\nShanjun Li is the Steven and Rob\r\n erta Denning Professor of Global Sustainability in the Stanford Doerr Schoo\r\n l of Sustainability\\, and a Senior Fellow at both the Freeman Spogli Instit\r\n ute for International Studies and the Stanford Insitute for Economic Policy\r\n  Research. He directs the Sustainability and Energy Transition Program at S\r\n tanford Center on China's Economy and Institutions (SCCEI). His research fo\r\n cuses on environmental and energy economics\\, urban and transportation econ\r\n omics\\, empirical industrial organization\\, and the Chinese economy. His re\r\n cent work examines pressing sustainability challenges and the rapid rise of\r\n  clean energy industries in China\\, exploring their global implications to \r\n support evidence-based policymaking.\r\nDTEND:20260416T213000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Global Environmental Policy Seminar with Stanford Professors Shanju\r\n n Li and Jen Burney\r\nUID:tag:localist.com\\,2008:EventInstance_52091111908132\r\nURL:https://events.stanford.edu/event/global-environmental-policy-seminar-w\r\n ith-stanford-professors-shanjun-li-and-jen-burney\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260417T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260416T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764716131\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260417T013000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404968956\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewA Premier Educational Experience in the Heart of Wine C\r\n ountry\\n\\nJoin us in the beautiful and serene setting of wine country for t\r\n he 4th Annual Updates in Gastroenterology and Hepatology—a dynamic and enga\r\n ging course designed to bring you the latest advances in the diagnosis and \r\n management of gastrointestinal and liver disorders. The program incorporate\r\n s cutting-edge medical education with the opportunity to unwind amidst vine\r\n yards\\, rolling hills\\, and exceptional hospitality.\\n\\nTailored for gastro\r\n enterologists\\, hepatologists\\, primary care physicians\\, internists\\, fami\r\n ly practitioners\\, nurse practitioners\\, physician assistants\\, and nurses\\\r\n , this comprehensive one-day course offers evidence-based updates in a pict\r\n uresque\\, retreat-like atmosphere perfect for learning and professional con\r\n nection.\\n\\nRegistrationEarly Bird Registration (through January 15\\, 2026)\r\n \\nPhysicians: $595\\nAdvanced Practice Providers: $395\\nTrainees: $150\\nIndu\r\n stry: $895\\n\\nJanuary 16\\, 2026 through March 15\\, 2026\\nPhysicians: $695\\n\r\n Advanced Practice Providers: $495\\nTrainees: $150\\nIndustry: $895\\n\\n March\r\n  16\\, 2026 hrough April 15\\, 2026\\nPhysicians: $795\\nAdvanced Practice Prov\r\n iders: $595\\nTrainees: $150\\nIndustry: $895\\n\\nSTAP-eligible employees can \r\n use STAP funds towards the registration fees for this activity.  Complete t\r\n he STAP Reimbursement Request Form and submit to your department administra\r\n tor. \\n\\nCreditsAMA PRA Category 1 Credits™ (20.00 hours)\\, AAPA Category 1\r\n  CME credits (20.00 hours)\\, ANCC Contact Hours (20.00 hours)\\, Non-Physici\r\n an Participation Credit (20.00 hours)\\n\\nTarget AudienceSpecialties - Famil\r\n y Medicine & Community Health\\, Gastroenterology & Hepatology\\, Internal Me\r\n dicine\\, Primary Care & Population Health\\, SurgeryProfessions - Advance Pr\r\n actice Nurse (APN)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\, \r\n Physician Associate\\, Registered Nurse (RN)\\, Student ObjectivesAt the conc\r\n lusion of this activity\\, learners should be able to:\\n1. Understand advanc\r\n es in therapeutic endoscopy and approach to pancreaticobiliary disease\\n2. \r\n Integrate updates in chronic liver disease and liver transplantation into c\r\n urrent management of patients\\n3. Review the most recent screening and surv\r\n eillance protocols for gastrointestinal malignancy\\n4. Evaluate medical and\r\n  surgical treatment approaches for gastroesophageal reflux and other esopha\r\n geal disorders\\n5. Incorporate new diagnostics and therapeutics for managem\r\n ent of inflammatory bowel disease\\n6. Describe changes in approach to small\r\n  and large bowel disorders\\n7. Analyze the complaint of dysphagia and other\r\n  symptoms of dysmotility with updated diagnostic and therapeutic frameworks\r\n \\n\\nAccreditationIn support of improving patient care\\, Stanford Medicine i\r\n s jointly accredited by the Accreditation Council for Continuing Medical Ed\r\n ucation (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\,\r\n  and the American Nurses Credentialing Center (ANCC)\\, to provide continuin\r\n g education for the healthcare team.  \\n\\nCredit Designation \\nAmerican Med\r\n ical Association (AMA) \\nStanford Medicine designates this Live Activity fo\r\n r a maximum of 20.00 AMA PRA Category 1 CreditsTM.  Physicians should claim\r\n  only the credit commensurate with the extent of their participation in the\r\n  activity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\nStanford Medic\r\n ine designates this live activity for a maximum of 20 ANCC contact hours.  \r\n \\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStanford Medicine Prov\r\n ider approved by the California Board of Registered Nursing\\, Provider Numb\r\n er 17874\\, for 20.00 contact hours.\\n\\nAmerican Academy of Physician Associ\r\n ates (AAPA) - Live \\nStanford Medicine has been authorized by the American \r\n Academy of PAs (AAPA) to award AAPA Category 1 CME credit for activities pl\r\n anned in accordance with AAPA CME Criteria. This live activity is designate\r\n d for 20 AAPA Category 1 CME credits. PAs should only claim credit commensu\r\n rate with the extent of their participation.  \\n\\nAmerican Board of Interna\r\n l Medicine MOC Credit \\nSuccessful completion of this CME activity\\, which \r\n includes participation in the evaluation component\\, enables the participan\r\n t to earn up to 20 MOC points in the American Board of Internal Medicine’s \r\n (ABIM) Maintenance of Certification (MOC) program. It is the CME activity p\r\n rovider’s responsibility to submit participant completion information to AC\r\n CME for the purpose of granting ABIM MOC credit.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nLOCATION:Sonoma\\, CA\r\nSEQUENCE:0\r\nSUMMARY:4th Annual Updates in Gastroenterology & Hepatology\r\nUID:tag:localist.com\\,2008:EventInstance_50943099688536\r\nURL:https://events.stanford.edu/event/4th-annual-updates-in-gastroenterolog\r\n y-hepatology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294408655\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355549194\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:Last day to add or drop a class\\; last day to adjust units on a\r\n  variable-unit course. Last day for tuition reassessment for dropped course\r\n s or units. Students may withdraw from a course until the Course Withdrawal\r\n  deadline and a \"W\" notation will appear on the transcript.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Final Study List deadline\\, except GSB M.B.A. and MSx courses (5 p.\r\n m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464378488780\r\nURL:https://events.stanford.edu/event/final-study-list-deadline-except-gsb-\r\n mba-and-msx-courses-5-pm-1860\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – INDE 297 session for clinical students (Period 10).\r\nUID:tag:localist.com\\,2008:EventInstance_49464383303462\r\nURL:https://events.stanford.edu/event/md-inde-297-session-for-clinical-stud\r\n ents-period-10-889\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Last day of instruction Q6 POM.\r\nUID:tag:localist.com\\,2008:EventInstance_49464388456939\r\nURL:https://events.stanford.edu/event/md-last-day-of-instruction-q6-pom-821\r\n 8\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354014313\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to complete the Final Study List (except G\r\n SB\\, which is earlier)\\; to add or drop a class\\; to adjust units on a vari\r\n able-unit course\\; for tuition reassessment for dropped courses or units. S\r\n tudents may withdraw from a course until the Course Withdrawal deadline and\r\n  a 'W' notation will appear on the transcript.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Change of Grading Basis Deadline (GSB)\r\nUID:tag:localist.com\\,2008:EventInstance_50472525282365\r\nURL:https://events.stanford.edu/event/spring-quarter-change-of-grading-basi\r\n s-deadline-gsb\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (at 5 p.m.) to request a grading basis cha\r\n nge for GSB courses.\r\nDTSTAMP:20260308T083912Z\r\nDTSTART;VALUE=DATE:20260417\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Final Study List Deadline (Except GSB)\r\nUID:tag:localist.com\\,2008:EventInstance_50472525178932\r\nURL:https://events.stanford.edu/event/spring-quarter-final-study-list-deadl\r\n ine-except-gsb-7615\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Overview\\n\\nRooted in Community. Transforming Care. \\n\\nCelebra\r\n ting Black Maternal Health Week 2026 \\n\\nThis year’s conference holds speci\r\n al significance as it aligns with the ten-year anniversary of Black Materna\r\n l Health Week. The theme acknowledges the week’s focus on “justice and joy”\r\n  during the birthing experience and the role of healthcare professionals in\r\n  fostering positive health and experience outcomes through exceptional care\r\n . \\n\\nThe Mid-Coastal California Perinatal Outreach Program (MCCPOP) is loc\r\n ated at Stanford University School of Medicine\\, Division of Neonatology. M\r\n CCPOP leaders include neonatologists and maternal fetal medicine specialist\r\n s who consult on perinatal clinical care questions and provide education on\r\n  current standards of care for mothers and newborns. These leaders partner \r\n with the California Maternal Quality Care Collaborative (CMQCC) and the Cal\r\n ifornia Perinatal Quality Care Collaborative (CPQCC)\\, as well as other spe\r\n cialists and healthcare providers at Stanford Medicine\\, to provide a full \r\n spectrum of expertise\\, supporting high quality care for newborns and for w\r\n omen. For over forty years\\, the Annual MCCPOP Perinatal Potpourri Conferen\r\n ce has provided current advances in maternal\\, fetal\\, and neonatal medicin\r\n e for healthcare providers around the world. Perinatal clinicians and other\r\n  experts present on a variety of topics through lectures\\, panel presentati\r\n ons and case-based discussions. \\n\\nThis year’s program will include a focu\r\n s on multiple advances in perinatal care. Agenda subject to change. Some in\r\n cluded topics: \\n\\nBlack Maternal Mental Health\\n\\nSevere Maternal Morbidit\r\n y\\n\\nNeonatal Pain Management\\n\\nEquitable Use of AI\\n\\nObstetric Sepsis\\n\\\r\n nAnemia and Pregnancy\\n\\nPlacenta Accreta Spectrum\\n\\nRegistration\\n\\nVirtu\r\n al attendance fees:\\nPhysicians: $300\\n\\nNurses/AHPs/Pharmacists/Social Wor\r\n kers/Registered Dietitians/Midwives: $150\\n\\nFellows/Residents: $80\\n\\nPubl\r\n ic Health/Community Health Organizations Staff NOT Seeking Continuing Educa\r\n tion Credit: $80\\n\\nBIH/PEI Partners: $80\\n\\nDoulas: $50\\n\\nStudents: $50\\n\r\n \\nIn person day 1 attendance fees:\\n\\nPhysicians: $200\\n\\nNurses/AHPs/Pharm\r\n acists/Social Workers/Registered Dietitians/Midwives: $125\\n\\nFellows/Resid\r\n ents: $100\\n\\nPublic Health/Community Health Organizations Staff NOT Seekin\r\n g Continuing Education Credit: $100\\n\\nBIH/PEI Partners: $100\\n\\nDoulas: $1\r\n 00\\n\\nStudents: $100\\n\\nIn person day 1 plus virtual day 2 attendance fees:\r\n \\n\\nPhysicians: $350\\n\\nNurses/AHPs/Pharmacists/Social Workers/Registered D\r\n ietitians/Midwives: $200\\n\\nFellows/Residents: $140\\n\\nPublic Health/Commun\r\n ity Health Organizations Staff NOT Seeking Continuing Education Credit: $14\r\n 0\\n\\nBIH/PEI Partners: $140\\n\\nDoulas: $100\\n\\nStudents: $100\\n\\nRegistrati\r\n on fees may be paid by Visa\\, MasterCard\\, or American Express.\\n\\nIf you a\r\n re registering a group of 5 or more from one organization\\, email hollykm@s\r\n tanford.edu for a 20% discount.\\n\\nSTAP-eligible employees can use STAP fun\r\n ds towards the registration fees for this activity. Complete the STAP Reimb\r\n ursement Request Form and submit to your department administrator.\\n\\nYour \r\n email address is used for critical information\\, including registration con\r\n firmation\\, evaluation\\, and certificate. Be sure to include an email addre\r\n ss that you check frequently. \\n\\nCredits\\n\\nAMA PRA Category 1 Credits™ (1\r\n 2.75 hours)\\, ANCC Contact Hours (12.75 hours)\\, ASWB Continuing Education \r\n (ACE) credits (12.75 hours)\\, CA BRN - California Board of Registered Nurse\r\n s Contact Hours (12.75 hours)\\, Non-Physician Participation Credit (12.75 h\r\n ours)\\n\\nTarget Audience\\n\\nSpecialties - Maternal-Child Health\\, Maternal-\r\n Fetal Medicine\\, Midwifery\\, Neonatology\\, Obstetrics & Gynecology\\, Pediat\r\n rics\\, Reproductive Endocrinology and Infertility\\n\\nProfessions - Advance \r\n Practice Nurse (APN)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\\r\n , Registered Nurse (RN)\\, Student\\n\\nObjectives\\n\\nAt the conclusion of thi\r\n s activity\\, learners should be able to:\\n\\n1. Utilize the most recent clin\r\n ical guidelines for effective pain management in newborns.\\n2. Integrate a \r\n respect-based approach to Black maternal mental health that honors the live\r\n d experience and dismantles a mask of resilience to foster stigma-free supp\r\n ort.\\n3. Identify the optimal time for umbilical cord clamping to maximize \r\n neonatal health benefits.\\n4. Employ evidence-based strategies to address i\r\n dentified disparities in care\\, specifically regarding Severe Maternal Morb\r\n idity (SMM)\\, mental health care\\, anemia and newborn pain management.\\n\\nA\r\n ccreditation\\n\\nIn support of improving patient care\\, Stanford Medicine is\r\n  jointly accredited by the Accreditation Council for Continuing Medical Edu\r\n cation (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\, \r\n and the American Nurses Credentialing Center (ANCC)\\, to provide continuing\r\n  education for the healthcare team. \\n\\nCredit Designation \\nAmerican Medic\r\n al Association (AMA) \\nStanford Medicine designates this Live Activity for \r\n a maximum of 12.75 AMA PRA Category 1 CreditsTM.  Physicians should claim o\r\n nly the credit commensurate with the extent of their participation in the a\r\n ctivity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\nStanford Medicin\r\n e designates this live activity for a maximum of 12.75 ANCC contact hours. \r\n \\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStanford Medicine Prov\r\n ider approved by the California Board of Registered Nursing\\, Provider Numb\r\n er 17874\\, for 12.75 contact hours.\\n\\nASWB Approved Continuing Education C\r\n redit (ACE) – Social Work Credit \\nAs a Jointly Accredited Organization\\, S\r\n tanford Medicine is approved to offer social work continuing education by t\r\n he Association of Social Work Boards (ASWB) Approved Continuing Education (\r\n ACE) program. Organizations\\, not individual courses\\, are approved under t\r\n his program. Regulatory boards are the final authority on courses accepted \r\n for continuing education credit. Social workers completing this activity re\r\n ceive 12.75 general continuing education credits.\r\nDTEND:20260417T233000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T150000Z\r\nLOCATION:Stanford University School of Medicine\\, Division of Neonatology\r\nSEQUENCE:0\r\nSUMMARY:MCCPOP Perinatal Potpourri Conference 2026\r\nUID:tag:localist.com\\,2008:EventInstance_51952339442781\r\nURL:https://events.stanford.edu/event/mccpop-perinatal-potpourri-conference\r\n -2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260418T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910859505\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260418T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817891084\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260417T190000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802456325\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260417T193000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699848900\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260418T000000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068298691\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for this month's Center for Sleep and Circadian \r\n Sciences William C. Dement Seminar Series!\\n\\n\"How sleep shapes the infant \r\n brain\"\\n\\nFriday\\, April 17th\\, 2026 at 12pm PST\\n\\nMark S. Blumberg\\, Ph.D\r\n .\\nUniversity of Iowa Distinguished Chair\\, Department of Psychological and\r\n  Brain Sciences \\n\\nLocation: Li Ka Shing Center\\, Room LK130 (291 Campus D\r\n rive\\, Stanford\\, CA 94305)\\n\\nZoom link (if unable to attend in person): h\r\n ttps://stanford.zoom.us/j/99004753637?pwd=RWVUem1FbTNneFhlVFF1Z0l6Mi90UT09\r\nDTEND:20260417T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T190000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, Room LK130\r\nSEQUENCE:0\r\nSUMMARY:CSCS William C. Dement Seminar Series: \"How sleep shapes the infant\r\n  brain\" with Dr. Mark Blumberg\r\nUID:tag:localist.com\\,2008:EventInstance_51933506289865\r\nURL:https://events.stanford.edu/event/cscs-william-c-dement-seminar-series-\r\n 1077\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Did you know that bone mass typically peaks around age 35? In o\r\n ur 50's\\, bone mass starts to decline in both women and men\\, putting us at\r\n  risk for diseases like osteopenia and osteoporosis.\\n\\nThe good news is th\r\n at lifestyle choices\\, including proper nutrition\\, play a key role in main\r\n taining bone density. In this noontime webinar\\, you will learn the importa\r\n nt role of nutrition to prevent and treat osteoporosis and the dietary comp\r\n onents that are key to good bone health.\\n\\nWe’ll explore the many nutrient\r\n s integral to bone health—you may be surprised to discover that it’s more t\r\n han just calcium! You will learn how to get these nutrients from diverse fo\r\n ods including plant sources\\, not just dairy\\, as well as the latest scient\r\n ific research about calcium supplements. We will also identify other lifest\r\n yle risk factors for osteoporosis\\, with tips on when to seek help from a h\r\n ealthcare professional. Walk away with practical dietary tips to keep your \r\n bones healthy and strong as you age.\\n\\nThis class will be recorded and a o\r\n ne-week link to the recording will be shared with all registered participan\r\n ts. To receive incentive points\\, attend at least 80% of the live session o\r\n r listen to the entire recording within one week.  Request disability accom\r\n modations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260417T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Nutrition and Bone Health\r\nUID:tag:localist.com\\,2008:EventInstance_52096371162439\r\nURL:https://events.stanford.edu/event/nutrition-and-bone-health-4968\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:SDRC Friday Seminar\\, 04/17/26\\n\\nAlice Bertaina\\, MD\\, PhD\\, L\r\n orry I. Lokey Professor\\, Department of Pediatrics - Stem Cell Transplantat\r\n ion\\, Stanford University\r\nDTEND:20260417T200000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T190000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, B302\r\nSEQUENCE:0\r\nSUMMARY:SDRC Friday Seminar - Alice Bertaina\r\nUID:tag:localist.com\\,2008:EventInstance_52251571783625\r\nURL:https://events.stanford.edu/event/sdrc-friday-seminar-alice-bertaina\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Learn about how stress and anxiety show up in your body\\, emoti\r\n ons\\, thoughts and behaviors\\, and gain skills to lower anxiety in each are\r\n a. Increase your ability to manage anxious thoughts and develop skills to r\r\n ecognize the role of systems of oppression and conditioning in anxiety.\\n\\n\r\n You will create an individualized plan for recognizing and working with str\r\n ess and anxiety during this workshop.\\n\\nMultiple dates and times available\r\n  to attend this 2 hour workshop.Multiple CAPS therapists collaborate to pro\r\n vide these workshops.All enrolled students are eligible to participate in C\r\n APS groups and workshops. Connecting with CAPS is required to join this gro\r\n up. Please call 650.723.3785 during business hours (8:30 a.m. - 5:00 p.m. w\r\n eekdays) to connect and meet with a CAPS therapist\\, or message your therap\r\n ist/contact person at CAPS\\, to determine if this workshop is right for you\r\n \\, and be added to the workshop meeting that works best for your schedule. \r\n Workshops are in person.Access Anxiety Toolbox Workshop 2025-26 slides here\r\n .Anxiety Toolbox Dates\\n\\nFriday\\, April 17\\, 2026 from 1:00 p.m. - 3:00 p.\r\n m. Wednesday\\, April 29\\, 2026 from 2:00 p.m. - 4:00 p.m. Thursday\\, May 7\\\r\n , 2026 from 2:30 p.m. - 4:30 p.m. Wednesday\\, May 13\\, 2026 from 2:30 p.m.-\r\n 4:30 p.m. Tuesday\\, May 19\\, 2026 from 2:30 p.m.-4:30 p.m.\r\nDTEND:20260417T220000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T200000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\\, Ed Center\r\nSEQUENCE:0\r\nSUMMARY:Anxiety Toolbox\r\nUID:tag:localist.com\\,2008:EventInstance_52208020161831\r\nURL:https://events.stanford.edu/event/copy-of-anxiety-toolbox-6726\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260417T210000Z\r\nDTSTAMP:20260308T083912Z\r\nDTSTART:20260417T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682859430\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewA Premier Educational Experience in the Heart of Wine C\r\n ountry\\n\\nJoin us in the beautiful and serene setting of wine country for t\r\n he 4th Annual Updates in Gastroenterology and Hepatology—a dynamic and enga\r\n ging course designed to bring you the latest advances in the diagnosis and \r\n management of gastrointestinal and liver disorders. The program incorporate\r\n s cutting-edge medical education with the opportunity to unwind amidst vine\r\n yards\\, rolling hills\\, and exceptional hospitality.\\n\\nTailored for gastro\r\n enterologists\\, hepatologists\\, primary care physicians\\, internists\\, fami\r\n ly practitioners\\, nurse practitioners\\, physician assistants\\, and nurses\\\r\n , this comprehensive one-day course offers evidence-based updates in a pict\r\n uresque\\, retreat-like atmosphere perfect for learning and professional con\r\n nection.\\n\\nRegistrationEarly Bird Registration (through January 15\\, 2026)\r\n \\nPhysicians: $595\\nAdvanced Practice Providers: $395\\nTrainees: $150\\nIndu\r\n stry: $895\\n\\nJanuary 16\\, 2026 through March 15\\, 2026\\nPhysicians: $695\\n\r\n Advanced Practice Providers: $495\\nTrainees: $150\\nIndustry: $895\\n\\n March\r\n  16\\, 2026 hrough April 15\\, 2026\\nPhysicians: $795\\nAdvanced Practice Prov\r\n iders: $595\\nTrainees: $150\\nIndustry: $895\\n\\nSTAP-eligible employees can \r\n use STAP funds towards the registration fees for this activity.  Complete t\r\n he STAP Reimbursement Request Form and submit to your department administra\r\n tor. \\n\\nCreditsAMA PRA Category 1 Credits™ (20.00 hours)\\, AAPA Category 1\r\n  CME credits (20.00 hours)\\, ANCC Contact Hours (20.00 hours)\\, Non-Physici\r\n an Participation Credit (20.00 hours)\\n\\nTarget AudienceSpecialties - Famil\r\n y Medicine & Community Health\\, Gastroenterology & Hepatology\\, Internal Me\r\n dicine\\, Primary Care & Population Health\\, SurgeryProfessions - Advance Pr\r\n actice Nurse (APN)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\, \r\n Physician Associate\\, Registered Nurse (RN)\\, Student ObjectivesAt the conc\r\n lusion of this activity\\, learners should be able to:\\n1. Understand advanc\r\n es in therapeutic endoscopy and approach to pancreaticobiliary disease\\n2. \r\n Integrate updates in chronic liver disease and liver transplantation into c\r\n urrent management of patients\\n3. Review the most recent screening and surv\r\n eillance protocols for gastrointestinal malignancy\\n4. Evaluate medical and\r\n  surgical treatment approaches for gastroesophageal reflux and other esopha\r\n geal disorders\\n5. Incorporate new diagnostics and therapeutics for managem\r\n ent of inflammatory bowel disease\\n6. Describe changes in approach to small\r\n  and large bowel disorders\\n7. Analyze the complaint of dysphagia and other\r\n  symptoms of dysmotility with updated diagnostic and therapeutic frameworks\r\n \\n\\nAccreditationIn support of improving patient care\\, Stanford Medicine i\r\n s jointly accredited by the Accreditation Council for Continuing Medical Ed\r\n ucation (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE)\\,\r\n  and the American Nurses Credentialing Center (ANCC)\\, to provide continuin\r\n g education for the healthcare team.  \\n\\nCredit Designation \\nAmerican Med\r\n ical Association (AMA) \\nStanford Medicine designates this Live Activity fo\r\n r a maximum of 20.00 AMA PRA Category 1 CreditsTM.  Physicians should claim\r\n  only the credit commensurate with the extent of their participation in the\r\n  activity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\nStanford Medic\r\n ine designates this live activity for a maximum of 20 ANCC contact hours.  \r\n \\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStanford Medicine Prov\r\n ider approved by the California Board of Registered Nursing\\, Provider Numb\r\n er 17874\\, for 20.00 contact hours.\\n\\nAmerican Academy of Physician Associ\r\n ates (AAPA) - Live \\nStanford Medicine has been authorized by the American \r\n Academy of PAs (AAPA) to award AAPA Category 1 CME credit for activities pl\r\n anned in accordance with AAPA CME Criteria. This live activity is designate\r\n d for 20 AAPA Category 1 CME credits. PAs should only claim credit commensu\r\n rate with the extent of their participation.  \\n\\nAmerican Board of Interna\r\n l Medicine MOC Credit \\nSuccessful completion of this CME activity\\, which \r\n includes participation in the evaluation component\\, enables the participan\r\n t to earn up to 20 MOC points in the American Board of Internal Medicine’s \r\n (ABIM) Maintenance of Certification (MOC) program. It is the CME activity p\r\n rovider’s responsibility to submit participant completion information to AC\r\n CME for the purpose of granting ABIM MOC credit.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260418\r\nLOCATION:Sonoma\\, CA\r\nSEQUENCE:0\r\nSUMMARY:4th Annual Updates in Gastroenterology & Hepatology\r\nUID:tag:localist.com\\,2008:EventInstance_50943099690585\r\nURL:https://events.stanford.edu/event/4th-annual-updates-in-gastroenterolog\r\n y-hepatology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260418\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294409680\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260418\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355550219\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260418\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354015338\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260419T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910860530\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260418T183000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078577595\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260418T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699849925\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260418T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691988778\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260418T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682861479\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260418T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708345629\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260418T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260418T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668872713\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260419\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294410705\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260419\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355552268\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260419\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354016363\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260420T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910861555\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Join us for fun and free drop-in art-making and live musical pe\r\n rformances outdoors between the Cantor Arts Center and  Anderson Collection\r\n .\\n\\nART for ALL Family Day is a celebration for all families and ages. Eng\r\n age with art at the Stanford museums through free hands-on art activities a\r\n nd live music outside on the lawn plus story time and a scavenger hunt in t\r\n he galleries! Our upcoming activities are inspired by the Cantor’s featured\r\n  exhibitions\\, Jeremy Frey: Woven and Animal\\, Vegetable\\, nor Mineral: Wor\r\n ks by Miljohn Ruperto\\, as well as works in the Anderson Collection includi\r\n ng Sam Francis’s The Beaubourg and Erika Chong Shuch’s 1\\,000 Ways to Hold.\r\n  \\n\\nArt Activities at the Cantor Arts Center\\n\\nFantastical animal botanic\r\n als/ Patterns in the Round  / Fabric Baskets\\n\\nArt Activities at the Ander\r\n son Collection\\n\\nClay bowls / Tissue paper watercolor\\n\\nStory Time & Scav\r\n enger Hunt\\n\\nJoin us in the galleries for family-friendly stories and an i\r\n nteractive scavenger hunt!\\n\\nLive Performance\\n\\nEnjoy lively performances\r\n  by Stanford student groups on the outdoor stage!\\n\\nSessions:\\n\\nMorning: \r\n 10AM - 12PM | Afternoon: 1PM - 3PM\\n\\nSpace is limited. Please register for\r\n  one session only. \\n\\nImportant Event Information:\\n\\nPhotography & Filmin\r\n g: Please be advised that professional filming and photography will be taki\r\n ng place at this event for future promotional use. If you or your children \r\n prefer not to be recorded\\, please notify staff at the check-in desk to rec\r\n eive a colored sticker. Our videographer will avoid capturing anyone wearin\r\n g this sticker.Pet Policy: For the safety and comfort of all guests\\, pets \r\n are not permitted at this event.Art for All Family Day is made possible thr\r\n ough the generous support of the Hohbach Family Fund.\\n\\nREGISTER AND GET Y\r\n OUR FREE TICKETS: \\n\\nSpace is limited. Please register for one session onl\r\n y!\\n\\nMorning Session HERE / Afternoon Session HERE\\n\\nParking\\n\\nFree visi\r\n tor parking is available along Lomita Drive as well as on the first floor o\r\n f the Roth Way Garage Structure\\, located at the corner of Campus Drive Wes\r\n t and Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. From the Palo Alt\r\n o Caltrain station\\, the Cantor Arts Center is about a 20-minute walk.\\n\\nD\r\n isability parking is located along Lomita Drive near the main entrance of t\r\n he Cantor Arts Center. Additional disability parking is located on Museum W\r\n ay and in Parking Structure 1 (Roth Way & Campus Drive). Please click here \r\n to view the disability parking and access points.\\n\\nAccessibility Informat\r\n ion or Requests\\n\\nCantor Arts Center at Stanford University is committed t\r\n o ensuring our programs are accessible to everyone. To request access infor\r\n mation and/or accommodations for this event\\, please complete this form at \r\n least one week prior to the event: museum.stanford.edu/access.\\n\\nThe main \r\n entrance of the Cantor Arts Center (Lomita Drive) is not accessible. The ac\r\n cessible entrance is down a pathway just to the left of the main entrance s\r\n tairs. Just inside the accessible entrance\\, equipped with a power-operated\r\n  door\\, an enclosed wheelchair lift provides access to the 1st floor main l\r\n obby.\\n\\nFor accessibility questions\\, please contact disability.access@sta\r\n nford.edu\\n\\nAll public programs at the Cantor Arts Center are always free!\r\n  Space for this program is limited\\; advance registration is recommended. T\r\n hose who have registered will have priority for seating. \\n\\n________\\n\\nAc\r\n cessibility Information or Requests\\n\\nCantor Arts Center at Stanford Unive\r\n rsity is committed to ensuring our programs are accessible to everyone. To \r\n request access information and/or accommodations for this event\\, please co\r\n mplete this form at least one week prior to the event: museum.stanford.edu/\r\n access.\\n\\nFor questions\\, please contact disability.access@stanford.edu or\r\n  Kwang-Mi Ro\\, kwangmi8@stanford.edu\\, (650) 723-3469.\\n\\nConnect with the \r\n Cantor Arts Center! Subscribe to our mailing list and follow us on Instagra\r\n m.\r\nDTEND:20260419T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T170000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Art for All Family Day\\, Spring 2026\r\nUID:tag:localist.com\\,2008:EventInstance_52128310453138\r\nURL:https://events.stanford.edu/event/art-for-all-family-day-spring-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260419T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809531766\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Multifaith Service with Rabbi Ilana Goldhaber-Gordon\r\n \\, Associate Dean for Religious & Spiritual Life and Campus Rabbi\\, preachi\r\n ng.\\n\\nUniversity Public Worship gathers weekly for the religious\\, spiritu\r\n al\\, ethical\\, and moral formation of the Stanford community. Rooted in the\r\n  history and progressive Christian tradition of Stanford’s historic Memoria\r\n l Church\\, we cultivate a community of compassion and belonging through ecu\r\n menical Christian worship and occasional multifaith celebrations.\r\nDTEND:20260419T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Multifaith Service with Rabbi\r\n  Ilana Goldhaber-Gordon Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51958687449662\r\nURL:https://events.stanford.edu/event/upw-with-rabbi-ilana\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260419T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691991851\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260419T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682862504\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:¡Ven a conocer el museo Cantor!\\n\\nExplora las colecciones del \r\n Cantor con un guía que te guiará a través de una selección de obras de dife\r\n rentes culturas y épocas.\\n\\nLos participantes están muy bienvenidos a part\r\n icipar en la conversación y aportar sus ideas sobre los temas explorados a \r\n lo largo de la visita si lo desean.\\n\\nLas visitas no requieren reserva pre\r\n via y son gratuitas. Se ruega registrarse en el mostrador de atención al vi\r\n sitante del vestíbulo principal del museo. \\n\\n ¡Esperamos verte en el muse\r\n o!\\n_______________________________________\\n\\nCome and visit the Cantor! \\\r\n n\\nExplore the Cantor's collections with a museum engagement guide who will\r\n  lead you through a selection of works from different cultures and time per\r\n iods.\\n\\nParticipants are welcomed to participate in the conversation and p\r\n rovide their thoughts on themes explored throughout the tour but are also f\r\n ree to engage at their own comfort level. \\n\\n Tours do not require a reser\r\n vation and are free of charge. Please check-in at the visitor services desk\r\n  in the main museum lobby.\r\nDTEND:20260419T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Spanish \r\nUID:tag:localist.com\\,2008:EventInstance_52057413916628\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -spanish-language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260419T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766129220\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260419T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708347678\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260419T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260419T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668874762\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The first and second of three spring quarter bills are due for \r\n graduate students. Any new student charges posted since the last bill will \r\n be shown on this bill.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260420\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:First & Second Spring Quarter Bills Due for Graduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720418529\r\nURL:https://events.stanford.edu/event/first-second-spring-quarter-bills-due\r\n -for-graduate-students-4711\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:This exhibit\\, based primarily on materials in the Roxane Debui\r\n sson Collection on Paris History at Stanford University Libraries\\, highlig\r\n hts  the role of Paris as a fertile environment for technological\\, commerc\r\n ial\\, and artistic change through the lens of the industrial and universal \r\n expositions held in the city at regular intervals between 1798 and 1900. Th\r\n ese events\\, held for the express purpose of establishing France’s world st\r\n atus as a modern nation\\, promoted the idea of France\\, and especially Pari\r\n s\\, as a place of  technological\\, commercial\\, and cultural progress\\, by \r\n creating an event for artisans and industrialists to show their newest and \r\n most innovative products to a large\\, and international public. \\n\\nThe uni\r\n versal expositions had lasting effects on Paris itself\\, changing the cultu\r\n re\\, commerce\\, and appearance of the city. Many of the monuments that we a\r\n ssociate with the city today - the Eiffel Tower\\, the Paris Metro\\, and the\r\n  Grand and Petit Palais\\, were built expressly for these events. While trav\r\n ellers had long visited Paris\\, these expositions opened the city to massiv\r\n e numbers of new visitors\\, new types of leisure experiences\\, and new prod\r\n ucts from around the world. Using a wide variety of materials from the Roxa\r\n ne Debuisson Collection on Paris History\\, this exhibit showcases the unive\r\n rsal expositions through the following themes: innovation and industry\\; co\r\n mmerce\\; monuments and infrastructure\\; leisure and the lived experience\\; \r\n and the world in Paris. \\n\\nRoxane Debuisson had an indefatigable appetite \r\n for seeking out and acquiring materials documenting the changing urban fabr\r\n ic and commercial life of Paris. Her collecting activities spanned over 60 \r\n years\\, from 1957\\, when she purchased her first book on the history of Par\r\n is\\, until 2018\\, the year of her passing. Her collection centered on the c\r\n ommercial\\, cartographic\\, and architectural history of the city\\, with a f\r\n ocus on the long 19th century. She documented this history through books\\, \r\n postcards\\, stereoview cards\\, photographs\\, maps\\, engravings\\, periodical\r\n s\\, and invoices from shops around Paris. Stanford University Libraries acq\r\n uired her collection in 2020.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260420\r\nGEO:37.426631;-122.167086\r\nLOCATION:Hohbach Hall\r\nSEQUENCE:0\r\nSUMMARY:Paris\\, City of Innovation:  19th-century Universal Expositions as \r\n seen through the Roxane Debuisson Collection of Paris History \r\nUID:tag:localist.com\\,2008:EventInstance_52146354017388\r\nURL:https://events.stanford.edu/event/paris-city-of-innovation-19th-century\r\n -universal-expositions-as-seen-through-the-roxane-debuisson-collection-of-p\r\n aris-history\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The second of three bills generated for the spring quarter is d\r\n ue for all undergraduate students. This includes tuition\\, mandatory and co\r\n urse fees\\, updates or changes to housing and dining\\, and other student fe\r\n es.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260420\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Second Spring Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720528108\r\nURL:https://events.stanford.edu/event/second-spring-quarter-bill-due-for-un\r\n dergraduate-students-6821\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260421T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260420T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910862580\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260420T191500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260420T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314073214\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260421T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260420T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068299716\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Continue the conversation: Join the speaker for a complimentary\r\n  dinner in the Theory Center (second floor of the neurosciences building) a\r\n fter the seminar\\n\\nHow are dynamical systems composed for complex behavior\r\n ?Abstract \\n\\nComputational processes in neural systems emerge through lear\r\n ning across multiple timescales\\; from evolution and development to immedia\r\n te\\, in-context adaptation. Yet fundamental questions remain: Which neural \r\n architectures confer evolutionary advantages? How do experiences shape circ\r\n uit dynamics? What principles govern how specific computations arise during\r\n  training? My group addresses these questions using data-driven models\\, si\r\n mulations\\, and analytical methods. Building on a decade of research across\r\n  multiple labs\\, we focus on fixed point structures\\, termed \"dynamical mot\r\n ifs”\\, that serve as computational primitives. We've discovered that these \r\n motifs can be flexibly composed to solve diverse tasks\\, with rapid learnin\r\n g often involving novel recombination of existing motifs rather than constr\r\n uction of entirely new dynamics. However\\, the principles governing motif c\r\n omposition remain poorly understood\\, motivating our simulation-based appro\r\n ach. I will present two ongoing projects that illustrate this framework: Dy\r\n namical motifs underlying foraging behavior: How fundamental dynamical moti\r\n fs support naturalistic decision-making and navigation. How task structure \r\n shapes computational dynamics: The relationship between problem structure a\r\n nd the organization of dynamical systems that solve it.\\n\\n \\n\\nLaura Drisc\r\n ollAllen Institute\\n\\nVery little is known about how humans and other anima\r\n ls compose elements of past learning to solve similar problems in new situa\r\n tions. To explore these and related questions\\, I recently joined the Allen\r\n  Institute for Neural Dynamics. My group will utilize data-driven models\\, \r\n simulations\\, and analytical methods\\, with close ties to experimental grou\r\n ps collecting behavioral and neural data. We will examine how previous lear\r\n ning shapes behavior in novel environments.\\n\\nThis work is informed by my \r\n postdoctoral training with Krishna V. Shenoy and David Sussillo in the Neur\r\n al Prosthetic Systems Laboratory (NPSL) at Stanford University\\, where I re\r\n verse-engineered recurrently connected neural networks to uncover shared dy\r\n namical motifs across multiple related computations.\\n\\nMy graduate trainin\r\n g with Chris Harvey at Harvard University shapes my thinking about structur\r\n es of knowledge in the brain. We discovered that neural activity patterns\\,\r\n  correlated with sensation and action\\, often aren’t stable. Instead\\, they\r\n  undergo large-scale changes over days and weeks — a phenomenon now called \r\n representational drift.\\n\\nVisit Lab Website \\n\\nHosted by Alice Tor (Stanf\r\n ord Profile)\\n\\n \\n\\nAbout the Mind\\, Brain\\, Computation\\, and Technology \r\n (MBCT) Seminar SeriesThe Stanford Center for Mind\\, Brain\\, Computation and\r\n  Technology (MBCT) Seminars explore ways in which computational and technic\r\n al approaches are being used to advance the frontiers of neuroscience. \\n\\n\r\n The series features speakers from other institutions\\, Stanford faculty\\, a\r\n nd senior training program trainees. Seminars occur about every other week\\\r\n , and are held at 4:00 pm on Mondays at the Cynthia Fry Gunn Rotunda - Stan\r\n ford Neurosciences E-241. \\n\\nQuestions? Contact neuroscience@stanford.edu\\\r\n n\\nSign up to hear about all our upcoming events\r\nDTEND:20260421T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260420T230000Z\r\nLOCATION:Stanford Neurosciences Building | Gunn Rotunda (E241)\r\nSEQUENCE:0\r\nSUMMARY:MBCT Seminar: Laura Driscoll - How are dynamical systems composed f\r\n or complex behavior?\r\nUID:tag:localist.com\\,2008:EventInstance_50919730016667\r\nURL:https://events.stanford.edu/event/mbct-seminar-laura-driscoll-fast-and-\r\n slow-learning-the-dynamical-systems-that-implement-computation\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260421T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430658419\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260422T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910863605\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260422T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068300741\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:In today’s world - flooded with conflicting nutrition advice\\, \r\n diet trends\\, and curated social media messages - it is easy to feel discon\r\n nected from our bodies. Confusing and often contradictory recommendations a\r\n bout what\\, when\\, and how to eat can leave people spinning\\, unsure of whi\r\n ch messages to trust and increasingly distanced from their own internal cue\r\n s. Over time\\, this noise can undermine both physical health and emotional \r\n well-being\\, contributing to stress\\, guilt around food\\, and strained rela\r\n tionships with eating and body image.\\n\\nJoin us for a three-part online cl\r\n ass grounded in a whole body\\, whole food\\, whole person approach to nutrit\r\n ion. Designed and led by a dietitian who views health as more than numbers \r\n or weight\\, this interactive series integrates nutrition science with self-\r\n reflection and practical skill-building. You will explore how body percepti\r\n on\\, lived experiences\\, and environmental influences shape eating behavior\r\n s\\, while learning how to move away from rigid rules and toward nourishment\r\n  that supports the whole person.\\n\\nThroughout the series\\, you will gain t\r\n ools to untangle cognitive dissonance around food and health\\, rebuild trus\r\n t in hunger and fullness cues\\, and cultivate body respect and self-compass\r\n ion. Emphasis is placed on sustainable\\, realistic strategies that honor ph\r\n ysical needs\\, mental health\\, culture\\, and daily life\\, not perfection or\r\n  restriction.\\n\\nBy the end of the series\\, you will have a clearer framewo\r\n rk for navigating nutrition information without overwhelm and a deeper unde\r\n rstanding of how to care for your body with intention\\, flexibility\\, and c\r\n ompassion.\\n\\nThis class will not be recorded. Attendance requirement for i\r\n ncentive points - at least 80% of all 3 sessions.  Request disability accom\r\n modations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260421T201500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Healthy Me\\, Healthy Body (April 21 - May 5)\r\nUID:tag:localist.com\\,2008:EventInstance_52220231637845\r\nURL:https://events.stanford.edu/event/healthy-me-healthy-body-april-21-may-\r\n 5\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Session Description:\\n\\nStanford's libraries include some of th\r\n e most extensive digitized primary source collections on African history av\r\n ailable to researchers today\\, but many researchers are unfamiliar with wha\r\n t is available or how to use it effectively. This session\\, led by Academic\r\n  Engagement Specialist Joseph Young-Perez\\, introduces Stanford researchers\r\n  and students to AM (formerly Adam Matthew)’s collections in African and co\r\n lonial history. The session will include a live demonstration of one or mor\r\n e databases\\, with an eye toward both research applications and classroom u\r\n se. Whether you are a seasoned archival researcher or just beginning to exp\r\n lore digital primary sources\\, this is an opportunity to see what is availa\r\n ble at Stanford and how to make the most of it.\\n\\nRSVP to attend here\\n\\nS\r\n hort Bio: Joseph Young-Perez is an Academic Engagement Specialist at AM\\, w\r\n here he works with historians and researchers across the United States to h\r\n elp them integrate AM's primary source databases into their scholarship and\r\n  teaching. A graduate of Yale University\\, he plans to pursue doctoral stud\r\n y in History beginning in Fall 2026 with a focus on modern France and the a\r\n fterlives of the French empire.\r\nDTEND:20260421T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Researching Africa in the Digital Archive: A Guide to AM's Collecti\r\n ons at Stanford - Joe Young-Perez\r\nUID:tag:localist.com\\,2008:EventInstance_52179527822603\r\nURL:https://events.stanford.edu/event/researching-africa-in-the-digital-arc\r\n hive-a-guide-to-ams-collections-at-stanford-joe-young-perez\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260421T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491623841\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Science is full of metaphors. From black holes \"eating\" stars\\,\r\n  to yeast \"cell factories\"\\, to brain \"circuitry\" —the language researchers\r\n  use has the power to shape how ideas are received and remembered. Whether \r\n you're crafting a grant proposal\\, communicating across disciplines\\, or bu\r\n ilding a public profile\\, the ability to translate complex research into re\r\n sonant\\, accessible ideas sets strong scientists apart. Over 3 weekly sessi\r\n ons\\, you'll learn how to build a science metaphor from the ground up—notic\r\n ing the metaphors already embedded in your field\\, evaluating what makes th\r\n em effective or limiting\\, and developing your own with intention.You'll\\nl\r\n eave with a sharper communication toolkit and a deeper understanding of how\r\n  language shapes the way your work is understood and valued.\\n\\nIntensity L\r\n evel: Mild intensity\\n\\nMultiple topics are covered at a steady pace\\, with\r\n  in-class activities requiring some preparation. Some out-of-class work is \r\n required\\, and regular in-class participation is expected. Students will de\r\n velop a moderate level of skill-building during the course.Facilitated by: \r\n Kel Haung\\, student\\n\\nDetails: \\n\\nWhen: April 14\\, 21\\, 28 (Tuesdays)\\, 4\r\n -6PM\\n\\nOpen to enrolled graduate students at any stage in any discipline o\r\n r degree program. Postdocs will be accepted if space is available\\, but pri\r\n ority is given to graduate students.\\n\\nMetaphors in Science is an in-perso\r\n n\\, three-part workshop. Session dates are Tuesday's April 14\\, 21\\,28 from\r\n  4-6PM. Space is limited. Due to the workshop’s interactive format\\, full p\r\n articipation in all three sessions is required. Dinner will be served. \\n\\n\r\n If you are accepted to this workshop\\, you must confirm your place by submi\r\n tting a Student Participation Fee Agreement\\, which authorizes VPGE to char\r\n ge $50 to your Stanford bill – only if you do not fully participate in the \r\n event. You will receive a link to the Agreement and instructions if you are\r\n  offered a place.\\n\\nApplication deadline: Tuesday\\, April 7th @11:59PM PT.\r\n \\n\\nApply here\r\nDTEND:20260422T010000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260421T230000Z\r\nLOCATION:EVGR 144B\r\nSEQUENCE:0\r\nSUMMARY:Metaphors in Science: A Researcher's Guide to Communicating Ideas T\r\n hat Stick\r\nUID:tag:localist.com\\,2008:EventInstance_52198127518700\r\nURL:https://events.stanford.edu/event/metaphors-in-science-a-researchers-gu\r\n ide-to-communicating-ideas-that-stick\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260422T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663084983\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260422T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622318992\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260422\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294415828\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260422\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355553293\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewJoin us for the 7th Annual Teaching Cannabis (and other\r\n  drugs!) Awareness & Prevention Virtual Conference: Tobacco/Nicotine\\, Fent\r\n anyl/Opioids\\, Alcohol\\, Hallucinogens\\, and other substances. This 2-day p\r\n rogram focuses on substance use education and prevention among youth\\, stat\r\n e and federal policies affecting youth\\; and available lessons for teaching\r\n  substance education and prevention to middle and high school-aged youth. D\r\n esigned for pediatricians\\, primary care providers\\, and the broader health\r\n care team\\, this activity also welcomes educators\\, community-based organiz\r\n ations\\, school administrators\\, parents\\, and school resource officers who\r\n  play a critical role in supporting adolescent health.\\n\\nParticipants will\r\n  gain practical strategies and evidence-based tools to:\\n\\nDeliver age-appr\r\n opriate lessons to middle and high school students about the risks and effe\r\n cts of cannabis and other commonly used substances.\\n\\nExplore the latest r\r\n esearch on cannabis use in youth\\, including its impact on the brain\\, card\r\n iovascular system\\, and respiratory health. Identify early intervention str\r\n ategies for adolescents experimenting with or regularly using substances.\\n\r\n \\nBy bringing together healthcare professionals\\, educators\\, and community\r\n  leaders\\, the conference promotes a collaborative approach to youth substa\r\n nce use prevention and equips participants with the skills to support healt\r\n hier futures for adolescents.\\n\\nRegistrationRegistration for all healthcar\r\n e providers and participants:\\n\\nEarly Bird Registration Fee (ends 02/02/20\r\n 26): $100.00\\n\\nRegistration Fee (after 02/02/2026): $125.00\\n\\nTo register\r\n  for this activity\\, please click HERE\\n\\nCreditsAMA PRA Category 1 Credits\r\n ™ (9.25 hours)\\, ANCC Contact Hours (9.25 hours)\\, APA Continuing Education\r\n  credits (9.25 hours)\\, ASWB Continuing Education (ACE) credits (9.25 hours\r\n )\\, Non-Physician Participation Credit (9.25 hours)\\n\\nTarget AudienceSpeci\r\n alties - Adolescent Medicine\\, Community Health and Family Medicine\\, Famil\r\n y Medicine & Community Health\\, Health Outcomes and Biomedical Informatics\\\r\n , Pediatrics\\, Preventative Medicine & Nutrition\\, Psychiatry & Behavioral \r\n SciencesProfessions - Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\,\r\n  Psychologist\\, Registered Nurse (RN)\\, Social Worker ObjectivesAt the conc\r\n lusion of this activity\\, learners should be able to: 1. Discuss the latest\r\n  research on cannabis and other substances in youth\\, including the effects\r\n  on the brain\\, heart\\, and lungs\\n2. Explain how tobacco\\, cannabis\\, and \r\n other drugs intersect\\n3. Apply evidence-based early intervention strategie\r\n s to prevent and reduce ongoing substance use in adolescents.\\n4. Identify \r\n key state and federal policies that impact youth access\\, prevention\\, and \r\n treatment related to cannabis and other substances\\n5. Integrate practical\\\r\n , age-appropriate lessons and teaching strategies into clinical or educatio\r\n nal settings to support substance use awareness and prevention Accreditatio\r\n nIn support of improving patient care\\, Stanford Medicine is jointly accred\r\n ited by the Accreditation Council for Continuing Medical Education (ACCME)\\\r\n , the Accreditation Council for Pharmacy Education (ACPE)\\, and the America\r\n n Nurses Credentialing Center (ANCC)\\, to provide continuing education for \r\n the healthcare team. \\n \\nCredit Designation \\nAmerican Medical Association\r\n  (AMA) \\nStanford Medicine designates this Live Activity for a maximum of 9\r\n .25 AMA PRA Category 1 CreditsTM.  Physicians should claim only the credit \r\n commensurate with the extent of their participation in the activity. \\n\\nAm\r\n erican Nurses Credentialing Center (ANCC) \\nStanford Medicine designates th\r\n is live activity for a maximum of 9.25 ANCC contact hours.  \\n\\nASWB Approv\r\n ed Continuing Education Credit (ACE) – Social Work Credit \\nAs a Jointly Ac\r\n credited Organization\\, Stanford Medicine is approved to offer social work \r\n continuing education by the Association of Social Work Boards (ASWB) Approv\r\n ed Continuing Education (ACE) program. Organizations\\, not individual cours\r\n es\\, are approved under this program. Regulatory boards are the final autho\r\n rity on courses accepted for continuing education credit. Social workers co\r\n mpleting this activity receive 9.25 general continuing education credits. \\\r\n n\\nAmerican Psychological Association (APA) \\nContinuing Education (CE) cre\r\n dits for psychologists are provided through the co-sponsorship of the Ameri\r\n can Psychological Association (APA) Office of Continuing Education in Psych\r\n ology (CEP). The APA CEP Office maintains responsibility for the content of\r\n  the programs. \\n\\nCounseling CE\\nThe California Board of Behavioral Scienc\r\n es recognizes the Association of Social Work Boards (ASWB) and the American\r\n  Psychological Association (APA) as approval agencies for CE. Through Joint\r\n  Accreditation\\, Stanford Medicine is able to provide ASWB and APA credits \r\n for its activities.\r\nDTEND:20260422T160000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:7th Annual Teaching Cannabis (and other drugs) Awareness & Preventi\r\n on Virtual Conference: Tobacco/Nicotine\\, Fentanyl/Opioids\\, Alcohol\\, Hall\r\n ucinogens\\, and other substances!\r\nUID:tag:localist.com\\,2008:EventInstance_51081018812757\r\nURL:https://events.stanford.edu/event/7th-annual-teaching-cannabis-and-othe\r\n r-drugs-awareness-prevention-virtual-conference-tobacconicotine-fentanylopi\r\n oids-alcohol-hallucinogens-and-other-substances\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260423T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910864630\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Do you or anyone in your school or unit work with minors? Stanf\r\n ord's policy for Protection of Minors requires that anyone working directly\r\n  with\\, supervising\\, chaperoning\\, or otherwise overseeing minors (individ\r\n uals under 18 years of age) in Stanford-sponsored programs or activities mu\r\n st complete a Live Scan background check.\\n\\nA Live Scan unit will be on ca\r\n mpus to provide fingerprinting service at no cost to the employee or the de\r\n partment. Please note\\, this Live Scan fingerprinting session can only proc\r\n ess Live Scan application forms where results are submitted to Stanford. If\r\n  you have previously cleared a Live Scan background check for Stanford and \r\n subsequently left the university\\, you may be required to complete a Live S\r\n can background check again. Reach out to your youth program contact to conf\r\n irm whether your results are on file. \\n\\nAll Program Staff will need to su\r\n bmit their completed Live Scan application forms to University Human Resour\r\n ces.  Program Staff will not meet the university’s Live Scan requirement un\r\n less they have completed this step.  Once Program Staff complete the finger\r\n print submission\\, they must submit their forms through this link. Please n\r\n ote if Program Staff complete Live Scan at a free on-campus session hosted \r\n by Stanford\\, a copy of their application form will be submitted to Univers\r\n ity Human Resources directly by the vendor. \\n\\nPlease complete these steps\r\n  before going to a Live Scan event: \\n\\nPlease bring a completed Live Scan \r\n application form. If you are an Employee\\, identify the specific program/ac\r\n tivity for which you are completing Live Scan in the field \"Type of License\r\n /Certification/Permit OR Working Title.\" If you are a Volunteer\\, enter “Vo\r\n lunteer” in this field.  Note that this field is limited to 30 characters. \r\n Bring a government-issued ID\\, such as a Driver's License or passport (with\r\n  U.S. visa).\\n\\nIf you have any questions\\, please see the Protection of Mi\r\n nors website or download the FAQ.  You can also contact University Human Re\r\n sources—Employee & Labor Relations at 650-721-4272 or protectminors@stanfor\r\n d.edu.\r\nDTEND:20260422T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T160000Z\r\nGEO:37.429623;-122.160633\r\nLOCATION:Maples Pavilion\r\nSEQUENCE:0\r\nSUMMARY:Protection of Minors Live Scan Fingerprinting\r\nUID:tag:localist.com\\,2008:EventInstance_51577845057139\r\nURL:https://events.stanford.edu/event/copy-of-protection-of-minors-live-sca\r\n n-fingerprinting-1448\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260422T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105027202\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Date and Time: 11:00AM–12:00PM\\, Wednesday\\, April 22\\, 2026\\n\\\r\n nLocation: Zoom (link provided upon registration)\\n\\nLead Instructor: Maric\r\n ela Abarca (Data Curator for Interdisciplinary Sustainability)\\n\\nFederal f\r\n unding agencies\\, for example the National Science Foundation (NSF) require\r\n  Data Management and Sharing Plans (DMSPs) to be submitted with proposals. \r\n Proposal submission guidelines include physical samples as research data. D\r\n MSPs describe how funded projects “will manage\\, disseminate\\, and share re\r\n search results”.\\n\\nThis workshop will introduce common sections of Data Ma\r\n nagement and Sharing Plans and how to fill them out successfully. Attendees\r\n  will learn how to start a plan\\, how to improve one\\, and where to get tai\r\n lored help with DMSPs on campus. We will also review changes to NSF guideli\r\n nes going into effect this year regarding DMSPs in proposal submissions. At\r\n tendees are also welcome to bring any in-progress plans for feedback. \\n\\nP\r\n lease register to attend. Registration is exclusively open to current Stanf\r\n ord Affiliates.\r\nDTEND:20260422T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T180000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Data Management and Sharing Plans 101\r\nUID:tag:localist.com\\,2008:EventInstance_52277919325629\r\nURL:https://events.stanford.edu/event/data-management-and-sharing-plans-101\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260423T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068301766\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Do you have a slide deck that needs some help\\, but you’re not \r\n sure what to do? Are you interested in learning how to make your ideas stan\r\n d out\\, so that your presentation can be more engaging? This session covers\r\n  communication and slide design principles to enhance the visual appeal and\r\n  communicative force of your presentation. We'll discuss how to approach th\r\n e selection and arrangement of elements on your slide to amplify your key m\r\n essage and storyline\\, and techniques to enhance the visual appeal of your \r\n deck. We encourage you to bring your questions and have a few slides ready \r\n to work with.\\n\\nExperience Level: Entry-Level\\n\\nRegister Here\\n\\nFacilita\r\n ted by Helen Lie\\, Lecturer in the Oral Communication Program\\n\\nAbout Quic\r\n k Bytes:\\n\\nGet valuable professional development wisdom that you can apply\r\n  right away! Quick Bytes sessions cover a variety of topics and include lun\r\n ch. Relevant to graduate students at any stage in any degree program.\\n\\nSe\r\n e the full Quick Bytes schedule\r\nDTEND:20260422T201500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T190000Z\r\nLOCATION:Tresidder Memorial Union\\, Oak West Lounge\r\nSEQUENCE:0\r\nSUMMARY:Quick Bytes: Slide Design Tips and Techniques\r\nUID:tag:localist.com\\,2008:EventInstance_52197924561199\r\nURL:https://events.stanford.edu/event/quick-bytes-slide-design-tips-and-tec\r\n hniques-april22\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260422T201500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51958777361769\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Blau and Huang Lab\r\n s\\, Minas Nalbandian \"TBA\"/Morgan Su\\, \"TBA\"\r\nDTEND:20260422T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Blau and Huang Labs\\, \r\n Minas Nalbandian \"TBA\"/Morgan Su\\, \"TBA\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144453385736\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-blau-and-huang-labs-minas-nalbandian-tbamorgan-su-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260423T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743788509\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for the Center for African Studies’ Centering Africa An\r\n nual Lecture\\, a signature platform that highlights the work and intellectu\r\n al contributions of leading figures shaping African and diasporic scholarsh\r\n ip and practice. This year’s lecture\\, The Arts of Africa: A Living Archive\r\n \\, will feature Natasha Becker\\, the inaugural Curator of African Art at th\r\n e Fine Arts Museums of San Francisco.\\n\\nIn this lecture\\, Becker will shar\r\n e her transhistorical curatorial approach to African art\\, exploring how ex\r\n hibitions and collections might be shaped by heritage\\, care\\, and relation\r\n ality rather than institutional taxonomies. Engaging contemporary artists\\,\r\n  The Living Archive foregrounds themes of ancestral presence\\, material mem\r\n ory\\, performative ecologies\\, and social space\\, inviting audiences into a\r\n n immersive\\, nonlinear\\, and deeply contextual experience.\\n\\nThis event w\r\n ill be held in person and streamed virtually. RSVP is required to attend.\\n\r\n RSVP for the in-person event\\n\\nRSVP for the hybrid Event\\n\\nNatasha Becker\r\n  is the inaugural Curator of African Art at the Fine Arts Museums of San Fr\r\n ancisco\\, where she leads the museum’s growing collection and curates exhib\r\n itions that bring contemporary African artists into dialogue with historica\r\n l traditions. Since 2020\\, she has reenergized the Arts of Africa gallery w\r\n ith innovative exhibitions such as Lhola Amira: Facing the Future and Leila\r\n h Babirye: We Have a History\\, each exploring how today’s artists criticall\r\n y engage with African art legacies. \\nBecker has also expanded the collecti\r\n on with works by influential figures\\, including Esther Mahlangu\\, Yinka Sh\r\n onibare\\, Elias Sime\\, and William Kentridge\\, alongside rising voices such\r\n  as Leilah Babirye\\, Ranti Bam\\, and Wendimagegn Belete. A respected voice \r\n in the field\\, Becker is deeply committed to mentorship\\, guiding museum fe\r\n llows\\, graduate students\\, and emerging professionals. She serves on the a\r\n dvisory group for Nexus/Black Art Week at the Museum of the African Diaspor\r\n a and contributes regularly to the Fine Arts Museums Magazine\\, exhibition \r\n catalogues\\, and artist monographs. An active public speaker\\, she has pres\r\n ented at institutions such as the Neuberger Museum\\, LACMA\\, and Stanford U\r\n niversity\\, and is a member of both the Arts Council of the African Studies\r\n  Association and the Association of Art Museum Curators. Becker holds a Mas\r\n ter’s degree in History from the University of the Western Cape\\, South Afr\r\n ica\\, and pursued graduate coursework in art history at Binghamton Universi\r\n ty\\, New York.\\n\\n\"We gratefully acknowledge support from the Ruth K. Frank\r\n lin Lecture and Symposium Fund.\"\r\nDTEND:20260423T010000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260422T230000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 123\r\nSEQUENCE:0\r\nSUMMARY:The Arts of Africa: A Living Archive - Natasha Becker\r\nUID:tag:localist.com\\,2008:EventInstance_52005631602341\r\nURL:https://events.stanford.edu/event/the-arts-of-africa-a-living-archive-n\r\n atasha-becker\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260423T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379385544\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford Public Humanities invites you to join us for an event \r\n and lively conversation celebrating the release of historian Jessica Riskin\r\n 's new book The Power of Life (Riverhead Books/Penguin\\, March 24\\, 2026). \r\n The French naturalist Jean-Baptiste Lamarck is one of the most misunderstoo\r\n d and misrepresented figures in the history of science. Working in Paris in\r\n  the late eighteenth and early nineteenth centuries\\, he proposed the first\r\n  evolutionary theory of life and with it a new science: biology. But his bo\r\n ld reimagining of nature was as radical as it was heretical\\, earning him f\r\n ormidable enemies and consigning him to the margins of science for the past\r\n  two centuries. In The Power of Life Riskin tells the story of Lamarck’s li\r\n fe and work as an intense struggle between rival forces to answer questions\r\n  that remain foundational to our modern worldview: What is a living being\\,\r\n  and what is science?\\n\\nJessica Riskin will be in conversation with Tom Ha\r\n yden\\, Director of Stanford's Graduate Environmental Communication Program.\r\n  They will discuss everything from how to wrangle controversial scientific \r\n ideas into a compelling story to the journey of writing a book for a popula\r\n r audience. Book selling and signing to follow! \\n\\nThis event is cosponsor\r\n ed by the Departments of History and Biology\\, the Program in Human Biology\r\n \\, the Earth Systems Environmental Communication Program\\, and the Stanford\r\n  Humanities Center. \\n\\nRSVP to attend in person\\n\\nRegister to watch the e\r\n vent online\\n\\nJessica Riskin is the Frances and Charles Field Professor of\r\n  History at Stanford University\\, where she teaches modern European history\r\n  and the history of science. Her work examines the changing nature of scien\r\n tific explanation\\, the relations of science\\, culture and politics\\, and t\r\n he history of theories of life and mind. Her books include The Restless Clo\r\n ck: A History of the Centuries-Long Argument over What Makes Living Things \r\n Tick (2016) and Science in the Age of Sensibility (2002). She is a regular \r\n contributor to various publications including Aeon\\, the Los Angeles Review\r\n  of Books and the New York Review of Books. \\n\\nTom Hayden is the founding \r\n director of Stanford’s graduate program in Environmental Communication. His\r\n  students engage with the full range of science and environmental communica\r\n tion\\, including journalism\\, multimedia production\\, strategic and policy \r\n communications\\, education\\, and art. Hayden trained as an oceanographer an\r\n d came to Stanford in 2008 following a career in magazine journalism at pub\r\n lications including Newsweek and US News & World Report. He is coauthor of \r\n two books and co-editor of The Science Writers’ Handbook.\r\nDTEND:20260423T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T003000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:Behind the Book: Historian Jessica Riskin on \"The Power of Life \" \r\nUID:tag:localist.com\\,2008:EventInstance_51833934128247\r\nURL:https://events.stanford.edu/event/behind-the-book-historian-jessica-ris\r\n kin-on-the-power-of-life\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Join Stanford alumni\\, students\\, and community members at Orac\r\n le Park for Stanford Night! Score discounted tickets to see the Giants take\r\n  on the Dodgers and snag an exlusive Stanford x Giants rope hat!\r\nDTEND:20260423T024500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T014500Z\r\nGEO:37.778349;-122.3877\r\nLOCATION:Oracle Park\r\nSEQUENCE:0\r\nSUMMARY:Stanford Night With The San Francisco Giants\r\nUID:tag:localist.com\\,2008:EventInstance_52251049895117\r\nURL:https://events.stanford.edu/event/stanford-night-with-the-san-francisco\r\n -giants\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewJoin us for the 7th Annual Teaching Cannabis (and other\r\n  drugs!) Awareness & Prevention Virtual Conference: Tobacco/Nicotine\\, Fent\r\n anyl/Opioids\\, Alcohol\\, Hallucinogens\\, and other substances. This 2-day p\r\n rogram focuses on substance use education and prevention among youth\\, stat\r\n e and federal policies affecting youth\\; and available lessons for teaching\r\n  substance education and prevention to middle and high school-aged youth. D\r\n esigned for pediatricians\\, primary care providers\\, and the broader health\r\n care team\\, this activity also welcomes educators\\, community-based organiz\r\n ations\\, school administrators\\, parents\\, and school resource officers who\r\n  play a critical role in supporting adolescent health.\\n\\nParticipants will\r\n  gain practical strategies and evidence-based tools to:\\n\\nDeliver age-appr\r\n opriate lessons to middle and high school students about the risks and effe\r\n cts of cannabis and other commonly used substances.\\n\\nExplore the latest r\r\n esearch on cannabis use in youth\\, including its impact on the brain\\, card\r\n iovascular system\\, and respiratory health. Identify early intervention str\r\n ategies for adolescents experimenting with or regularly using substances.\\n\r\n \\nBy bringing together healthcare professionals\\, educators\\, and community\r\n  leaders\\, the conference promotes a collaborative approach to youth substa\r\n nce use prevention and equips participants with the skills to support healt\r\n hier futures for adolescents.\\n\\nRegistrationRegistration for all healthcar\r\n e providers and participants:\\n\\nEarly Bird Registration Fee (ends 02/02/20\r\n 26): $100.00\\n\\nRegistration Fee (after 02/02/2026): $125.00\\n\\nTo register\r\n  for this activity\\, please click HERE\\n\\nCreditsAMA PRA Category 1 Credits\r\n ™ (9.25 hours)\\, ANCC Contact Hours (9.25 hours)\\, APA Continuing Education\r\n  credits (9.25 hours)\\, ASWB Continuing Education (ACE) credits (9.25 hours\r\n )\\, Non-Physician Participation Credit (9.25 hours)\\n\\nTarget AudienceSpeci\r\n alties - Adolescent Medicine\\, Community Health and Family Medicine\\, Famil\r\n y Medicine & Community Health\\, Health Outcomes and Biomedical Informatics\\\r\n , Pediatrics\\, Preventative Medicine & Nutrition\\, Psychiatry & Behavioral \r\n SciencesProfessions - Fellow/Resident\\, Non-Physician\\, Nurse\\, Physician\\,\r\n  Psychologist\\, Registered Nurse (RN)\\, Social Worker ObjectivesAt the conc\r\n lusion of this activity\\, learners should be able to: 1. Discuss the latest\r\n  research on cannabis and other substances in youth\\, including the effects\r\n  on the brain\\, heart\\, and lungs\\n2. Explain how tobacco\\, cannabis\\, and \r\n other drugs intersect\\n3. Apply evidence-based early intervention strategie\r\n s to prevent and reduce ongoing substance use in adolescents.\\n4. Identify \r\n key state and federal policies that impact youth access\\, prevention\\, and \r\n treatment related to cannabis and other substances\\n5. Integrate practical\\\r\n , age-appropriate lessons and teaching strategies into clinical or educatio\r\n nal settings to support substance use awareness and prevention Accreditatio\r\n nIn support of improving patient care\\, Stanford Medicine is jointly accred\r\n ited by the Accreditation Council for Continuing Medical Education (ACCME)\\\r\n , the Accreditation Council for Pharmacy Education (ACPE)\\, and the America\r\n n Nurses Credentialing Center (ANCC)\\, to provide continuing education for \r\n the healthcare team. \\n \\nCredit Designation \\nAmerican Medical Association\r\n  (AMA) \\nStanford Medicine designates this Live Activity for a maximum of 9\r\n .25 AMA PRA Category 1 CreditsTM.  Physicians should claim only the credit \r\n commensurate with the extent of their participation in the activity. \\n\\nAm\r\n erican Nurses Credentialing Center (ANCC) \\nStanford Medicine designates th\r\n is live activity for a maximum of 9.25 ANCC contact hours.  \\n\\nASWB Approv\r\n ed Continuing Education Credit (ACE) – Social Work Credit \\nAs a Jointly Ac\r\n credited Organization\\, Stanford Medicine is approved to offer social work \r\n continuing education by the Association of Social Work Boards (ASWB) Approv\r\n ed Continuing Education (ACE) program. Organizations\\, not individual cours\r\n es\\, are approved under this program. Regulatory boards are the final autho\r\n rity on courses accepted for continuing education credit. Social workers co\r\n mpleting this activity receive 9.25 general continuing education credits. \\\r\n n\\nAmerican Psychological Association (APA) \\nContinuing Education (CE) cre\r\n dits for psychologists are provided through the co-sponsorship of the Ameri\r\n can Psychological Association (APA) Office of Continuing Education in Psych\r\n ology (CEP). The APA CEP Office maintains responsibility for the content of\r\n  the programs. \\n\\nCounseling CE\\nThe California Board of Behavioral Scienc\r\n es recognizes the Association of Social Work Boards (ASWB) and the American\r\n  Psychological Association (APA) as approval agencies for CE. Through Joint\r\n  Accreditation\\, Stanford Medicine is able to provide ASWB and APA credits \r\n for its activities.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260423\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:7th Annual Teaching Cannabis (and other drugs) Awareness & Preventi\r\n on Virtual Conference: Tobacco/Nicotine\\, Fentanyl/Opioids\\, Alcohol\\, Hall\r\n ucinogens\\, and other substances!\r\nUID:tag:localist.com\\,2008:EventInstance_51081018814806\r\nURL:https://events.stanford.edu/event/7th-annual-teaching-cannabis-and-othe\r\n r-drugs-awareness-prevention-virtual-conference-tobacconicotine-fentanylopi\r\n oids-alcohol-hallucinogens-and-other-substances\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260423\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294416853\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260423\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355555342\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260424T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910865655\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260424T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068302791\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:This class is co-sponsored by the Stanford WorkLife Office.\\n\\n\r\n Returning to work while continuing to breastfeed can feel logistically comp\r\n lex and emotionally charged. Questions about pumping schedules\\, milk stora\r\n ge\\, workplace accommodations\\, and maintaining supply often add stress dur\r\n ing an already significant transition.\\n\\nThis free webinar is designed for\r\n  parents preparing to return to work or navigating their first weeks back. \r\n We’ll cover the essentials of pumping at work\\, safe storage and transport \r\n of human milk\\, and how to create a realistic pumping plan that supports bo\r\n th your job responsibilities and your breastfeeding goals. We’ll also discu\r\n ss strategies for communicating with employers and advocating for the accom\r\n modations you need.\\n\\nYou’ll leave with a clear plan\\, evidence-based guid\r\n ance\\, and confidence to navigate the return-to-work transition while conti\r\n nuing to nourish your baby\\, even when you are apart.\\n\\nThis class will be\r\n  recorded and a one-week link to the recording will be shared with all regi\r\n stered participants. To receive incentive points\\, attend at least 80% of t\r\n he live session or listen to the entire recording within one week.  Request\r\n  disability accommodations and access info.\\n\\n\\n\\nClass details are subjec\r\n t to change.\r\nDTEND:20260423T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Back to Work Lactation and Pumping\r\nUID:tag:localist.com\\,2008:EventInstance_52220231687003\r\nURL:https://events.stanford.edu/event/back-to-work-lactation-and-pumping\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:What does fatherhood mean in the lives of Latino men? Latino Fa\r\n thers: What Shapes and Sustains Their Parenting shifts the scholarly attent\r\n ion from how father involvement affects Latina/o/e children to how Latino m\r\n en experience fatherhood and what it means to them. The book also illuminat\r\n es the social forces that shape\\, sustain\\, and undermine Latino men’s pare\r\n nting\\; how their views and behaviors uphold\\, challenge\\, negotiate\\, and \r\n transform culturally dominant ideas of fatherhood\\; and the lessons Latino \r\n fathers can teach us about the (re)production of inequality in family life.\r\n \\n\\nDrawing on in-depth interviews with 60 Latino fathers in California\\, t\r\n he book highlights these men’s familial stories of joy\\, sorrow\\, humor\\, p\r\n ain\\, uncertainty\\, and hope. These narratives illuminate the men’s paradox\r\n ical relationships with work\\, capture the emotional intensity of their rel\r\n ationships with their own fathers\\, elicit strong memories about their chil\r\n dhoods\\, and allude to the role of motherhood and religion in shaping their\r\n  definitions of fatherhood. Latino Fathers provides a compassionate\\, intim\r\n ate account of a group of fathers challenging the myths about them\\, wrestl\r\n ing with the tensions they experience as they negotiate cultural ideas of g\r\n ood fathering\\, and the structural realities that make it possible and diff\r\n icult to meet those expectations.\\n\\nRSVP to attend\\n\\nAuthor Bio:\\n\\nFatim\r\n a Suarez is an author\\, researcher\\, and professor in the Department of Soc\r\n iology at the University of Nevada\\, Las Vegas. She earned her PhD in Socio\r\n logy from the University of California\\, Santa Barbara\\, and served as a po\r\n stdoctoral fellow at the Clayman Institute for Gender Research at Stanford.\r\n  She also earned a MSc. in Sociology from the London School of Economics an\r\n d Political Science and a BS in Criminology from the University of La Verne\r\n . She is the first person in her family to earn a college degree. \\n\\nRSVP \r\n to attend\r\nDTEND:20260423T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T190000Z\r\nLOCATION:RSVP for more information\r\nSEQUENCE:0\r\nSUMMARY:Book talk on “Latino Fathers: What Shapes and Sustains Their Parent\r\n ing” by Fatima Suarez\r\nUID:tag:localist.com\\,2008:EventInstance_51959196072878\r\nURL:https://events.stanford.edu/event/book-talk-on-latino-fathers-what-shap\r\n es-and-sustains-their-parenting-by-fatima-suarez\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join the speaker for coffee\\, cookies\\, and conversation before\r\n  the talk\\, starting at 11:45am.\\n\\nTalk title to be announcedAbstract comi\r\n ng soon\\n\\n \\n\\nAndres Bendesky\\, MD\\, PhDAssociate Professor of Ecology\\, \r\n Evolution and Environmental Biology\\; Principal Investigator at Columbia's \r\n Zuckerman Institute (he/him)\\n\\nAndrés grew up in Mexico City\\, where he at\r\n tended medical school at the Universidad Nacional Autónoma de México (UNAM)\r\n . Dr. Bendesky pursued his Ph.D at The Rockefeller University and proceeded\r\n  to do postdoctoral work at Harvard University. There\\, he focused on study\r\n ing the genetic basis of why monogamous rodents are more dedicated fathers \r\n than fathers from promiscuous species. In 2017 Dr. Bendesky joined the facu\r\n lty of Columbia\\, where he continues to focus on discovering genetic\\, mole\r\n cular\\, and neuronal mechanisms leading to diversity of social behaviors wi\r\n thin species and across species—the study of how behavior evolves. \\n\\nVisi\r\n t lab website\\n\\nHosted by Nick Manfred (Abu-Remaileh Lab)\\n\\n \\n\\nSign up \r\n for Speaker Meet-upsEngagement with our seminar speakers extends beyond the\r\n  lecture. On seminar days\\, invited speakers meet one-on-one with faculty m\r\n embers\\, have lunch with a small group of trainees\\, and enjoy dinner with \r\n a small group of faculty and the speaker's host.\\n\\nIf you’re a Stanford fa\r\n culty member or trainee interested in participating in these Speaker Meet-u\r\n p opportunities\\, click the button below to express your interest. Dependin\r\n g on availability\\, you may be invited to join the speaker for one of these\r\n  enriching experiences.\\n\\nSpeaker Meet-ups Interest Form\\n\\n About the Wu \r\n Tsai Neurosciences Seminar SeriesThe Wu Tsai Neurosciences Institute semina\r\n r series brings together the Stanford neuroscience community to discuss cut\r\n ting-edge\\, cross-disciplinary brain research\\, from biochemistry to behavi\r\n or and beyond.\\n\\nTopics include new discoveries in fundamental neurobiolog\r\n y\\; advances in human and translational neuroscience\\; insights from comput\r\n ational and theoretical neuroscience\\; and the development of novel researc\r\n h technologies and neuro-engineering breakthroughs.\\n\\nUnless otherwise not\r\n ed\\, seminars are held Thursdays at 12:00 noon PT.\\n\\nSign up to learn abou\r\n t all our upcoming events\r\nDTEND:20260423T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: Andres Bendesky - Talk Title TBA\r\nUID:tag:localist.com\\,2008:EventInstance_50539423781903\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-andres-bendesky\r\n -talk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260423T191500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762188084\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:This event is co-sponsored by the Center for South Asia and the\r\n  Feminist\\, Gender\\, and Sexuality Studies.\\n\\nAbout the Lecture\\nBengal ha\r\n d been one of the strongholds of the Communist Party of India and at the ti\r\n me of Partition\\, many Bengali Communists\\, Hindu and Muslim\\, opted for Pa\r\n kistan rather than India. Among them were Hena Das and her friends who had \r\n joined the Communist Party as teenagers in Sylhet in the late 1930s. This t\r\n alk will situate Das and other veteran women activists in the tug-of-war fo\r\n r Sylhet between Assam and Bengal\\; struggles by local tea plantation worke\r\n rs\\; the new state of Pakistan’s suppression of the Communist Party\\; and t\r\n he decades of women’s feminist activism that led to the establishment of th\r\n e Mahila Shongram Parishad (Women’s Revolutionary Council) in 1969\\, rename\r\n d the East Pakistan Mahila Parishad in 1970 and Bangladesh Mahila Parishad \r\n after the country’s independence in 1971. \\n\\nAbout the Speaker\\nElora Sheh\r\n abuddin is Professor of Gender & Women's Studies and Global Studies at UC B\r\n erkeley. She is currently Director of Global Studies and of the Subir and M\r\n alini Chowdhury Center for Bangladesh Studies.\\n\\nHer most recent book\\, Si\r\n sters in the Mirror: A History of Muslim Women and the Global Politics of F\r\n eminism (University of California Press\\, 2021)\\, was selected as a 2022 Ch\r\n oice Outstanding Academic Title by the American Library Association and awa\r\n rded the 2023 Coomaraswamy Book Prize from the Association for Asian Studie\r\n s.\\n\\nShe is Co-editor of Journal of Bangladesh Studies (Brill) and on the \r\n editorial board of a new Cambridge University Press book series titled “Mus\r\n lim South Asia.”  She is Vice President (president-elect) of the Associatio\r\n n for Asian Studies.\r\nDTEND:20260423T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:“Even the crows would not know”: Communist Women’s Mobilization Alo\r\n ng the Surma in Mid-20th c. East Bengal\r\nUID:tag:localist.com\\,2008:EventInstance_50702161158617\r\nURL:https://events.stanford.edu/event/elora-shehabuddin-lecture\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Chicana/o-Latina/o Studies\\, the Center for Latin American\r\n  Studies\\, the Departments of Music\\, Theater and Performance Studies and M\r\n odern Thought and Literature\\, for 'P FKN R: How Bad Bunny Became the Globa\r\n l Voice of Puerto Rican Resistance' - a book talk with Drs. Vanessa Díaz an\r\n d Petra R. Rivera-Rideau.\\n\\nThe backlash was swift when the NFL announced \r\n Bad Bunny would perform at Super Bowl LX. The global superstar’s status as \r\n a Spanish-speaking Latino and his statements about ICE made him a natural t\r\n arget for conservative outrage\\; some online commenters called for Bad Bunn\r\n y’s deportation before the February game. (As a Puerto Rican\\, Bad Bunny is\r\n  a U.S. citizen.) One week before the Halftime Show\\, Bad Bunny made histor\r\n y by becoming the first-ever Spanish-language artist to win the Grammy for \r\n Album of the Year\\, for his latest album\\, DeBÍ TiRAR MáS FOToS. Global sup\r\n erstar Bad Bunny’s record-breaking success is due in large part to his unap\r\n ologetic championing of his homeland and the intimate connections he mainta\r\n ins in Puerto Rico. \\n\\nBorn Benito Antonio Martínez Ocasio\\, Bad Bunny has\r\n  lived a life marked by public crises—blackouts\\, hurricanes\\, political co\r\n rruption and oppression—that have exposed the ongoing impacts of colonialis\r\n m in Puerto Rico. Offering a portrait of the past and future of Puerto Rica\r\n n resistance through one of its loudest and proudest voices\\, P FKN R draws\r\n  on ethnographic research and interviews with journalists\\, politicians\\, a\r\n nd the pop star’s close collaborators to set Bad Bunny and Puerto Rican res\r\n istance in a historical\\, political\\, and cultural context. Authors Vanessa\r\n  Díaz and Petra Rivera-Rideau—creators of the “Bad Bunny Syllabus”—situate \r\n Bad Bunny in the long tradition of infusing joy and protest into music.\\n\\n\r\n P FKN R honors the many\\, evolving forms of daily resistance to oppression \r\n and colonialism that are part of Puerto Rican life.\\n\\nVANESSA DÍAZ is Asso\r\n ciate Professor of Chicana/o and Latina/o Studies at Loyola Marymount Unive\r\n rsity and the author of Manufacturing Celebrity: Latino Paparazzi and Women\r\n  Reporters in Hollywood.\\n\\nPETRA R. RIVERA - RIDEAU is Associate Professor\r\n  of American Studies at Wellesley College and the author of Remixing Reggae\r\n tón: The Cultural Politics of Race in Puerto Rico and Fitness Fiesta!: Sell\r\n ing Latinx Culture through Zumba.\\n\\nThe authors have written about Bad Bun\r\n ny for the Los Angeles Times\\, Rolling Stone\\, Washington Post\\, and elsewh\r\n ere. Their “Bad Bunny Syllabus” has been covered by the New York Times\\, Bo\r\n ston Globe\\, NPR\\, Vanity Fair\\, and The Tonight Show.\r\nDTEND:20260423T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T193000Z\r\nGEO:37.427685;-122.171735\r\nLOCATION:Building 360\\, 361J\r\nSEQUENCE:0\r\nSUMMARY:P FKN R: How Bad Bunny Became the Global Voice of Puerto Rican Resi\r\n stance\r\nUID:tag:localist.com\\,2008:EventInstance_52259204384388\r\nURL:https://events.stanford.edu/event/p-fkn-r-how-bad-bunny-became-the-glob\r\n al-voice-of-puerto-rican-resistance\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260423T194500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794483484\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260423T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491624866\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260424T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743789534\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDTEND:20260423T213000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Environmental Behavioral Sciences Seminar with Shadreck Chirikure\r\nUID:tag:localist.com\\,2008:EventInstance_50710620522782\r\nURL:https://events.stanford.edu/event/environmental-behavioral-sciences-sem\r\n inar-with-shadreck-chirikure\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a free tour of Denning House and explore its treehouse-ins\r\n pired architecture and art collection.\\n\\nBuilt in 2018 specifically to hou\r\n se Knight-Hennessy Scholars\\, Denning House provides an inspiring venue for\r\n  scholars\\, staff\\, and visitors\\, and a magnificent setting for art. A gif\r\n t from Roberta Bowman Denning\\, '75\\, MBA '78\\, and Steve Denning\\, MBA '78\r\n \\, made the building possible. Read more about Denning House in Stanford Ne\r\n ws.\\n\\nTour size is limited. Registration is required to attend a tour of D\r\n enning House.\\n\\nNote: Most parking at Stanford is free of charge after 4 p\r\n m. Denning House is in box J6 on the Stanford Parking Map. Please see Stanf\r\n ord Parking for more information on visitor parking at Stanford. Tours last\r\n  approximately 30 minutes.\r\nDTEND:20260423T233000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Tour Denning House\\, home to Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51579196697708\r\nURL:https://events.stanford.edu/event/copy-of-tour-denning-house-home-to-kn\r\n ight-hennessy-scholars-5766\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Middle schoolers are growing fast—emotionally\\, socially\\, and \r\n independently. This workshop explores how tweens learn through testing boun\r\n daries\\, making mistakes\\, and starting over. Gain practical tools to suppo\r\n rt responsibility\\, build resilience\\, and adapt your parenting role as you\r\n r child matures.\r\nDTEND:20260424T003000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260423T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Understanding Your Tween: Guidance for Parenting Middle Schoolers\r\nUID:tag:localist.com\\,2008:EventInstance_51960167845560\r\nURL:https://events.stanford.edu/event/understanding-your-tween-guidance-for\r\n -parenting-middle-schoolers\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please note that this event is in-person only\\, and RSVPs are r\r\n equested to attend. Walk-ins are welcome.\\n\\nRegister now!\\n\\nWhen platform\r\n s like Temu and Shein can expeditiously ship cheap clothes around the world\r\n  and to our doorsteps\\, fast fashion appeals to many as an affordable way t\r\n o participate in popular trends. But what happens to these clothes when tre\r\n nds just as rapidly fade and consumers move on? Weaving together academic e\r\n xperts\\, textile industry leaders\\, and policymakers\\, we will discuss the \r\n effects of fast fashion on our lives and climate and examine how we can do \r\n better.\\n\\nThis panel features Dr. Meital Peleg Mizrachi (Yale University)\\\r\n , Alon Rotem (Chief Strategy Officer\\, ThredUp)\\, Mina Le (Creator & Video \r\n Essayist)\\, and Zoe Heller (Director of CalRecycle). Moderated by Richard T\r\n hompson Ford (Stanford University)\\, this event will illuminate how fashion\r\n  trends contribute to textile waste and labor exploitation and will explore\r\n  sustainable alternatives for sourcing and producing clothes. \\n\\nSpeakers:\r\n  \\n\\nDr. Meital Peleg Mizrachi is a postdoctoral fellow in the Department o\r\n f Economics at Yale University and an Adjunct Professor at the University o\r\n f Connecticut’s School of Public Policy. Her work focuses on environmental \r\n regulation and sustainable fashion\\, with particular attention to the inter\r\n section of environmental and social justice and the global trade in second-\r\n hand clothing\\, especially in Ghana. She serves on the Executive Board of t\r\n he International Sustainable Fashion Consumption Research Network\\, where s\r\n he leads education initiatives. In 2021\\, TheMarker magazine named her one \r\n of 40 promising leaders under 40 for her contributions to fashion and envir\r\n onmental sustainability.\\n\\nAs ThredUp's Chief Strategy Officer and Chief L\r\n egal Officer\\, Alon Rotem oversees the company's strategic direction and le\r\n gal affairs\\, including its public policy and sustainability efforts. He is\r\n  a vocal advocate for advancing textile recycling through legislative engag\r\n ement and is actively involved in shaping public policy via coalitions such\r\n  as ACT and Politically in Fashion. Alon also spearheads ThredUp's innovati\r\n ve Resale-as-a-Service (RaaS) program\\, which has led to partnerships with \r\n dozens of retailers such as Athleta\\, Madewell\\, Reformation\\, and J.Crew\\,\r\n  enabling them to build scalable resale solutions and sustainable offerings\r\n  to their customers.\\n\\nOriginally from Maryland and American of Vietnamese\r\n  descent\\, Mina Le launched her YouTube channel in 2020\\, spotting a gap in\r\n  the fashion and culture space she knew she could fill. With just a few vid\r\n eos\\, most notably “Rating Disney Princess Dresses on Historical Accuracy\\,\r\n ” her channel took off\\, becoming a trusted voice where fashion meets cultu\r\n re. Whether breaking down fashion in film\\, unpacking cultural trends\\, or \r\n going viral with her witty takes on history\\, Mina blends intellect and hum\r\n or in a way distinctly her own. Today\\, with 2M subscribers and 150M+ views\r\n \\, Mina continues to shape conversations across platforms.\\n\\nZoe Heller ha\r\n s served as Director of CalRecycle since May 2024. She previously led the D\r\n ivision of Circular Economy as CalRecycle’s first deputy director and overs\r\n aw the Division of Materials Management and Local Assistance. Earlier\\, she\r\n  served as deputy director for the Office of Policy\\, advancing statewide r\r\n ecycling and waste reduction strategies. Before joining CalRecycle\\, Heller\r\n  spent more than a decade at the U.S. EPA’s Pacific Southwest Office\\, incl\r\n uding roles as manager of the Zero Waste section\\, special assistant to the\r\n  Regional Administrator\\, and environmental protection specialist in the En\r\n vironmental Justice program.\\n\\nModerator: \\n\\nRichard Thompson Ford is the\r\n  George E. Osborne Professor of Law at Stanford Law School. His writing has\r\n  appeared in the New York Times\\, The Washington Post\\, Stanford Law Review\r\n \\, Yale Law Journal\\, and more. His latest book\\, Dress Codes: How the Laws\r\n  of Fashion Made History (2021)\\, was a New York Times Editors’ Choice\\, an\r\n d inspired a 2021 Editors’ Choice TED Talk. Two of his other books\\, The Ra\r\n ce Card (2008) and Rights Gone Wrong (2011)\\, were selected as Notable Book\r\n s by the New York Times. He has appeared on national television and radio p\r\n rograms including The Colbert Report\\, the Rachel Maddow Show\\, The New Yor\r\n ker Radio Hour and All Things Considered and co-hosted Stanford Legal on Si\r\n rius XM Radio with Joe Bankman from 2020-2022. \\n\\nThis event will have a p\r\n hotographer present to document the event. No personal recordings (audio or\r\n  visual) are allowed. By attending\\, you consent for your image to be used \r\n for Stanford-related promotions and materials. If you have any questions\\, \r\n please contact ethics-center@stanford.edu.\\n\\nIf you require disability-rel\r\n ated accommodation\\, please contact disability.access@stanford.edu as soon \r\n as possible or at least 7 business days in advance of the event.\\n\\nSee thi\r\n s link for information about Visitor parking. \\n\\nLearn more about the McCo\r\n y Family Center for Ethics in Society.\r\nDTEND:20260424T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T000000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\r\nSEQUENCE:0\r\nSUMMARY:Fabrics of Consumption: Ethics and Sustainability of Fast Fashion\r\nUID:tag:localist.com\\,2008:EventInstance_51838338275503\r\nURL:https://events.stanford.edu/event/fabrics-of-consumption-the-ethics-and\r\n -sustainability-of-fast-fashion\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Abstract:\\n\\nThe Shizhu piposha lun 十住毘婆沙論\\, or “Vibhāṣā-commen\r\n tary on the Ten Stages\\,” is an influential commentary on the “Sūtra of the\r\n  Ten Stages” (Daśabhūmika-sūtra)\\, traditionally attributed to Nāgārjuna an\r\n d Kumārajīva. However\\, a closer examination shows it rarely quotes the Daś\r\n abhūmika-sūtra and discusses only two of the ten bodhisattva stages. Furthe\r\n rmore\\, the text does not conform to the conventional understanding of the \r\n vibhāṣā-commentary style. The circumstances of its creation are equally com\r\n plex: not only is Nāgārjuna’s authorship disputed\\, but many scholars\\, bot\r\n h past and present\\, also question whether Kumārajīva was its primary trans\r\n lator. \\n\\nIn this talk\\, I will highlight how these labels—regarding its s\r\n criptural affiliation\\, style\\, author\\, and translation—were applied to th\r\n e text over time. I will then consider what these labels contribute to our \r\n understanding of the text\\, and what they obscure. This discussion attempts\r\n  to not only shed light on the mysteries surrounding the text’s creation bu\r\n t also improve our understanding of scripture–commentary relationship and M\r\n ahāyāna textual genres. \\n\\nBio:\\n\\nYixiu Jiang is the current Postdoctoral\r\n  Fellow at the Ho Center for Buddhist Studies at Stanford. She completed he\r\n r PhD at Leiden University in 2024\\, specializing in the doctrine of the bo\r\n dhisattva path in early Mahāyāna scriptures. Her research interests also in\r\n clude Gāndhārī manuscripts and documents\\, Central Asian Buddhism\\, and vis\r\n ions and dreams in Buddhist traditions.\r\nDTEND:20260424T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T000000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, 2nd Floor\\, Room 224\r\nSEQUENCE:0\r\nSUMMARY:Yixiu Jiang: \"What the 'Shizhu piposha lun' is not and how it matte\r\n rs\"\r\nUID:tag:localist.com\\,2008:EventInstance_50604458103842\r\nURL:https://events.stanford.edu/event/yixiu-jiang-what-the-shizhu-piposha-l\r\n un-is-not-and-how-it-matters\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260424T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404971005\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Department of African & African American Studies at Stanfor\r\n d University presents the Annual St. Clair Drake Memorial Lecture featuring\r\n  renowned author Junot Díaz who will be delivering this year's thought-prov\r\n oking lecture titled\\, \"Notes From a Book of the Dead.\"\\n\\nAbout Junot Diaz\r\n :\\n\\nJunot Díaz was born in the Dominican Republic and raised in New Jersey\r\n . He is the author of Drown\\, The Brief Wondrous Life of Oscar Wao\\, which \r\n won the 2008 Pulitzer Prize\\, and This Is How You Lose Her. Díaz has been a\r\n warded a fellowship from the Guggenheim Foundation\\, the 2002 PEN/Malamud A\r\n ward and the Rome Prize from the American Academy of Arts and Letters. A pr\r\n ofessor at the Massachusetts Institute of Technology\\, Díaz is a MacArthur \r\n fellow and a member of the American Academy of Arts and Letters.   \\n\\nLect\r\n ure Abstract: \\n\\nIn our anti-democratic socially mediated conjuncture wher\r\n e the act of listening has eroded to the point of near-extinction\\, what is\r\n  learned when those of us living under conditions of Pattersonian social de\r\n ath attempt to super-listen to the actual dead through the (undead) medium \r\n of literature — a super-listening that evokes Donald Davidson’s concept of \r\n radical interpretation.  What is made possible with such deep dead communio\r\n ns\\, and what is not? \\n\\nSt. Clair Drake Memorial Lecture:\\n\\nThe St. Clai\r\n r Drake Memorial Lectures are dedicated to the memory of Professor St.Clair\r\n  Drake\\, renowned African American anthropologist and educator\\, and the fo\r\n unding Director of the Program in African & African American Studies at Sta\r\n nford University.\\n\\nSt. Clair Drake Memorial Lecture presented by the Depa\r\n rtment of African & African American Studies (DAAAS). Visit our website at \r\n aaas.stanford.edu for more information about the department.\r\nDTEND:20260424T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T003000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:St. Clair Drake Memorial Lecture Featuring renowned author Junot Dí\r\n az\r\nUID:tag:localist.com\\,2008:EventInstance_52067027746393\r\nURL:https://events.stanford.edu/event/st-clair-drake-memorial-lecture-featu\r\n ring-junot-diaz\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Professor Nancy Marie Mithlo (UCLA) discusses the emergence of \r\n Indigenous arts in global contexts from 1997-2017 drawing from her work cur\r\n ating nine exhibits at the Venice Biennale. Mithlo’s archival papers are ho\r\n used at Stanford University Libraries’ Special Collections. Red Skin Dreams\r\n  documents and theorizes the presentation of contemporary American Indian a\r\n rt through memoir and storytelling. The improbable and messy business of st\r\n aging international exhibits that were non-institutional\\, non-commercial a\r\n nd anti-hierarchical involved hundreds of collaborators from across the glo\r\n be—Canada\\, Australia\\, New Zealand\\, Switzerland\\, England\\, Norway\\, Germ\r\n any\\, as well as Italy. These connections were made through Indigenous netw\r\n orks\\, institutions\\, and relationships\\, not the prestigious galleries\\, m\r\n useums and art collectors that typically decide who is represented and wher\r\n e. Questioning the very notions of margin and center and asserting alternat\r\n e frames of reference besides simple inclusion\\, this is a story that asser\r\n ts that the world belongs to Native people. As Canadian First Nations arts \r\n professional Jim Logan stated\\, “We are a part of this world\\; we are a par\r\n t of the human story. We are worth it.”\\n\\nDr. Milthlo will be joined in co\r\n nversation with ​Professor Jennifer DeVere Brody (Theater and Performance S\r\n tudies and African and African American Studies at Stanford University).\\n\\\r\n nBooks will be for sale at the Stanford Campus Bookstore and through the pu\r\n blisher\\, the University of Nebraska Press. Please preorder a copy and brin\r\n g it to the event. Dr. Mithlo will be available for book signing at the end\r\n  of the event.\\n\\nAll public programs at the Cantor Arts Center are always \r\n free! Space for this program is limited\\; advance registration is recommend\r\n ed. Those who have registered will have priority for seating.\\n\\nRSVP here.\r\n \\n\\nThis program is co-sponsored by the Native American Studies\\, Cantor Ar\r\n ts Center\\, Center for Comparative Studies in Race and Ethnicity\\, and Nati\r\n ve American Cultural Center​.\\n\\n________\\n\\nParking\\n\\nFree visitor parkin\r\n g is available along Lomita Drive as well as on the first floor of the Roth\r\n  Way Garage Structure\\, located at the corner of Campus Drive West and Roth\r\n  Way at 345 Campus Drive\\, Stanford\\, CA 94305. From the Palo Alto Caltrain\r\n  station\\, the Cantor Arts Center is about a 20-minute walk or the free Mar\r\n guerite shuttle will bring you to campus via the Y or X lines.\\n\\nDisabilit\r\n y parking is located along Lomita Drive near the main entrance of the Canto\r\n r Arts Center. Additional disability parking is located on Museum Way and i\r\n n Parking Structure 1 (Roth Way & Campus Drive). Please click here to view \r\n the disability parking and access points.\\n\\nAccessibility Information or R\r\n equests\\n\\nCantor Arts Center at Stanford University is committed to ensuri\r\n ng our programs are accessible to everyone. To request access information a\r\n nd/or accommodations for this event\\, please complete this form at least on\r\n e week prior to the event: museum.stanford.edu/access.\\n\\nFor questions\\, p\r\n lease contact disability.access@stanford.edu or Oswaldo Rosales\\, orosal@st\r\n anford.edu.\\n\\nConnect with the Cantor Arts Center! Subscribe to our mailin\r\n g list and follow us on Instagram.\\n\\n​________\\n\\nBook Cover Image by Shel\r\n ley Niro. The Show Off\\, digital image\\, 2017. Courtesy of the Artist. Phot\r\n o of Nancy Marie Mithlo by Marc Hausman​.\r\nDTEND:20260424T023000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T010000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, The John L. Eastman\\, '61 Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Nancy Marie Mithlo | Red Skin Dreams: Twenty Years of Curating Indi\r\n genous Art at the Venice Biennale. In Conversation with Jennifer DeVere Bro\r\n dy\r\nUID:tag:localist.com\\,2008:EventInstance_52278261477955\r\nURL:https://events.stanford.edu/event/nancy-marie-mithlo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260424\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294417878\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260424\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355556367\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:All Clinical Associate Professors\r\nDTEND:20260424T160000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Preparing for promotion to Clinical Professor\r\nUID:tag:localist.com\\,2008:EventInstance_49792570612750\r\nURL:https://events.stanford.edu/event/preparing-for-promotion-to-clinical-p\r\n rofessor-3528\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260425T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910866680\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260425T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817893133\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260424T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802457350\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260424T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699851974\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Global Development Research Symposium showcases student cre\r\n ativity\\, achievement and research from diverse disciplines of study across\r\n  Stanford University. The symposium will feature the work of scholars\\, inc\r\n luding those who have received funding from the King Center on Global Devel\r\n opment over the last year.  \\n\\nA keynote talk will be delivered by Nava As\r\n hraf\\, the 2026–27 Noosheen Hashemi Visiting Fellow at the King Center on G\r\n lobal Development\\, and Professor of Economics at the London School of Econ\r\n omics and Political Science.\\n\\nAdditional funding for this event is provid\r\n ed by the Vice Provost for Undergraduate Education (VPUE) and the Vice Prov\r\n ost for Graduate Education (VPGE).\\n\\nThe call for posters is now open. App\r\n ly to present your research by March 29\\, 2026. All Stanford undergraduates\r\n \\, predoctoral fellows\\, graduate student researchers\\, as well as postdoct\r\n oral fellows are eligible.\r\nDTEND:20260424T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T190000Z\r\nGEO:37.429251;-122.165344\r\nLOCATION:Gunn Building (SIEPR)\\, Koret-Taube Conference Center\r\nSEQUENCE:0\r\nSUMMARY:2026 Global Development Research Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_52205997309612\r\nURL:https://events.stanford.edu/event/2026-global-development-research-symp\r\n osium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260425T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068303816\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Technology has brought great advancements to our society\\, but \r\n it has also brought along a host of negative health effects\\, such as scree\r\n n fatigue\\, back and neck pain\\, and insomnia. Many people feel constantly \r\n distracted by their devices or even addicted to their screen\\, and the impa\r\n cts may be even greater for our children.\\n\\nJoin us for a noontime webinar\r\n  to learn what causes these negative health effects from technology and ste\r\n ps you can take to improve your well-being in the digital age. We will expl\r\n ore the factors such as covert muscle tension with shallow breathing\\, inco\r\n rrect ergonomics\\, evolutionary traps\\, and workstyle/lifestyle factors tha\r\n t contribute to the development of these negative symptoms including neck a\r\n nd shoulder pain\\, and eye discomfort. You will learn why so many people st\r\n ill experience discomfort after their office equipment has been ergonomical\r\n ly optimized and steps you can take to reduce this discomfort.\\n\\nYou will \r\n leave with strategies that you can use for yourself and others to prevent i\r\n llness and optimize health at work and at home while working in a digital e\r\n nvironment.\\n\\nThis class will be recorded and a one-week link to the recor\r\n ding will be shared with all registered participants. To receive incentive \r\n points\\, attend at least 80% of the live session or listen to the entire re\r\n cording within one week.  Request disability accommodations and access info\r\n .\\n\\nClass details are subject to change.\r\nDTEND:20260424T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:From TechStress to TechHealth\r\nUID:tag:localist.com\\,2008:EventInstance_52220231756641\r\nURL:https://events.stanford.edu/event/from-techstress-to-techhealth-7197\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260424T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682863529\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Other\r\nDESCRIPTION:In this in-person session\\, an admission officer provides an ov\r\n erview of Knight-Hennessy Scholars\\, the admission process\\, and the applic\r\n ation. The session includes a presentation\\, and Knight-Hennessy scholar(s)\r\n  may join to share their experience. \\n\\nAbout Knight-Hennessy Scholars\\n\\n\r\n Knight-Hennessy Scholars is a multidisciplinary\\, multicultural graduate sc\r\n holarship program. Each Knight-Hennessy scholar receives up to three years \r\n of financial support to pursue graduate studies at Stanford while participa\r\n ting in engaging experiences that prepare scholars to be visionary\\, courag\r\n eous\\, and collaborative leaders who address complex challenges facing the \r\n world.\\n\\nEligibility\\n\\nYou are eligible to apply to the 2027 cohort of Kn\r\n ight-Hennessy Scholars if you earned (or will earn) your bachelor's degree \r\n in 2020 or later. For military (active or veteran) applicants\\, you are eli\r\n gible if you earned your bachelor's degree in 2018 or later. Additionally\\,\r\n  current Stanford PhD students in the first year of enrollment may apply if\r\n  starting at KHS in the second year of PhD enrollment.\\n\\nDeadline\\n\\nThe K\r\n HS application to join the 2026 cohort is now closed. The KHS application t\r\n o join the 2027 cohort will open in summer 2026. \\n\\nParking\\n\\nParking at \r\n Stanford University is free after 4:00 pm Monday-Friday. We recommend you u\r\n se the Tressider Lot or street parking. Please visit Stanford Transportatio\r\n n for more information.\\n\\nYou will receive details on how to join the even\r\n t by email following registration.\r\nDTEND:20260425T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260424T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Info session for Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51934576057720\r\nURL:https://events.stanford.edu/event/copy-of-info-session-for-knight-henne\r\n ssy-scholars\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260425\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294419927\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260425\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355558416\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260426T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910867705\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260425T183000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078578620\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260425T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699866311\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260425T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691993900\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260425T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682864554\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260425T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708349727\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260425T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260425T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668876812\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260426\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294420952\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260426\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355559441\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260427T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910868730\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260426T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809532791\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260426T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51969417152580\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260426T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543407141\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260426T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534691996973\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260426T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682866603\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260426T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708351776\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260426T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260426T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668877837\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260427\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA - First day of clerkships for Period 11.\r\nUID:tag:localist.com\\,2008:EventInstance_49464393675971\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-11-6336\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260427\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Period 12 clerkship drop deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_51783489954057\r\nURL:https://events.stanford.edu/event/period-12-clerkship-drop-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a Textbook Adoption request for \r\n summer quarter. See the University Bookstore website for more information.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260427\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Textbook Adoption Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472525389894\r\nURL:https://events.stanford.edu/event/summer-quarter-textbook-adoption-dead\r\n line\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260428T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260427T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910869755\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260428T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260427T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068304841\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Money is one of the most common sources of stress in relationsh\r\n ips\\, yet many couples avoid talking about it altogether. Balancing demandi\r\n ng careers\\, family responsibilities\\, and financial pressures in a high-co\r\n st area\\, healthy financial communication is essential for reducing stress \r\n and supporting overall well-being.\\n\\nIn this free\\, interactive webinar\\, \r\n we will explore how to approach money conversations with empathy\\, clarity\\\r\n , and intention. Through the integration of financial wellness and emotiona\r\n l intelligence\\, we will focus not only on budgeting skills but on strength\r\n ening relationships as a foundation for long-term health and life satisfact\r\n ion.\\n\\nYou will learn how early money experiences shape beliefs and behavi\r\n ors\\, how stress impacts communication\\, and why starting with context rath\r\n er than numbers leads to more productive discussions. You will also discove\r\n r ways to frame questions that build understanding instead of defensiveness\r\n \\, how to define shared financial roles and responsibilities\\, and develop \r\n a simple plan for creating intentional\\, low-stress “money check-ins.”\\n\\nL\r\n eave with practical tools for initiating conversations\\, setting boundaries\r\n \\, and fostering shared accountability - all designed to promote sustainabl\r\n e behavior change.\\n\\nThis class will be recorded and a one-week link to th\r\n e recording will be shared with all registered participants. To receive inc\r\n entive points\\, attend at least 80% of the live session or listen to the en\r\n tire recording within one week. Request disability accommodations and acces\r\n s info.\\n\\nClass details are subject to change.\r\nDTEND:20260427T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260427T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:How to Talk About Money with a Partner\r\nUID:tag:localist.com\\,2008:EventInstance_52220231808871\r\nURL:https://events.stanford.edu/event/how-to-talk-about-money-with-a-partne\r\n r\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Continue the conversation: Join the speaker for a complimentary\r\n  dinner in the Theory Center (second floor of the neurosciences building) a\r\n fter the seminar\\n\\nModeling the emergence of complex cortical structures i\r\n n the brain: maps\\, hierarchies\\, and modulesAbstract coming soon\\n\\n \\n\\nI\r\n la FieteMIT\\n\\nVisit Lab Website \\n\\nHosted by Gustavo Santiago-Reyes (Stan\r\n ford Profile)\\n\\n \\n\\nAbout the Mind\\, Brain\\, Computation\\, and Technology\r\n  (MBCT) Seminar SeriesThe Stanford Center for Mind\\, Brain\\, Computation an\r\n d Technology (MBCT) Seminars explore ways in which computational and techni\r\n cal approaches are being used to advance the frontiers of neuroscience. \\n\\\r\n nThe series features speakers from other institutions\\, Stanford faculty\\, \r\n and senior training program trainees. Seminars occur about every other week\r\n \\, and are held at 4:00 pm on Mondays at the Cynthia Fry Gunn Rotunda - Sta\r\n nford Neurosciences E-241. \\n\\nQuestions? Contact neuroscience@stanford.edu\r\n \\n\\nSign up to hear about all our upcoming events\r\nDTEND:20260428T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260427T230000Z\r\nLOCATION:Stanford Neurosciences Building | Gunn Rotunda (E241)\r\nSEQUENCE:0\r\nSUMMARY:MBCT Seminar: Ila Fiete - Modeling the emergence of complex cortica\r\n l structures in the brain: maps\\, hierarchies\\, and modules\r\nUID:tag:localist.com\\,2008:EventInstance_50919729939861\r\nURL:https://events.stanford.edu/event/mbct-seminar-ila-fiete-modeling-the-e\r\n mergence-of-complex-cortical-structures-in-the-brain-maps-hierarchies-and-m\r\n odules\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Medicine’s most powerful precision health tool may be right in \r\n front of our eyes. Composed of more than 300 million cells\\, the skin acts \r\n as a living sensor\\, constantly interacting with both our internal physiolo\r\n gy and the external environment. Subtle changes in the skin’s color\\, textu\r\n re\\, or structure can provide early signals of disease\\, often long before \r\n clinical symptoms appear.\r\nDTEND:20260428T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T000000Z\r\nGEO:37.484962;-122.204757\r\nLOCATION:Cardinal Hall\\, Conference Center\r\nSEQUENCE:0\r\nSUMMARY:6th annual Marvin A. Karasek Lecture in Dermatology\r\nUID:tag:localist.com\\,2008:EventInstance_51934605092690\r\nURL:https://events.stanford.edu/event/6th-annual-marvin-a-karasek-lecture-i\r\n n-dermatology\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260428T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430659444\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:McGill University literature professor Alexander Manshel (PhD\\,\r\n  Stanford) will discuss the acclaimed and enigmatic American novelist Harpe\r\n r Lee (To Kill a Mockingbird) on the eve of her 100th birthday.\\n\\nMore det\r\n ails will be announced.\\n \\n\\nAbout the Series\\n\\nThe Night Before is a ser\r\n ies of conversations in which we examine ritual occasions through the insig\r\n hts of the humanities. As we come together\\, handcrafted cocktails and mock\r\n tails tell their own stories about these unique times of year. In one hour\\\r\n , we learn to experience the next day differently.\\n\\nHosted by Stanford al\r\n umni\\, each online party is free\\, and features a guided conversation led b\r\n y faculty or Humanities Center Fellows.\\n\\nNote: this is a meeting format. \r\n Guests are encouraged to turn on their video.\r\nDTEND:20260428T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T003000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Night Before: The 100th Birthday of Harper Lee\r\nUID:tag:localist.com\\,2008:EventInstance_52250816219327\r\nURL:https://events.stanford.edu/event/copy-of-the-night-before-the-grammy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260429T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910869756\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260429T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068306890\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for this month's Center for Sleep and Circadian \r\n Sciences Community Series!\\n\\n\"Lateral septum serotonin dynamics mediate ag\r\n gression following sleep disruption\"\\n\\nTuesday\\, April 28th\\, 2026 at 12pm\r\n  PST\\n\\nJa Eun Choi\\, PhD\\n\\nPostdoctoral Scholar\\, Psychiatry\\n\\nZoom link\r\n : https://stanford.zoom.us/j/91908447378?pwd=VzY1TlJNaFdVVWdYWlZ3c0dEaWlUZz\r\n 09\r\nDTEND:20260428T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:CSCS Community Series: \" Lateral septum serotonin dynamics mediate \r\n aggression following sleep disruption\" with Ja Eun Choi\\, PhD\r\nUID:tag:localist.com\\,2008:EventInstance_52242947694954\r\nURL:https://events.stanford.edu/event/copy-of-cscs-community-series-non-inv\r\n asive-induction-of-long-term-prefrontal-plasticity-during-sleep-using-tms-w\r\n ith-umair-hassan-phd\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:OverviewJoin us for this session that provides clinicians with \r\n concise\\, evidence-based updates on evaluating and managing disorders of vo\r\n ice\\, swallowing\\, and sleep. Faculty will review diagnostic approaches and\r\n  management of common complaints such as the aging voice\\, globus sensation\r\n \\, and swallowing impairment linked to upper esophageal sphincter dysfuncti\r\n on. Participants will also explore surgical options for obstructive sleep a\r\n pnea (OSA) in patients unable to tolerate positive airway pressure (PAP) th\r\n erapy\\, including hypoglossal nerve stimulation\\, skeletal advancement\\, an\r\n d targeted palatal or multilevel procedures. Emphasis will be placed on air\r\n way phenotyping\\, perioperative care\\, and shared decision-making to optimi\r\n ze patient outcomes.\\n\\nRegistrationRegistration for all practitioners - fr\r\n ee\\n\\nTo register for this activity\\, please click HERE.\\n\\nCreditsAMA PRA \r\n Category 1 Credits™ (1.00 hours)\\, Non-Physician Participation Credit (1.00\r\n  hours)\\n\\nTarget AudienceSpecialties - Critical Care & Pulmonology\\, Denti\r\n stry\\, Internal Medicine\\, Otolaryngology (ENT)\\, Sleep Medicine\\, SurgeryP\r\n rofessions - Non-Physician\\, Physician ObjectivesAt the conclusion of this \r\n activity\\, learners should be able to:\\n1. Identify surgical candidates bas\r\n ed on anatomy\\, physiology\\, and patient factors (BMI\\, OSA severity\\, PAP \r\n intolerance\\, comorbidities).\\n2. Compare indications\\, outcomes\\, and risk\r\n s of HNS\\, MMA\\, and other targeted procedures to guide individualized trea\r\n tment. \\n3. Review counseling\\, perioperative pathways and indications for \r\n specialized care using shared decision-making to optimize outcomes.\\n4. Dev\r\n elop appropriate differential diagnoses for common voice and swallow proble\r\n ms\\n5. Manage and counsel patients with common voice and swallowing disorde\r\n rs.\\n\\nAccreditationIn support of improving patient care\\, Stanford Medicin\r\n e is jointly accredited by the Accreditation Council for Continuing Medical\r\n  Education (ACCME)\\, the Accreditation Council for Pharmacy Education (ACPE\r\n )\\, and the American Nurses Credentialing Center (ANCC)\\, to provide contin\r\n uing education for the healthcare team. \\n \\nCredit Designation \\nAmerican \r\n Medical Association (AMA) \\nStanford Medicine designates this Live Activity\r\n  for a maximum of 1.00 AMA PRA Category 1 CreditsTM.  Physicians should cla\r\n im only the credit commensurate with the extent of their participation in t\r\n he activity.\r\nDTEND:20260428T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:ENT Experts Up Close: Contemporary Approaches to Upper Airway and A\r\n erodigestive Disorders: From Sleep Surgery to Voice and Swallowing Care\r\nUID:tag:localist.com\\,2008:EventInstance_51836723951084\r\nURL:https://events.stanford.edu/event/ent-experts-up-close-contemporary-app\r\n roaches-to-upper-airway-and-aerodigestive-disorders-from-sleep-surgery-to-v\r\n oice-and-swallowing-care\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Would you like to learn how your peers utilize MRI in their res\r\n earch?  Would you like to learn how to initiate an MRI project?We invite an\r\n yone interested in incorporating MRI into their research\\, ask questions to\r\n  experts and discover MRI resources available.Register by April 27\\n\\n \\n\\n\r\n Date: April 28\\, 2026Time: 1pm – 6:30pm PSTLocation: Stanford Neurosciences\r\n  Building\\, E241Learn more about NPIL\r\nDTEND:20260429T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:NPIL Symposium 2026\r\nUID:tag:localist.com\\,2008:EventInstance_50769387183257\r\nURL:https://events.stanford.edu/event/npil-symposium-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260428T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491625891\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Science is full of metaphors. From black holes \"eating\" stars\\,\r\n  to yeast \"cell factories\"\\, to brain \"circuitry\" —the language researchers\r\n  use has the power to shape how ideas are received and remembered. Whether \r\n you're crafting a grant proposal\\, communicating across disciplines\\, or bu\r\n ilding a public profile\\, the ability to translate complex research into re\r\n sonant\\, accessible ideas sets strong scientists apart. Over 3 weekly sessi\r\n ons\\, you'll learn how to build a science metaphor from the ground up—notic\r\n ing the metaphors already embedded in your field\\, evaluating what makes th\r\n em effective or limiting\\, and developing your own with intention.You'll\\nl\r\n eave with a sharper communication toolkit and a deeper understanding of how\r\n  language shapes the way your work is understood and valued.\\n\\nIntensity L\r\n evel: Mild intensity\\n\\nMultiple topics are covered at a steady pace\\, with\r\n  in-class activities requiring some preparation. Some out-of-class work is \r\n required\\, and regular in-class participation is expected. Students will de\r\n velop a moderate level of skill-building during the course.Facilitated by: \r\n Kel Haung\\, student\\n\\nDetails: \\n\\nWhen: April 14\\, 21\\, 28 (Tuesdays)\\, 4\r\n -6PM\\n\\nOpen to enrolled graduate students at any stage in any discipline o\r\n r degree program. Postdocs will be accepted if space is available\\, but pri\r\n ority is given to graduate students.\\n\\nMetaphors in Science is an in-perso\r\n n\\, three-part workshop. Session dates are Tuesday's April 14\\, 21\\,28 from\r\n  4-6PM. Space is limited. Due to the workshop’s interactive format\\, full p\r\n articipation in all three sessions is required. Dinner will be served. \\n\\n\r\n If you are accepted to this workshop\\, you must confirm your place by submi\r\n tting a Student Participation Fee Agreement\\, which authorizes VPGE to char\r\n ge $50 to your Stanford bill – only if you do not fully participate in the \r\n event. You will receive a link to the Agreement and instructions if you are\r\n  offered a place.\\n\\nApplication deadline: Tuesday\\, April 7th @11:59PM PT.\r\n \\n\\nApply here\r\nDTEND:20260429T010000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260428T230000Z\r\nLOCATION:EVGR 144B\r\nSEQUENCE:0\r\nSUMMARY:Metaphors in Science: A Researcher's Guide to Communicating Ideas T\r\n hat Stick\r\nUID:tag:localist.com\\,2008:EventInstance_52198127519725\r\nURL:https://events.stanford.edu/event/metaphors-in-science-a-researchers-gu\r\n ide-to-communicating-ideas-that-stick\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260429T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663084984\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260429T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622320017\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260429\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294425051\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260429\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355561490\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260430T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910870781\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260429T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105028227\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260430T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068307915\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event originally planned for February 9 will now take plac\r\n e on April 29.\\n\\n \\n\\nCrisiswork presents a story of Lebanon through the l\r\n ens of activist lifeworlds\\, showing how\\, amid crisis\\, both political str\r\n uctures and everyday life become a terrain of generative possibility. Throu\r\n gh an ethnographic investigation into the relationship between crisis and p\r\n olitical imagination\\, Yasemin İpek examines activism as an open-ended proc\r\n ess\\, looking at the diversity of experiences that leads to ambivalent poli\r\n tical engagements. She follows a range of self-identified activists—includi\r\n ng unemployed NGO volunteers\\, middle-class consultants\\, and leftist entre\r\n preneurs—as their crisiswork\\, and response to contradictory pressures\\, le\r\n ads them to new ways of being and acting. Crisiswork demonstrates how class\r\n -based and other inequalities on local and global scales affect the lived r\r\n ealities and political imaginations of activists. It provides an innovative\r\n  analytical framework for understanding the complex political and social st\r\n ruggles against crises in the global South.\\n\\n \\n\\n\\n\\nYasemin İpek is an \r\n Assistant Professor in the Global Affairs Program at George Mason Universit\r\n y. She received her Ph.D. degree in Anthropology from Stanford University a\r\n nd a second doctoral degree from the Department of Political Science at Bil\r\n kent University. Her book Crisiswork: Activist Lifeworlds and Bounded Futur\r\n es in Lebanon (Stanford University Press\\, 2025) explicates the relationshi\r\n p between crisis and political imagination by examining the popularization \r\n of activism in contemporary Lebanon. For her second book-length research pr\r\n oject\\, she is studying transnational humanitarianism in the context of the\r\n  Syrian refugee crisis. Her work has appeared in journals such as Cultural \r\n Anthropology\\, American Ethnologist\\, The Journal of the Royal Anthropologi\r\n cal Institute\\, Political and Legal Anthropology Review (PoLAR)\\, The Musli\r\n m World\\, and Turkish Studies.\r\nDTEND:20260429T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T190000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Crisiswork: Activist Lifeworlds & Bounded Futures in Lebanon | Book\r\n  Talk with Yasemin İpek \r\nUID:tag:localist.com\\,2008:EventInstance_52030414906863\r\nURL:https://events.stanford.edu/event/crisiswork\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:In this session we will cover the basics of job interviews\\, fo\r\n cusing on open-ended and behavioral questions. Participants will draft answ\r\n ers to questions and practice answering them. By the end of the session you\r\n  will:\\n\\nBe familiar with the STARS framework for telling a story (giving \r\n an example) in an interviewLearned the difference between open ended and be\r\n havioral questionsHave written out and practiced an answer to an open ended\r\n  questionHave written out and practiced an answer to a behavioral questionH\r\n ave listened to sample answers to questions and given feedback for improvem\r\n entExperience Level: Entry-Level\\n\\nRegister Here\\n\\nFacilitated by Chris G\r\n olde\\, Assistant Director of Career Communities- PhDs & Postdocs\\, BEAM\\, C\r\n areerED\\n\\nAbout Quick Bytes:\\n\\nGet valuable professional development wisd\r\n om that you can apply right away! Quick Bytes sessions cover a variety of t\r\n opics and include lunch. Relevant to graduate students at any stage in any \r\n degree program.\\n\\nSee the full Quick Bytes schedule\r\nDTEND:20260429T201500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T190000Z\r\nLOCATION:\\, Oak West Lounge\r\nSEQUENCE:0\r\nSUMMARY:Quick Bytes: Interviewing: How to Shine the Entire Time\r\nUID:tag:localist.com\\,2008:EventInstance_52197999890056\r\nURL:https://events.stanford.edu/event/quick-bytes-interviewing-how-to-shine\r\n -the-entire-time-april29\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Tobias Lanz\\, \"EBV\r\n  and MS: Molecular mimicry and beyond\"\r\nDTEND:20260429T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Tobias Lanz\\, \"EBV and\r\n  MS: Molecular mimicry and beyond\"\r\nUID:tag:localist.com\\,2008:EventInstance_51807284351861\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-tobias-lanz-ebv-and-ms-molecular-mimicry-and-beyond-9335\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260430T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743790559\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Learn about how stress and anxiety show up in your body\\, emoti\r\n ons\\, thoughts and behaviors\\, and gain skills to lower anxiety in each are\r\n a. Increase your ability to manage anxious thoughts and develop skills to r\r\n ecognize the role of systems of oppression and conditioning in anxiety.\\n\\n\r\n You will create an individualized plan for recognizing and working with str\r\n ess and anxiety during this workshop.\\n\\nMultiple dates and times available\r\n  to attend this 2 hour workshop.Multiple CAPS therapists collaborate to pro\r\n vide these workshops.All enrolled students are eligible to participate in C\r\n APS groups and workshops. Connecting with CAPS is required to join this gro\r\n up. Please call 650.723.3785 during business hours (8:30 a.m. - 5:00 p.m. w\r\n eekdays) to connect and meet with a CAPS therapist\\, or message your therap\r\n ist/contact person at CAPS\\, to determine if this workshop is right for you\r\n \\, and be added to the workshop meeting that works best for your schedule. \r\n Workshops are in person.Access Anxiety Toolbox Workshop 2025-26 slides here\r\n .Anxiety Toolbox Dates\\n\\nFriday\\, April 17\\, 2026 from 1:00 p.m. - 3:00 p.\r\n m. Wednesday\\, April 29\\, 2026 from 2:00 p.m. - 4:00 p.m. Thursday\\, May 7\\\r\n , 2026 from 2:30 p.m. - 4:30 p.m. Wednesday\\, May 13\\, 2026 from 2:30 p.m.-\r\n 4:30 p.m. Tuesday\\, May 19\\, 2026 from 2:30 p.m.-4:30 p.m.\r\nDTEND:20260429T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260429T210000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\\, Ed Center\r\nSEQUENCE:0\r\nSUMMARY:Anxiety Toolbox\r\nUID:tag:localist.com\\,2008:EventInstance_52208020162856\r\nURL:https://events.stanford.edu/event/copy-of-anxiety-toolbox-6726\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260430T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379387593\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The Creative Writing Program is pleased to announce the next ev\r\n ent with the Mohr Visiting Poet: A Reading with D. A. Powell.\\n\\nThis event\r\n  is open to Stanford affiliates and the general public. Registration is enc\r\n ouraged but not required\\; registration form to follow.\\n\\n____\\n\\nD. A Pow\r\n ell is the author of five collections\\, including Useless Landscape\\, or a \r\n Guide for Boys\\, which received the National Book Critics Circle Award in p\r\n oetry. His honors include two Northern California Book Awards\\, the Kingsle\r\n y Tufts Poetry Prize\\, the Shelley Memorial Prize from the Poetry Society o\r\n f America\\, and the John Updike Award in Literature from the American Acade\r\n my of Arts & Letters\\, as well as fellowships from the National Endowment f\r\n or the Arts and the Guggenheim Foundation.\\n\\nCritic Stephanie Burt\\, writi\r\n ng in the New York Times\\, said of D. A. Powell \"No accessible poet of his \r\n generation is half as original\\, and no poet as original is this accessible\r\n .\"\\n\\nA former Briggs-Copeland Lecturer in Poetry at Harvard University\\, P\r\n owell has taught at Stanford\\, Columbia\\, University of Texas at Austin\\, U\r\n niversity of Iowa's Iowa Writers' Workshop\\, and Davidson College. He is a \r\n Professor at University of San Francisco and lives in San Francisco.\\n\\nPow\r\n ell's most recent book is Repast: Tea\\, Lunch & Cocktails\\, a reissue of hi\r\n s first three collections with an introduction by novelist David Leavitt. A\r\n  chapbook\\, Atlast T\\, was published by Rescue Press in Spring of 2020 and \r\n Low Hanging Fruit\\, another chapbook\\, was printed by Foundlings Press in 2\r\n 022. Forthcoming is Tricks\\, from Cutbank in 2026.\\n\\n____\\n\\nPowell is thi\r\n s year's Mohr Visiting Poet. Each year\\, the Creative Writing Program welco\r\n mes distinguished poets to host events and teach a Stanford writing seminar\r\n  to undergraduates. These events and seminars are made possible with the ge\r\n nerous support of Lawrence and Nancy Mohr.\r\nDTEND:20260430T043000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T030000Z\r\nGEO:37.423953;-122.171824\r\nLOCATION:Faculty Club\\, Cedar Room\r\nSEQUENCE:0\r\nSUMMARY:Reading with D. A. Powell\\, the Mohr Visiting Poet\r\nUID:tag:localist.com\\,2008:EventInstance_50721530450175\r\nURL:https://events.stanford.edu/event/reading-with-d-a-powell-the-mohr-visi\r\n ting-poet\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260430\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294427100\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260430\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355563539\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260501T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910871806\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 Undergrad\r\n uate Honors Thesis Exhibition. This exhibition marks the culmination of the\r\n  yearlong honors thesis program in art practice and will feature work by th\r\n e 2026 honors cohort.\\n\\nOn View: April 14-30\\, 2026\\nOpening Reception: Th\r\n ursday\\, April 16\\, 4-6pm\\nCurated by Camille Utterback\\nCoulter Art Galler\r\n y (McMurtry Building)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open t\r\n o the public\\n\\nVISITOR INFORMATION: Coulter Art Gallery is located at 355 \r\n Roth Way (McMurtry Building) on Stanford campus. The gallery is open Monday\r\n -Friday. Visitor parking is available in designated areas and payment is ma\r\n naged through ParkMobile (free after 4pm\\, except by the Oval). Alternative\r\n ly\\, take the Caltrain to Palo Alto Transit Center and hop on the free Stan\r\n ford Marguerite Shuttle. This exhibition is open to Stanford affiliates and\r\n  the general public. Admission is free. \\n\\nConnect with the Department of \r\n Art & Art History! Subscribe to our mailing list and follow us on Instagram\r\n  and Facebook.\r\nDTEND:20260501T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Undergraduate Honors Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332068308940\r\nURL:https://events.stanford.edu/event/2026-undergraduate-honors-thesis-exhi\r\n bition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260430T191500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762190133\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260430T194500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794486557\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260430T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491626916\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260501T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743791584\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDTEND:20260430T213000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Global Environmental Policy Seminar with Eric Zou\r\nUID:tag:localist.com\\,2008:EventInstance_52091130760793\r\nURL:https://events.stanford.edu/event/global-environmental-policy-seminar-w\r\n ith-eric-zou\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The midlife transition can be a powerful time in one’s life – a\r\n  time for review and recalibration. It can also feel like a destabilizing t\r\n ime\\, when changes to our bodies\\, our motivations\\, and the roles we play \r\n in life are shifting. Writing down your thoughts and feelings has been foun\r\n d to reduce stress\\, improve mood\\, and help us gain clarity and insight in\r\n to ourselves and the next steps we may want to take.\\n\\nIf you’ve always wa\r\n nted to start a journaling practice\\, are struggling to stay consistent wit\r\n h your practice\\, or are simply curious about what journaling is all about\\\r\n , then this class is for you! Over four online sessions\\, we will journal a\r\n bout questions that can arise around midlife\\, memories that have shaped us\r\n \\, and what the “second half” of life is calling out in us.\\n\\nYou will get\r\n  specific journaling prompts designed for exploration and deepening into th\r\n e midlife transition to do in and out of class\\, as well as some step-by-st\r\n ep processes to thoughtfully address challenges. Class time will be spent j\r\n ournaling\\, so come prepared to write.\\n\\nThis class will not be recorded. \r\n Attendance requirement for incentive points - at least 80% of 3 of the 4 se\r\n ssions.  Request disability accommodations and access info.\\n\\nClass detail\r\n s are subject to change.\r\nDTEND:20260501T001500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260430T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Journaling Through the Midlife Transition (April 30 - May 21)\r\nUID:tag:localist.com\\,2008:EventInstance_52220231905139\r\nURL:https://events.stanford.edu/event/journaling-through-the-midlife-transi\r\n tion-april-30-may-21\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Abstract:\\n\\nEveryone seems to agree that the main goal of Budd\r\n hism is to put an end to suffering. However\\, the picture may not be so sim\r\n ple\\, since suffering is not such an evident quality – does it\\, for exampl\r\n e\\, relate to the reality of death and ominous rebirth or to the regular qu\r\n otidian feeling of discomfort? There are good reasons to assume that differ\r\n ent strands of Buddhism are more interested in shaping a positive\\, ethical\r\n  mindset\\, than in reaching the total annihilation of suffering. This talk \r\n will employ a web of concepts from the early discourses and from Theravāda \r\n Abhidhamma to suggest that the such a conception that aims to produce a tho\r\n roughly moralized mind\\, embodied in equanimity – upekkhā – fits the logic \r\n of the path. Among the ideas we will survey are that fact that three main s\r\n chemes for advanced samādhi consciousness – the 4 jhānas\\, the 7 limbs of e\r\n nlightenment (bojjhaṅga)\\, and the 4 brahma-vihāras­ – are coalesce in a mo\r\n vement to generate upekkhā. In fact\\, upekkhā may not be only a seemingly n\r\n eutral “equanimity\\,” but a subtle form of care that emerges through brahma\r\n -vihāra practice. This approach also connects to a more positive theorizati\r\n on of selflessness than the reductive one that is popular in contemporary l\r\n iterature\\, one that emphasizes the dense dynamics of mental continuity ove\r\n r the breaking up of the illusory self to its parts.  \\n\\nBio:\\n\\nEviatar S\r\n hulman is Gail Levin de Nur Chair for Comparative Religion and Head of the \r\n Institute for the Study of History\\, Religion and Culture\\, at the Hebrew U\r\n niversity of Jerusalem. He is member of the Departments of Comparative Reli\r\n gion and Asian Studies\\, where he teaches and studies Buddhist and Indian p\r\n hilosophy and religion. He has authored Rethinking the Buddha: Early Buddhi\r\n st Philosophy as Meditative Perception (Cambridge University Press\\, 2014) \r\n and Visions of the Buddha: Creative Dimensions of Early Buddhist Scripture \r\n (OUP\\, 2021)\\, as well as many articles in leading scholarly journals. The \r\n latter monograph outlines a new approach to the composition of the early di\r\n scourses (Suttas\\, Sūtras) attributed to the Buddha.\r\nDTEND:20260501T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T000000Z\r\nGEO:37.429468;-122.167272\r\nLOCATION:Lathrop Library\\, 224\r\nSEQUENCE:0\r\nSUMMARY:Eviatar Shulman: \"The Buddhist Ethic: A Path to the Annihilation of\r\n  Suffering\\, or to Equanimity?\"\r\nUID:tag:localist.com\\,2008:EventInstance_51471865238659\r\nURL:https://events.stanford.edu/event/eviatar-shulman-the-buddhist-ethic-a-\r\n path-to-the-annihilation-of-suffering-or-to-equanimity\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260501T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404972030\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Made possible by the J. Fred Weintz and Rosemary Weintz Art Lec\r\n ture Series Fund\\, this series invites distinguished art historians from di\r\n verse concentrations each quarter to speak and engage with our students and\r\n  the Stanford community\\, enriching the culture of art history and apprecia\r\n tion on campus and beyond.\\n\\nArchitecture and the Right to Heal: Resettler\r\n  Nationalism in the Aftermath of Conflict and Disaster\\nAkcan will introduc\r\n e her new book that explores architecture’s role in healing after conflicts\r\n  and disasters by discussing buildings and spaces in relation to transition\r\n al justice and energy transition. Focusing on lands held by former Ottoman \r\n Empire and putting forth the concept of resettler nationalism as a source o\r\n f partition and displacement\\, the book locates spaces of political and eco\r\n logical harm\\, and advocates for healing on individual\\, communal and plane\r\n tary levels. It construes healing as a matter of rights and a holistic noti\r\n on of justice to be achieved retroactively\\, and calls for instituting acco\r\n untability and reparations against internal social\\, state and business-led\r\n  violence.\\n\\nAbout the Speaker\\nEsra Akcan is professor and director of gr\r\n aduate studies in the Department of Architecture at Cornell University and \r\n the 2025-2026 Marta Sutton Weeks Fellow at Stanford Humanities Center. Akca\r\n n’s research on modern and contemporary architecture and urbanism foregroun\r\n ds the intertwined histories of Europe\\, West Asia and Northeast Africa\\, a\r\n nd offers new ways to understand architecture’s role in global\\, social and\r\n  environmental justice. She has written extensively\\, lectured globally\\, a\r\n nd received multiple fellowships on critical and postcolonial theory\\, raci\r\n sm\\, immigration\\, climate change\\, reparations and transitional justice\\, \r\n architectural photography\\, translation\\, neoliberalism\\, and global histor\r\n y.\\n\\nVISITOR INFORMATION\\nThis event is open to Stanford affiliates and th\r\n e general public. Space for this program is limited\\; advance registration \r\n is recommended. Those who have registered will have priority for seating. A\r\n dmission is free.\\n\\nOshman Hall is located within the McMurtry Building on\r\n  Stanford campus at 355 Roth Way. Visitor parking is available in designate\r\n d areas and is free after 4pm on weekdays. Alternatively\\, take the Caltrai\r\n n to Palo Alto Transit Center and hop on the free Stanford Marguerite Shutt\r\n le. If you need a disability-related accommodation or wheelchair access inf\r\n ormation\\, please contact Julianne White at jgwhite@stanford.edu.\\n\\nConnec\r\n t with the Department of Art & Art History! Subscribe to our mailing list a\r\n nd follow us on Instagram and Facebook.\r\nDTEND:20260501T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T003000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:Weintz Art Lecture Series: Esra Akcan\r\nUID:tag:localist.com\\,2008:EventInstance_52215136455714\r\nURL:https://events.stanford.edu/event/weintz-art-lecture-series-esra-akcan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Event Details\\n\\nJoin Maggie Dethloff\\, Assistant Curator of Ph\r\n otography and New Media\\, on this special highlights tour of Animal\\, Veget\r\n able\\, nor Mineral: Works by Miljohn Ruperto\\, the first large-scale solo m\r\n useum exhibition of Manila-born\\, Los Angeles-based artist Miljohn Ruperto \r\n (b. 1971).  RSVP HERE\\n\\nWorking across photography\\, video\\, animation\\, g\r\n enerative artificial intelligence\\, and other mediums\\, Ruperto explores th\r\n e ways humans have understood their place in the world. From digitally-crea\r\n ted fantastical botanical specimens printed as gelatin silver photographs t\r\n o immersive apocalyptic landscapes experienced in VR\\, Ruperto’s artworks h\r\n ighlight the elusiveness of knowledge and unsettle what we think we know ab\r\n out nature.\\n\\nAnimal\\, Vegetable\\, nor Mineral: Works by Miljohn Ruperto i\r\n s organized by the Cantor Arts Center and curated by Maggie Dethloff\\, Assi\r\n stant Curator of Photography and New Media.This exhibition is presented in \r\n conjunction with the museum’s Asian American Art Initiative (AAAI)\\n\\nAll p\r\n ublic programs at the Cantor Arts Center are always free! Space for this pr\r\n ogram is limited\\; advance registration is recommended.\\n\\n________\\n\\nPark\r\n ing\\n\\nFree visitor parking (after 4pm) is available along Lomita Drive as \r\n well as on the first floor of the Roth Way Garage Structure\\, located at th\r\n e corner of Campus Drive West and Roth Way at 345 Campus Drive\\, Stanford\\,\r\n  CA 94305. From the Palo Alto Caltrain station\\, the Cantor Arts Center is \r\n about a 20-minute walk or the free Marguerite shuttle will bring you to cam\r\n pus via the Y or X lines.\\n\\nDisability parking is located along Lomita Dri\r\n ve near the main entrance of the Cantor Arts Center. Additional disability \r\n parking is located on Museum Way and in Parking Structure 1 (Roth Way & Cam\r\n pus Drive).\\n\\n________\\n\\nAccessibility Information or Requests\\n\\nCantor \r\n Arts Center at Stanford University is committed to ensuring our programs ar\r\n e accessible to everyone. To request access information and/or accommodatio\r\n ns for this event\\, please complete this form at least one week prior to th\r\n e event: museum.stanford.edu/access.\\n\\nFor questions\\, please contact disa\r\n bility.access@stanford.eduor aguskin@stanford.edu\\n\\n \\n\\nImage: Miljohn Ru\r\n perto\\, What God Hath Wrought (Kairos)\\, from the series The Great Disappoi\r\n ntment\\, in progress. Three animations with VR (color\\, sound). Courtesy of\r\n  the artist and Micki Meng Gallery\\, San Francisco.\r\nDTEND:20260501T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T010000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Freidenrich Family Gallery\r\nSEQUENCE:0\r\nSUMMARY:Evening Curator Talk | Animal\\, Vegetable\\, nor Mineral: Works by M\r\n iljohn Ruperto\r\nUID:tag:localist.com\\,2008:EventInstance_51961265043625\r\nURL:https://events.stanford.edu/event/copy-of-lunchtime-curator-talk-miljoh\r\n n-ruperto-3559\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Elon Musk. A troubled dreamer. A power-hungry\\, vengeful bungle\r\n r. A hero who became a villain\\; a villain who became a hero. What if he is\r\n n’t any of these things? What if he was more like an idea? An avatar for a \r\n world view\\, the master code for an operating system. This is the topic of \r\n Quinn Slobodian and Ben Tarnoff’s new book\\, Muskism: A Guide for the Perpl\r\n exed.\\n\\nIn this book launch event\\, the authors will be joined in conversa\r\n tion by Stanford professor Adrian Daub\\, author of What Tech Calls Thinking\r\n .\\n\\nPlease RSVP at this link to attend. \\n\\nTo understand Elon Musk and th\r\n e world he intends to make\\, Slobodian and Tarnoff argue\\, we have to under\r\n stand the worlds that made him. From his early years in apartheid South Afr\r\n ica come a deep commitment to racial hierarchy\\, industrial self-reliance\\,\r\n  and fortress futurism. From Silicon Valley we get the idea to finance moon\r\n shot projects with public money. And online we see Musk use the tools of vi\r\n rality\\, repetition and provocation to undermine legacy institutions in pur\r\n suit of a kind of techno-state. Not dissimilar to the world of his beloved \r\n video games.\\n\\nThe worlds that made Musk are now making ours. Into a de-gl\r\n obalizing world comes a promise of sovereignty through technology. But not \r\n for everyone. The techno-maximalism of the political and business elite see\r\n s a cyborg future and signs us all up.\\n\\nTo say that Muskism is worth taki\r\n ng seriously is not to say that its success is guaranteed. But the institut\r\n ional breakdown of our era offers an opening. At some point\\, society will \r\n stabilize on a new basis. Muskism could provide the foundation. In this boo\r\n k launch event\\, the authors will help us all understand the ground taking \r\n shape beneath us.\\n\\nQuinn Slobodian is professor of international history \r\n at Boston University\\, and the author or editor of seven books translated i\r\n nto ten languages including\\, Hayek’s Bastards: Race\\, Gold\\, IQ and the Ca\r\n pitalism of the Far Right\\, Crack-Up Capitalism: Market Radicals and the Dr\r\n eam of a World without Democracy\\, and Globalists: The End of Empire and th\r\n e Birth of Neoliberalism. In 2024\\, the Prospect Magazine (UK) named him on\r\n e of the World’s 25 Top Thinkers\\n\\nBen Tarnoff is a writer and technologis\r\n t based in Massachusetts and is the author of Internet for the People and t\r\n he co-author of Voices from the Valley: Tech Workers Talk About What They D\r\n o—And How They Do It. He is a frequent contributor to the New York Review o\r\n f Books\\, and has also written for the New York Times\\, The New Yorker\\, an\r\n d the New Republic\\, among other publications.\\n\\nAdrian Daub is an academi\r\n c and critic based in San Francisco and Berlin. He is the J.E. Wallace Ster\r\n ling Professor in the Humanities in the Departments of Comparative Literatu\r\n re and German Studies at Stanford University. Since 2019\\, he has also serv\r\n ed as the Faculty Director of the Michelle R. Clayman Institute for Gender \r\n Research. He is the author of six academic books as well as several works o\r\n f cultural and political criticism. His writing regularly appears in magazi\r\n nes and newspapers across the German-speaking and Anglophone worlds.\r\nDTEND:20260501T033000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T020000Z\r\nLOCATION:Green Library \\, 122\r\nSEQUENCE:0\r\nSUMMARY:Book Launch with Quinn Slobodian and Ben Tarnoff: \"Muskism: A Guide\r\n  for the Perplexed\"\r\nUID:tag:localist.com\\,2008:EventInstance_51782969828022\r\nURL:https://events.stanford.edu/event/book-launch-muskism\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260501\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294428125\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260501\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355564564\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260502T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910872831\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260502T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817894158\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260501T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802458375\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260501T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699868360\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:\"Meditation practice offers a rudder supporting calm\\, compassi\r\n onate\\, competent mindful communication\\, collaboration\\, and caring action\r\n s no matter the stormy waves you may face.\" – Thich Nhat Hanh\\n\\nEmbark on \r\n your meditation journey or refresh your existing practice with this engagin\r\n g online class. Over two sessions\\, we will dive into the fundamentals of m\r\n editation and delight in experiencing the physical and psychological benefi\r\n ts that enhance personal and collective well-being\\, such as reduced stress\r\n \\, more resilience\\, better concentration and deeper sleep.\\n\\nYou will cul\r\n tivate fundamental meditation techniques\\, including breath-based and body-\r\n based mindfulness meditations. You will also explore walking meditation\\, v\r\n isualization\\, and focused-attention practices to discover the practice tha\r\n t works best for you and supports you in sustaining your practice.\\n\\nWheth\r\n er you’re a complete beginner or looking to rekindle your practice\\, this c\r\n lass offers direct experiences that lay the groundwork for enjoying meditat\r\n ion as part of your healthy lifestyle.If you would like to develop your pra\r\n ctice beyond these two introductory sessions\\, you are invited to also regi\r\n ster for Deepening Your Meditation Practice\\, which will expand upon the pr\r\n inciples covered in this class.\\n\\nThis class will not be recorded. Attenda\r\n nce requirement for incentive points - at least 80% of both sessions.  >Req\r\n uest disability accommodations and access info.\\n\\nClass details are subjec\r\n t to change.\r\nDTEND:20260501T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Building Your Meditation Practice (May 1 - 8)\r\nUID:tag:localist.com\\,2008:EventInstance_52220231950201\r\nURL:https://events.stanford.edu/event/building-your-meditation-practice-may\r\n -1-8\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260501T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260501T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682867628\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us at Harmony House for IDA’s monthly First Fridays! A gat\r\n hering space for artists\\, students\\, and community to connect\\, unwind\\, a\r\n nd create together. Each month\\, we open our doors at the Harmony House  fo\r\n r an evening of conversation\\, art-making\\, and chill vibes over food and d\r\n rinks. Whether you’re here to meet new people\\, share your work\\, or just h\r\n ang out\\, First Fridays are a chance to slow down and be in creative commun\r\n ity.\r\nDTEND:20260502T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T000000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at IDA (Social)\r\nUID:tag:localist.com\\,2008:EventInstance_50731549504979\r\nURL:https://events.stanford.edu/event/first-fridays-at-ida-social\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us for the First Fridays event series at the EVGR Pub & Be\r\n er Garden! \\n\\nWe provide pub food until it runs out.\\n\\nThe first Friday o\r\n f each month from 5:00 p.m. to 7:00 p.m.\\, with our kick-off event occurrin\r\n g THIS FRIDAY\\, 11.7.2025.\r\nDTEND:20260502T020000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T000000Z\r\nGEO:37.426705;-122.157614\r\nLOCATION:EVGR Pub & Beer Garden\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at the EVGR Pub & Beer Garden\r\nUID:tag:localist.com\\,2008:EventInstance_51757169761632\r\nURL:https://events.stanford.edu/event/evgr-first-fridays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260502\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294430174\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260502\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355565589\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This workshop is a part of the T. T. & W. F. Chao Buddhism and \r\n Contemporary Society Series and will explore the early Buddhist sources of \r\n mindfulness meditation in theory and in practice. Participants will be guid\r\n ed through an examination of the teachings that form the shared inheritance\r\n  of all later Buddhist traditions and that also inform many contemporary ap\r\n plications. Throughout the day\\, we will be looking into multiple construct\r\n s and perspectives on mindfulness and their practical implications\\, discov\r\n ering how theory\\, practice\\, and their interweaving have continually evolv\r\n ed—shaped by diverse maps and goals of the Buddhist path across time\\, thro\r\n ugh different cultures\\, and into present-day recontextualizations. \\n\\nThe\r\n  workshop will offer participants the opportunity for experiential explorat\r\n ion of the relevant practices together with an accessible scholarly groundi\r\n ng in the primary textual sources in translation.\\n\\nThis event is free and\r\n  open to the public\\, and everyone is welcome. However\\, because of space l\r\n imitations\\, registration is essential. Some prior exposure to basic Buddhi\r\n st or mindfulness teachings and practices is helpful but not a prerequisite\r\n  for participation.\\n\\nRegistration will open in April 2026. Please check b\r\n ack. \\n\\nInstructors: Bhikkhunī Dhammadinnā is a monastic scholar who teach\r\n es meditation\\, drawing on primary sources with mindfulness of how their hi\r\n storical and ideological developments impact practice. Paul Harrison has ta\r\n ught in Stanford’s Department of Religious Studies for almost 20 years and \r\n specializes in the study of Buddhist texts in their original languages.\r\nDTEND:20260502T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T160000Z\r\nGEO:37.423877;-122.167441\r\nLOCATION:Law School\\, Paul Brest Hall\r\nSEQUENCE:0\r\nSUMMARY: \"Tracing Mindfulness Back to Its Sources\": T. T. and W. F. Chao Wo\r\n rkshop with Bhikkhunī Dhammadinnā and Paul Harrison\r\nUID:tag:localist.com\\,2008:EventInstance_51022529588316\r\nURL:https://events.stanford.edu/event/t-t-and-w-f-chao-workshop-with-with-b\r\n hikkhuni-dhammadinna-and-paul-harrison-tracing-mindfulness-back-to-its-sour\r\n ces\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260503T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910873856\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260502T183000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078579645\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260502T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699870409\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260502T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692000046\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260502T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682868653\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260502T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708353825\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260502T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260502T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668880911\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260503\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294431199\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260503\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355567638\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Fitness/Recreational Sport\r\nDESCRIPTION:Let's make a difference.\\n\\nJoin Stanford Medicine My Heart Cou\r\n nts on Sunday\\, May 3 on the Stanford campus. Choose how you participate: 5\r\n k or Kids Fun Run. Sign up and organize a team to take on heart disease at \r\n myheartcountsrun.org.\\n\\nThe My Heart Counts 5K and Fun Run supports the St\r\n anford Center for Inherited Cardiovascular Disease. At SCICD\\, we help fami\r\n lies with genetic heart disease access life-saving treatments and personali\r\n zed care. Together we can give hope\\, heal hearts\\, and save lives. Join us\r\n  in making a lasting impact – because every donation and racer helps a fami\r\n ly thrive.\r\nDTEND:20260503T160000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Medicine My Heart Counts | 5k & Kids Fun Run\r\nUID:tag:localist.com\\,2008:EventInstance_52179891356087\r\nURL:https://events.stanford.edu/event/stanford-medicine-my-heart-counts-5k-\r\n kids-fun-run\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260504T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910874881\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260503T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809533816\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260503T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51969417153605\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260503T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692003119\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260503T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682869678\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Welcome to Sankofa Sunday: University Praise & Worship at Stanf\r\n ord! The history of Black Church at Stanford dates back to 1989 when severa\r\n l students and the then Associate Dean Rev. Floyd Thompkins formed a worshi\r\n pping community to meet the spiritual and cultural yearnings of the Black C\r\n ommunity at Stanford. After a robust History the service was discontinued u\r\n ntil 2022 when the need once again led by students and staff began to reviv\r\n e Black Church as an occasional service once a month.\r\nDTEND:20260503T213000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T203000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Sankofa Sundays: University Praise & Worship\r\nUID:tag:localist.com\\,2008:EventInstance_51958646499351\r\nURL:https://events.stanford.edu/event/sankofa-sundays-university-praise-wor\r\n ship\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260503T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740370445\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260503T223000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708355874\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260503T230000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260503T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668882960\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260505T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260504T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910875906\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Join us at the first wellness conference of its kind dedicated \r\n to the health and wellbeing of the 50+ audience. Hosted by the Stanford Lif\r\n estyle Medicine program and the Longevity Project\\, this is the third event\r\n  in our Healthy Aging series! We are excited to bring new ideas\\, perspecti\r\n ves\\, and innovations focused on building a healthy and fulfilling lifestyl\r\n e as we age.\\n\\nThis year\\, we'll explore how purpose\\, power\\, and play ar\r\n e core to living a healthy life  not just in the gym\\, but in our mindset\\,\r\n  movement\\, decision-making\\, and daily habits. Healthy Aging 2026 will be \r\n offered in-person as well as virtual\\, ensuring everyone has an opportunity\r\n  to attend.\\n\\nThis event is sponsored by Stanford Lifestyle Medicine and S\r\n tanford Prevention Research Center.\\n\\n*Tickets are available for both in-p\r\n erson and virtual attendance.\r\nDTEND:20260505T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260504T160000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\r\nSEQUENCE:0\r\nSUMMARY:Healthy Aging 2026: Aging with Purpose\\, Power\\, and Play\r\nUID:tag:localist.com\\,2008:EventInstance_52208061480065\r\nURL:https://events.stanford.edu/event/healthy-aging-2026-aging-with-purpose\r\n -power-and-play\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The first Monday of each month\\, the Knight Initiative for Brai\r\n n Resilience will host monthly seminars to bring together awardees\\, affili\r\n ated professors and students for a series of 'lab meeting' styled talks. Tw\r\n o speakers will discuss their brain resilience research\\, experiences in th\r\n e field\\, and answer questions about their work.\\n\\nTo support our research\r\n ers' participation in this open science ‘lab-meeting style’ exchange of ide\r\n as\\, these seminars are not streamed/recorded and are only open to members \r\n of the Stanford community. \\n\\nCaitlin Taylor\\, Stanford University\\n\\nTalk\r\n  title TBD\\n\\nLay research TBD\\n\\n \\n\\nGaurav Chattree \\, Stanford Universi\r\n ty\\n\\nTalk title TBD\\n\\nLay research TBD\\n\\n \\n\\n \\n\\nEVENT POSTER COMING S\r\n OON\r\nDTEND:20260504T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260504T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Brain Resilience Seminar: Caitlin Taylor and Gaurav Chattree\r\nUID:tag:localist.com\\,2008:EventInstance_49919871982873\r\nURL:https://events.stanford.edu/event/brain-resilience-seminar-caitlin-tayl\r\n or-and-gaurav-chattree\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Life's ups and downs can leave us feeling grumpy\\, lethargic\\, \r\n or low-spirited at times. Ironically\\, the moments when we could most benef\r\n it from engaging in activities that boost our mood are often the times when\r\n  we lack the energy or motivation to do so.\\n\\nThis webinar will teach you \r\n how to create a plan when you're feeling good to help you get through those\r\n  times when you're feeling down. We'll start by reviewing some tried-and-tr\r\n ue \"happiness habits\\,\" such as spending time in nature\\, connecting with a\r\n  friend\\, or taking a mindful moment - things that many of us know we could\r\n  do but often don't. Then\\, you'll be guided to create a strategic plan to \r\n use these activities when you need to boost your mood and energy. By having\r\n  your own personalized happiness plan at your fingertips\\, you will have th\r\n e tools you need to lift your spirits ready to go the next time you are fee\r\n ling blue.\\n\\nThis class will be recorded and a one-week link to the record\r\n ing will be shared with all registered participants. To receive incentive p\r\n oints\\, attend at least 80% of the live session or listen to the entire rec\r\n ording within one week.  Request disability accommodations and access info.\r\n \\n\\nClass details are subject to change.\r\nDTEND:20260504T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260504T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Plan Ahead for a Happier You\r\nUID:tag:localist.com\\,2008:EventInstance_52220232051589\r\nURL:https://events.stanford.edu/event/plan-ahead-for-a-happier-you-9743\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:TBA\r\nDTEND:20260505T003000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260504T230000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\\, James Lin and Nisa Leung Seminar\r\n  Room\\, E153\r\nSEQUENCE:0\r\nSUMMARY:Katrin Franke\r\nUID:tag:localist.com\\,2008:EventInstance_51889939043862\r\nURL:https://events.stanford.edu/event/katrin-franke\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Travel isn’t just about reaching faraway destinations—it’s a mi\r\n ndset we can bring to everyday life. Whether you're planning a trip abroad \r\n or simply stepping out your front door\\, approaching your surroundings with\r\n  curiosity\\, creativity\\, and reflection can enrich your experience and bui\r\n ld resilience.\\n\\nJoin us for an engaging and hands-on virtual class that b\r\n lends mindfulness\\, journaling\\, and the joy of discovery. Over three inter\r\n active sessions\\, you’ll learn how to create and keep a portable creative v\r\n isual journal to capture your travel reflections—through words\\, sketches\\,\r\n  collage\\, and more. We’ll explore how to cultivate a “traveler’s mindset\\,\r\n ” embrace cultural encounters\\, and respond creatively to the unexpected.\\n\r\n \\nThe class includes practical demonstrations\\, guided journaling time\\, an\r\n d inspiring examples from the instructor’s own travel journals. You’ll also\r\n  receive tips for assembling your own customized journaling kit and learn t\r\n echniques to make mindful observation part of your daily routine—wherever y\r\n ou are.\\n\\nWhether you're preparing for a journey\\, reflecting on past trav\r\n els\\, or seeking new ways to engage with the world around you\\, this class \r\n will offer tools and inspiration to help you connect\\, create\\, and reflect\r\n .\\n\\nPlease note that this class uses analog techniques for journaling\\, in\r\n cluding paper\\, pens\\, and other physical supplies. A suggested supplies li\r\n st will be provided to you when you register. While some of these ideas can\r\n  be translated to digital journals\\, the techniques and examples in this cl\r\n ass will focus on physical journaling\\, not digital tools.\\n\\nThis class wi\r\n ll not be recorded. Attendance requirement for incentive points - at least \r\n 80% of all 3 sessions.  Request disability accommodations and access info.\\\r\n n\\nClass details are subject to change.\r\nDTEND:20260505T001500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260504T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Mindful Travel with a Creative Visual Journal (May 4 - 18)\r\nUID:tag:localist.com\\,2008:EventInstance_52220231999359\r\nURL:https://events.stanford.edu/event/mindful-travel-with-a-creative-visual\r\n -journal-may-4-18\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260505T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430660469\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260506T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910876931\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:About the event: The Women\\, Peace and Security sector advocate\r\n s for the inclusion of designated gender experts in peace processes to impr\r\n ove outcomes for women. However\\, empirical support for the effectiveness o\r\n f gender experts remains inconclusive. This talk explores whether gender ex\r\n perts serve as powerful advocates or powerless actors in efforts to advance\r\n  gender-sensitive peace negotiation outcomes. Leveraging data capturing the\r\n  gender and position of 2299 negotiation delegates across 116 comprehensive\r\n  peace agreements finalized between 1990 and 2021\\, we find that gender exp\r\n erts increase the likelihood that peace agreements contain provisions for w\r\n omen. However\\, we find that gender experts primarily influence agreement o\r\n utcomes by increasing women’s involvement in these processes. To examine th\r\n is finding\\, we consider the impact of gender experts through the case of N\r\n orthern Ireland\\, drawing from 42 interviews and archival work conducted be\r\n tween 2020 and 2023. We find that the systemic masculinized structure of pe\r\n ace negotiations hinders gender experts’ overall influence. Our mixed-metho\r\n ds findings explain how gender experts are simultaneously powerless and pow\r\n erful. This study identifies the structural limitations of gender experts’ \r\n inclusion as the sole mechanism to advance women-specific provisions in pea\r\n ce processes\\, furthering our understanding of the gender dynamics of peace\r\n  negotiations.\\n\\nAbout the speaker: Elizabeth is a CISAC Postdoctoral Fell\r\n ow and previously held fellowships at Harvard Kennedy School’s Belfer Cente\r\n r\\, Harvard Law School’s Program on Negotiation\\, the US Institute of Peace\r\n \\, and Northwestern University’s Buffett Institute for Global Affairs. Her \r\n research focuses on Women\\, Peace and Security\\, and explores women’s repre\r\n sentation in peace negotiations. Elizabeth holds a Ph.D. from Northwestern \r\n University and an M.A. in International Relations from the University of Br\r\n itish Columbia. She previously worked as a Gender Specialist with the Unite\r\n d Nations Development Programme (UNDP) in Kosovo and as a Gender Consultant\r\n  for the United States Agency for International Development (USAID) in Ghan\r\n a.\r\nDTEND:20260505T201500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T190000Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, William J. Perry Conference Room\r\nSEQUENCE:0\r\nSUMMARY:Powerful Advocates or Powerless Actors? The Influence of Gender Exp\r\n erts in Peace Negotiations\r\nUID:tag:localist.com\\,2008:EventInstance_52217549571926\r\nURL:https://events.stanford.edu/event/powerful-advocates-or-powerless-actor\r\n s-the-influence-of-gender-experts-in-peace-negotiations\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:OverviewThis webinar will provide an integrated overview of cur\r\n rent and emerging strategies for the management of low back pain. We will r\r\n eview basivertebral nerve ablation\\, including its development\\, outcomes e\r\n vidence\\, and candidate selection. Additionally\\, we’ll compare spinal fusi\r\n on with motion-preserving spine surgery\\, examining long-term consequences\\\r\n , current indications for fusion\\, and the latest motion-preserving options\r\n  and their most effective clinical use cases.\\n\\nRegistrationRegistration f\r\n or all practitioners - free.\\n\\nTo register for this activity\\, please clic\r\n k HERE\\n\\nCreditsAMA PRA Category 1 Credits™ (1.00 hours)\\, Non-Physician P\r\n articipation Credit (1.00 hours)\\n\\nTarget AudienceSpecialties - Internal M\r\n edicine\\, Primary Care & Population Health\\, Sports MedicineProfessions - N\r\n on-Physician\\, Physician ObjectivesAt the conclusion of this activity\\, lea\r\n rners should be able to:\\n1. Summarize current clinical outcomes evidence f\r\n or basivertebral nerve ablation.\\n2. Review procedural considerations\\, pat\r\n ient selection criteria\\, and candidacy for basivertebral nerve ablation.\\n\r\n 3. Describe motion-preserving spine surgery options and the clinical scenar\r\n ios in which they are feasible.\\n4. Apply evidence-based best practices to \r\n determine when motion-preserving approaches are not optimal and when spinal\r\n  fusion should be considered.\\n\\nAccreditationIn support of improving patie\r\n nt care\\, Stanford Medicine is jointly accredited by the Accreditation Coun\r\n cil for Continuing Medical Education (ACCME)\\, the Accreditation Council fo\r\n r Pharmacy Education (ACPE)\\, and the American Nurses Credentialing Center \r\n (ANCC)\\, to provide continuing education for the healthcare team. \\n\\nCredi\r\n t Designation \\nAmerican Medical Association (AMA) \\nStanford Medicine desi\r\n gnates this Live Activity for a maximum of 1.00 AMA PRA Category 1 CreditsT\r\n M.  Physicians should claim only the credit commensurate with the extent of\r\n  their participation in the activity.\r\nDTEND:20260505T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Medicine Orthopaedic Academy: Novel Treatments for Patient\r\n s with Spinal Disorders\r\nUID:tag:localist.com\\,2008:EventInstance_52125916429348\r\nURL:https://events.stanford.edu/event/stanford-medicine-orthopaedic-academy\r\n -novel-treatments-for-patients-with-spinal-disorders\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Global Risk team is offering virtual pre-departure resource\r\n  review sessions specifically for internationally traveling faculty\\, resea\r\n rchers.\\n\\nIn this session\\, Global Risk will cover\\n\\nhigh-level travel ri\r\n sk overview and mitigations\\n\\ncurrent events impacting travel\\n\\ntraveling\r\n  as a non-U.S. citizen\\n\\ntraveling to destinations with\\n\\nrestrictive pri\r\n vacy laws\\n\\ndata security concerns\\n\\nelevated medical and security risks\\\r\n n\\nincident response processes and resources\\n\\ncampus services available t\r\n o support them\\, their research\\, and their work.\\n\\n \\n\\nThe session will \r\n be 30 minutes\\, with the option to remain for an optional Q&A.\r\nDTEND:20260505T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T193000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Global Risk Resource Review for Faculty\\, Researchers (May)\r\nUID:tag:localist.com\\,2008:EventInstance_51808336971365\r\nURL:https://events.stanford.edu/event/global-risk-resource-review-for-facul\r\n ty-researchers-may\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260505T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491627941\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford faculty\\, students and staff are welcome to join the F\r\n reeman Spogli Institute for International Studies (FSI) for “World Changing\r\n  Technology in 2026\\,” a forward-looking conversation on the technology sha\r\n ping the world.\\n\\nFSI Director Colin Kahl will moderate a panel of leading\r\n  institute scholars as they examine the impact of AI and other emerging tec\r\n hnologies on society and geopolitics. The discussion will feature Jennifer \r\n Pan on China's use of technology to pursue its political interests\\; Andy G\r\n rotto on technology innovation and national security\\, and more to be annou\r\n nced soon. Kahl will also offer insights into U.S.-China competition for AI\r\n  dominance.\\n\\nDon't miss this timely conversation on emerging risks\\, oppo\r\n rtunities\\, and policy implications as we navigate an increasingly complex \r\n technology landscape in 2026.\\n\\nDrinks and hors d'oeuvres will be served f\r\n ollowing the event.\r\nDTEND:20260505T233000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T223000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:World Changing Technology in 2026\r\nUID:tag:localist.com\\,2008:EventInstance_52278288540604\r\nURL:https://events.stanford.edu/event/world-changing-technology-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The financial landscape has never been more complex\\, but the r\r\n ight knowledge and tools can transform your financial future. In this two-s\r\n ession deep dive\\, Professor Annamaria Lusardi\\, one of the world's leading\r\n  experts on financial literacy\\, will guide you through evidence-based stra\r\n tegies for smart saving\\, investing fundamentals\\, debt management\\, and ri\r\n sk management. Then\\, in a hands-on \"Get $tuff Done\" session\\, you'll trans\r\n late these concepts into action by creating your own personalized financial\r\n  plan with Angela Amarillas\\, director of Stanford’s financial wellness pro\r\n gram called Mind Over Money. Over the two sessions\\, you'll identify your t\r\n op financial priorities\\, map out concrete next steps\\, and leave with the \r\n tools and confidence to execute your plan. Whether you're navigating studen\r\n t loans\\, starting to invest\\, building emergency savings\\, or planning for\r\n  post-graduation life\\, you'll gain both the foundational knowledge and the\r\n  actionable roadmap you need to take care of your financial life while at S\r\n tanford and beyond.\\n\\nTuesday\\, May 5\\, 4-6pm — Session 1: Foundations of \r\n Financial Decision-Making\\nIn this intensive two-hour session\\, Professor L\r\n usardi will draw on years of rigorous research to deliver evidence-based st\r\n rategies for navigating today's financial choices. You will learn:\\n\\nSmart\r\n  saving strategies: How to build savings habits that actually work and crea\r\n te financial buffers for life's uncertaintiesInvesting fundamentals: Demyst\r\n ifying the basics of growing wealth over time\\, from compound interest to a\r\n sset allocationDebt management: Understanding when debt helps or hurts you\\\r\n , and strategies for managing student loans and other obligationsRisk manag\r\n ement: Essential strategies for protecting yourself and your assets against\r\n  financial shocksThis session will equip you not only to make better financ\r\n ial choices yourself\\, but also to share these critical lessons with family\r\n  members and others in your life. Come ready to engage\\, ask questions\\, an\r\n d build the financial foundation that will serve you throughout your time a\r\n t Stanford and beyond.\\n\\nThursday\\, May 7\\, 4-6pm — Session 2: Your Person\r\n al Financial Action Plan\\nBuilding on the foundations from Session 1\\, this\r\n  hands-on\\, two-hour workshop will help you translate financial knowledge i\r\n nto concrete action. Led by Angela Amarillas\\, this \"Get $tuff Done\" sessio\r\n n is designed to move you from understanding financial concepts to implemen\r\n ting them in your own life.\\n\\nWe'll tackle the common obstacles that keep \r\n people from acting on good financial intentions and create accountability s\r\n tructures to ensure that you will follow through. Whether it's managing stu\r\n dent loans\\, starting to invest\\, building an emergency fund\\, or planning \r\n for major life transitions\\, you'll leave knowing exactly where to focus yo\r\n ur energy first.\\n\\nThis is a working session—bring your laptop\\, a general\r\n  sense of your current financial situation (income\\, expenses\\, debts\\, sav\r\n ings)\\, your questions\\, and your financial concerns. By the end of these t\r\n wo hours\\, you'll have a clear\\, personalized plan and the confidence to ex\r\n ecute it.\\n\\nIntensity Level: Mild intensity\\n\\nMultiple topics are covered\r\n  at a steady pace\\, with in-class activities requiring some preparation. So\r\n me out-of-class work is required\\, and regular in-class participation is ex\r\n pected. Students will develop a moderate level of skill-building during the\r\n  course.Facilitated by: \\n\\nAnnamaria Lusardi\\, senior fellow\\, Stanford In\r\n stitute for Economic Policy ResearchAngela Rensae Amarillas\\, student servi\r\n cesDetails: \\n\\nWhen: May 5 and 7 (Tuesday and Thursday)\\, 4-6PM\\n\\nOpen to\r\n  enrolled graduate students at any stage in any discipline or degree progra\r\n m. Postdocs will be accepted if space is available\\, but priority is given \r\n to graduate students.\\n\\nA Deep Dive - Financial Decision-Making for Grad S\r\n tudents is a two-part workshop. Session dates are Tuesday and Thursday May \r\n 5 and 7 from 4-6PM. Space is limited. Due to the workshop’s interactive for\r\n mat\\, full participation in both sessions are required. Dinner will be serv\r\n ed. \\n\\nIf you are accepted to this workshop\\, you must confirm your place \r\n by submitting a Student Participation Fee Agreement\\, which authorizes VPGE\r\n  to charge $50 to your Stanford bill – only if you do not fully participate\r\n  in the event. You will receive a link to the Agreement and instructions if\r\n  you are offered a place.\\n\\nApplication deadline: Tuesday\\, April 28th @11\r\n :59PM PT.\\n\\nApply here\r\nDTEND:20260506T010000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T230000Z\r\nLOCATION:EVGR 144b\r\nSEQUENCE:0\r\nSUMMARY:A Deep Dive - Financial Decision-Making for Grad Students\r\nUID:tag:localist.com\\,2008:EventInstance_52198700236971\r\nURL:https://events.stanford.edu/event/a-deep-dive-financial-decision-making\r\n -for-grad-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Speakers: Carolyn Rodriguez and John Sunwoo\r\nDTEND:20260506T003000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260505T233000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Promotion in the NTL\r\nUID:tag:localist.com\\,2008:EventInstance_51136490145367\r\nURL:https://events.stanford.edu/event/promotion-in-the-ntl\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260506T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663086009\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260506T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622321042\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260506\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294435298\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260506\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355568663\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260507T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910877956\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260506T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105029252\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Change is an inevitable part of life\\, manifesting in various f\r\n orms—from the gentle transitions of the seasons to unforeseen events that c\r\n hallenge our expectations. While some changes are welcomed\\, others can evo\r\n ke a whirlwind of emotions\\, stirring resistance and anxiety.\\n\\nIn this en\r\n gaging noontime webinar\\, we will explore effective tools and strategies de\r\n signed to empower you to take charge of your response to change. By incorpo\r\n rating mindfulness and compassion into your approach\\, you will learn how t\r\n o confront negative thought patterns and harness the principles of change m\r\n anagement to navigate uncertainty with intention.\\n\\nThis session will prov\r\n ide you with practical strategies to better regulate your thoughts and feel\r\n ings in the face of change\\, alongside straightforward mindfulness techniqu\r\n es that enable you to reclaim control over your reactions. By fostering an \r\n attitude of acceptance and enhancing your awareness\\, you will become more \r\n adaptable to life’s shifting circumstances.\\n\\nBy the end of this webinar\\,\r\n  you will be equipped with actionable insights and practical tools to not o\r\n nly manage life's transitions\\, but to thrive in the midst of change. Join \r\n us to cultivate resilience and embrace the journey ahead with confidence.\\n\r\n \\nThis class will be recorded and a one-week link to the recording will be \r\n shared with all registered participants. To receive incentive points\\, atte\r\n nd at least 80% of the live session or listen to the entire recording withi\r\n n one week. Request disability accommodations and access info.\\n\\nClass det\r\n ails are subject to change.\r\nDTEND:20260506T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Navigating Change with Mindfulness\r\nUID:tag:localist.com\\,2008:EventInstance_52220232225681\r\nURL:https://events.stanford.edu/event/navigating-change-with-mindfulness\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Session Description\\n“As a species\\, humans are not alone\\; yet\r\n  our history has often been written as though we were.” - Historian Sandra \r\n Swart\\n\\nThis observation raises an important question: How can scholars de\r\n velop a comprehensive and inclusive interpretation of the past that highlig\r\n hts the shared experiences and contributions of both animals and humans? In\r\n  addressing this question\\, I propose a more-than-human history that examin\r\n es the complex and often conflictual relationship between humans\\, specific\r\n ally the Nzulezo riverine community in Ghana\\, West Africa\\, and animals\\, \r\n particularly crocodiles. By utilizing interdisciplinary approaches from his\r\n tory\\, environmental studies\\, and ethology\\, this study offers new perspec\r\n tives into the historical interactions among humans\\, animals\\, and bodies \r\n of water in Africa\\, demonstrating how the Nzulezo and other African commun\r\n ities have coexisted with water and crocodiles over time.\\n\\nRSVP to attend\r\n \\n\\nSpeaker Bio:\\nNana Kesse is a historian of Africa at Clark University a\r\n nd a Fellow of the National Endowment for the Humanities (NEH). He speciali\r\n zes in the histories of water and the environment\\, slavery and the Atlanti\r\n c slave trade\\, as well as the social and cultural history of West Africa. \r\n His research covers the last four centuries\\, focusing on the intricate rel\r\n ationships between humans\\, animals\\, and bodies of water in West Africa an\r\n d how these connections have shaped the history of the region. Kesse’s curr\r\n ent book project\\, Living with Water: Aqua-culture\\, Environment\\, and Slav\r\n ery \\nin West Africa\\, examines the social and environmental history of Nzu\r\n lezo\\, the only stilt-house community on water in Ghana and one of the few \r\n in Africa with a history dating back to the seventeenth century. His other \r\n scholarly works on the transatlantic slave trade and the African environmen\r\n t have appeared in peer-reviewed journals and other popular venues\\, includ\r\n ing the International Journal of African Historical Studies and the global \r\n history podcast \\n“Fascinating People\\, Fascinating Places.” These projects\r\n  have generously been funded by competitive grants and fellowships\\, includ\r\n ing the NEH Fellowships\\, Woodrow Wilson Fellowship\\, Fulbright-Hays Fellow\r\n ship\\, and the Otumfuo Fellowship\\, awarded by the King of the Asante Kingd\r\n om in Ghana.\r\nDTEND:20260506T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T190000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, Room 123\r\nSEQUENCE:0\r\nSUMMARY:Swimming with Crocodiles: Nzulezo and the Human-Animal Entanglement\r\n  in Africa - Nana Kesse\r\nUID:tag:localist.com\\,2008:EventInstance_52128674767087\r\nURL:https://events.stanford.edu/event/swimming-with-crocodiles-nzulezo-and-\r\n the-human-animal-entanglement-in-africa-nana-kesse\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260506T201500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51958777363818\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Egan and Yang Labs\r\n \\, TBD\\, \"TBA\"/TBD\\, \"TBA\"\r\nDTEND:20260506T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Egan and Yang Labs\\, T\r\n BD\\, \"TBA\"/TBD\\, \"TBA\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144515970523\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-egan-and-yang-labs-tbd-tbatbd-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260507T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743792609\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant person in your life\\, or are experiencing feelings of grief in a \r\n time of uncertainty\\, this is an opportunity to share your experiences\\, su\r\n ggestions\\, and concerns with others in a safe and supportive environment.\\\r\n n\\nStudent Grief Gatherings are held 3x/quarter and are facilitated by staf\r\n f from ORSL\\, Well-Being\\, CAPS and GLO. This event is free and open only t\r\n o Stanford students.\r\nDTEND:20260507T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260506T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden\r\nSEQUENCE:0\r\nSUMMARY:Student Grief & Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_52093114048638\r\nURL:https://events.stanford.edu/event/student-grief-gathering\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260507T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379388618\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThe Stanford Blood and Marrow Transplantation and Cellu\r\n lar Therapy Symposium is a two-day hybrid educational activity designed to \r\n address the evolving landscape of hematopoietic cell transplantation (HCT) \r\n and cellular therapies. As the number of eligible patients and range of dis\r\n ease indications continue to expand\\, and as supportive care requirements g\r\n row increasingly complex\\, there is a critical need for ongoing education a\r\n mong healthcare providers who refer\\, manage\\, and care for these patients \r\n before\\, during\\, and after therapy. This symposium will provide a comprehe\r\n nsive review of state-of-the-art transplant and cellular therapy approaches\r\n  for hematologic malignancies and select non-hematologic diseases. Faculty \r\n experts will highlight advances in treatment strategies\\, emerging research\r\n \\, and best practices in supportive care\\, equipping participants with the \r\n knowledge and tools to optimize patient outcomes across the continuum of ca\r\n re.\\n\\nRegistrationRegistration fee includes course materials\\, certificate\r\n  of participation\\, breakfast and lunch.  The symposium is a hybrid activit\r\n y\\; you can attend in person or virtually.  Please select the corresponding\r\n  registration type when registering.Early Bird Rate: Physicians (in person)\r\n  - $200 Physicians (virtual) - $200 Nurses/Allied Health Professionals (in \r\n person) - $150Nurses/Allied Health Professionals (virtual) - $150\\nStanford\r\n  RN - $50\\nIndustry (in person) - $350\\nIndustry (virtual) - $350After 04/0\r\n 7/2026Physicians (in person) - $300 Physicians (virtual) - $300Nurses/Allie\r\n d Health Professionals (in person) - $250 Nurses/Allied Health Professional\r\n s (virtual) - $250\\nStanford RN - $50\\nIndustry (in person) - $350\\nIndustr\r\n y (virtual) - $350\\n\\nSTAP-eligible employees can use STAP funds towards th\r\n e registration fees for this activity.  Complete the STAP Reimbursement Req\r\n uest Form and submit to your department administrator.Your email address is\r\n  used for critical information\\, including registration confirmation\\, eval\r\n uation\\, and certificate. Be sure to include an email address that you chec\r\n k frequently. \\n\\nCreditsAMA PRA Category 1 Credits™ (13.00 hours)\\, AAPA C\r\n ategory 1 CME credits (13.00 hours)\\, ABIM MOC Part 2 (13.00 hours)\\, ACPE \r\n Contact Hours (13.00 hours)\\, ADA CERP Continuing Education Credits (13.00 \r\n hours)\\, ANCC Contact Hours (13.00 hours)\\, CA BRN - California Board of Re\r\n gistered Nurses Contact Hours (13.00 hours)\\, Non-Physician Participation C\r\n redit (13.00 hours)\\n\\nTarget AudienceSpecialties - Hematology\\, OncologyPr\r\n ofessions - Advance Practice Nurse (APN)\\, Dietetic Technician Registered (\r\n DTR)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Pharmacist\\, Physician\\, P\r\n hysician Associate\\, Registered Dietitian\\, Registered Nurse (RN)\\, Social \r\n Worker\\n ObjectivesAt the conclusion of this activity\\, learners should be \r\n able to:\\n1. Explore the current and emerging data on the efficacy and safe\r\n ty of cellular therapy\\, T cell redirecting therapies like bispecific antib\r\n odies\\, gene therapy \\, autologous and allogenic stem cell transplant in th\r\n e treatment of hematologic malignancies including leukemia\\, lymphoma and m\r\n yeloma. \\n2. Examine the role of cellular therapies in the treatment of sol\r\n id tumors and non-cancer indications\\n3. Examine correlates of efficacy and\r\n  toxicity\\, including predictors of long-term response and functional cure \r\n in hematologic malignancies with cellular therapies\\, T cell direction ther\r\n apies (bispecific antibodies) and transplant.\\n\\nAccreditationIn support of\r\n  improving patient care\\, Stanford Medicine is jointly accredited by the Ac\r\n creditation Council for Continuing Medical Education (ACCME)\\, the Accredit\r\n ation Council for Pharmacy Education (ACPE)\\, and the American Nurses Crede\r\n ntialing Center (ANCC)\\, to provide continuing education for the healthcare\r\n  team. \\n\\nCredit Designation \\nAmerican Medical Association (AMA) \\nStanfo\r\n rd Medicine designates this Live Activity for a maximum of 13.00 AMA PRA Ca\r\n tegory 1 CreditsTM.  Physicians should claim only the credit commensurate w\r\n ith the extent of their participation in the activity. \\n\\nAmerican Nurses \r\n Credentialing Center (ANCC) \\nStanford Medicine designates this Live Activi\r\n ty for a maximum of 13 ANCC contact hours.\\n  \\nCalifornia Board of Registe\r\n red Nursing (CA BRN)\\nStanford Medicine Provider approved by the California\r\n  Board of Registered Nursing\\, Provider Number 17874\\, for 13 contact hours\r\n .\\n\\nCommission on Dietetic Registration (CDR)\\nCompletion of this RD/DTR p\r\n rofession-specific or IPCE activity awards CPEUs (One IPCE credit = One CPE\r\n U).\\nIf the activity is dietetics-related but not targeted to RDs or DTRs\\,\r\n  CPEUs may be claimed which are commensurate with participation in contact \r\n hours (One 60 minute hour = 1CPEU)\\nRD’s and DTRs are to select activity ty\r\n pe 102 in their Activity Log. Sphere and Competency selection is at the lea\r\n rner’s discretion.\\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStan\r\n ford Medicine Provider approved by the California Board of Registered Nursi\r\n ng\\, Provider Number 17874\\, for 13 contact hours.\\n\\nAccreditation Council\r\n  of Pharmacy Education (ACPE) \\nStanford Medicine designates this knowledge\r\n -based activity for a maximum of 13 hours. Credit will be provided to NABP \r\n CPE Monitor within 60 days after the activity completion. Pharmacist UAN: J\r\n A0000751-0000-26-002-L01-P.\\n\\nAmerican Academy of PAs (AAPA)\\nStanford Med\r\n icine has been authorized by the American Academy of PAs (AAPA) to award AA\r\n PA Category 1 CME credit for activities planned in accordance with AAPA CME\r\n  Criteria. This live activity is designated for 13 AAPA Category 1 CME cred\r\n its. PAs should only claim credit commensurate with the extent of their par\r\n ticipation.\\n\\nAmerican Board of Internal Medicine MOC Credit \\nSuccessful \r\n completion of this CME activity\\, which includes participation in the evalu\r\n ation component\\, enables the participant to earn up to 13.00 MOC points in\r\n  the American Board of Internal Medicine’s (ABIM) Maintenance of Certificat\r\n ion (MOC) program. It is the CME activity provider’s responsibility to subm\r\n it participant completion information to ACCME for the purpose of granting \r\n ABIM MOC credit.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260507\r\nLOCATION:Alumni Center\\, Palo Alto\\, CA\r\nSEQUENCE:0\r\nSUMMARY:2026 Stanford Blood and Marrow Transplantation and Cellular Therapy\r\n  Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_51957735080431\r\nURL:https://events.stanford.edu/event/2026-stanford-blood-and-marrow-transp\r\n lantation-and-cellular-therapy-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260507\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294436323\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260507\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355570712\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260508T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910878981\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Rohit De is an Associate Professor of History at Yale Universit\r\n y and a historian of South Asia and the British common law world. His most \r\n recent book Assembling India's Constitution: A New Democratic History (2025\r\n )\\, co-authored with Ornit Shani examines how thousands of ordinary Indians\r\n \\, read\\, deliberated\\, debated and substantially engaged with the anticipa\r\n ted constitution at the time of its writing . He is the author of A People'\r\n s Constitution:  The Everyday Law in the Indian Republic (2018) which won t\r\n he Hurst Prize from the Law and Society Association. Supported by a Carnegi\r\n e Fellowship he is currently working on a history of human rights and civil\r\n  liberties lawyering across the decolonizing world. Rohit completed his PhD\r\n  from Princeton University and has law degrees from Yale Law School and the\r\n  National Law School of India.\r\nDTEND:20260507T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T190000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Lawyering in Lawless Times: Insurgent Strategies and Civil Rights i\r\n n Sri Lanka in the 1970s\r\nUID:tag:localist.com\\,2008:EventInstance_50702213109052\r\nURL:https://events.stanford.edu/event/rohit-de-lecture\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260507T191500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762191158\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:This class is co-sponsored by the Stanford WorkLife Office.\\n\\n\r\n Your baby’s sleeping patterns can feel mysterious\\, unpredictable\\, and exh\r\n austing. From short sleep cycles to frequent night wakings\\, many parents a\r\n re left wondering what’s normal and whether they’re doing something wrong. \r\n Understanding how infant sleep develops can bring clarity\\, confidence\\, an\r\n d much-needed relief during the first year.\\n\\nIn this free webinar\\, we’ll\r\n  explore how babies sleep from birth through 12 months\\, including sleep cy\r\n cles\\, developmental changes\\, and common patterns you can expect along the\r\n  way. Rather than a one-size-fits-all approach\\, we’ll review a range of ev\r\n idence-based sleep principles so you can choose strategies that align with \r\n your baby’s needs and your family’s values.\\n\\nYou’ll leave with realistic \r\n expectations\\, a clearer understanding of infant sleep\\, and a flexible too\r\n lkit to help you navigate the newborn stage and beyond with greater ease an\r\n d confidence.\\n\\nThis class will be recorded and a one-week link to the rec\r\n ording will be shared with all registered participants. To receive incentiv\r\n e points\\, attend at least 80% of the live session or listen to the entire \r\n recording within one week.  Request disability accommodations and access in\r\n fo.\\n\\nClass details are subject to change.\r\nDTEND:20260507T200000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Sweet Dreams\r\nUID:tag:localist.com\\,2008:EventInstance_52220232270743\r\nURL:https://events.stanford.edu/event/sweet-dreams\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Special Seminar - Boothroyd Lecturesh\r\n ip: Jeroen Saeij \"Using CRISPR to dissect Toxoplasma’s arsenal for host man\r\n ipulation\"\r\nDTEND:20260507T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T193000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, LK101/102\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Special Seminar - Boothroyd Lectureship: \r\n Jeroen Saeij\\, \"Using CRISPR to dissect Toxoplasma’s arsenal for host manip\r\n ulation\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144531282921\r\nURL:https://events.stanford.edu/event/microbiology-immunology-special-semin\r\n ar-boothroyd-lectureship-jeroen-saeij-using-crispr-to-dissect-toxoplasmas-a\r\n rsenal-for-host-manipulation\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260507T194500Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794488606\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260507T220000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491628966\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260508T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743792610\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDTEND:20260507T213000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Environmental Behavioral Sciences Seminar with Arun Agrawal\r\nUID:tag:localist.com\\,2008:EventInstance_50710655767301\r\nURL:https://events.stanford.edu/event/environmental-behavioral-sciences-sem\r\n inar-8212\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Learn about how stress and anxiety show up in your body\\, emoti\r\n ons\\, thoughts and behaviors\\, and gain skills to lower anxiety in each are\r\n a. Increase your ability to manage anxious thoughts and develop skills to r\r\n ecognize the role of systems of oppression and conditioning in anxiety.\\n\\n\r\n You will create an individualized plan for recognizing and working with str\r\n ess and anxiety during this workshop.\\n\\nMultiple dates and times available\r\n  to attend this 2 hour workshop.Multiple CAPS therapists collaborate to pro\r\n vide these workshops.All enrolled students are eligible to participate in C\r\n APS groups and workshops. Connecting with CAPS is required to join this gro\r\n up. Please call 650.723.3785 during business hours (8:30 a.m. - 5:00 p.m. w\r\n eekdays) to connect and meet with a CAPS therapist\\, or message your therap\r\n ist/contact person at CAPS\\, to determine if this workshop is right for you\r\n \\, and be added to the workshop meeting that works best for your schedule. \r\n Workshops are in person.Access Anxiety Toolbox Workshop 2025-26 slides here\r\n .Anxiety Toolbox Dates\\n\\nFriday\\, April 17\\, 2026 from 1:00 p.m. - 3:00 p.\r\n m. Wednesday\\, April 29\\, 2026 from 2:00 p.m. - 4:00 p.m. Thursday\\, May 7\\\r\n , 2026 from 2:30 p.m. - 4:30 p.m. Wednesday\\, May 13\\, 2026 from 2:30 p.m.-\r\n 4:30 p.m. Tuesday\\, May 19\\, 2026 from 2:30 p.m.-4:30 p.m.\r\nDTEND:20260507T233000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T213000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\\, Ed Center\r\nSEQUENCE:0\r\nSUMMARY:Anxiety Toolbox\r\nUID:tag:localist.com\\,2008:EventInstance_52208020163881\r\nURL:https://events.stanford.edu/event/copy-of-anxiety-toolbox-6726\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:The financial landscape has never been more complex\\, but the r\r\n ight knowledge and tools can transform your financial future. In this two-s\r\n ession deep dive\\, Professor Annamaria Lusardi\\, one of the world's leading\r\n  experts on financial literacy\\, will guide you through evidence-based stra\r\n tegies for smart saving\\, investing fundamentals\\, debt management\\, and ri\r\n sk management. Then\\, in a hands-on \"Get $tuff Done\" session\\, you'll trans\r\n late these concepts into action by creating your own personalized financial\r\n  plan with Angela Amarillas\\, director of Stanford’s financial wellness pro\r\n gram called Mind Over Money. Over the two sessions\\, you'll identify your t\r\n op financial priorities\\, map out concrete next steps\\, and leave with the \r\n tools and confidence to execute your plan. Whether you're navigating studen\r\n t loans\\, starting to invest\\, building emergency savings\\, or planning for\r\n  post-graduation life\\, you'll gain both the foundational knowledge and the\r\n  actionable roadmap you need to take care of your financial life while at S\r\n tanford and beyond.\\n\\nTuesday\\, May 5\\, 4-6pm — Session 1: Foundations of \r\n Financial Decision-Making\\nIn this intensive two-hour session\\, Professor L\r\n usardi will draw on years of rigorous research to deliver evidence-based st\r\n rategies for navigating today's financial choices. You will learn:\\n\\nSmart\r\n  saving strategies: How to build savings habits that actually work and crea\r\n te financial buffers for life's uncertaintiesInvesting fundamentals: Demyst\r\n ifying the basics of growing wealth over time\\, from compound interest to a\r\n sset allocationDebt management: Understanding when debt helps or hurts you\\\r\n , and strategies for managing student loans and other obligationsRisk manag\r\n ement: Essential strategies for protecting yourself and your assets against\r\n  financial shocksThis session will equip you not only to make better financ\r\n ial choices yourself\\, but also to share these critical lessons with family\r\n  members and others in your life. Come ready to engage\\, ask questions\\, an\r\n d build the financial foundation that will serve you throughout your time a\r\n t Stanford and beyond.\\n\\nThursday\\, May 7\\, 4-6pm — Session 2: Your Person\r\n al Financial Action Plan\\nBuilding on the foundations from Session 1\\, this\r\n  hands-on\\, two-hour workshop will help you translate financial knowledge i\r\n nto concrete action. Led by Angela Amarillas\\, this \"Get $tuff Done\" sessio\r\n n is designed to move you from understanding financial concepts to implemen\r\n ting them in your own life.\\n\\nWe'll tackle the common obstacles that keep \r\n people from acting on good financial intentions and create accountability s\r\n tructures to ensure that you will follow through. Whether it's managing stu\r\n dent loans\\, starting to invest\\, building an emergency fund\\, or planning \r\n for major life transitions\\, you'll leave knowing exactly where to focus yo\r\n ur energy first.\\n\\nThis is a working session—bring your laptop\\, a general\r\n  sense of your current financial situation (income\\, expenses\\, debts\\, sav\r\n ings)\\, your questions\\, and your financial concerns. By the end of these t\r\n wo hours\\, you'll have a clear\\, personalized plan and the confidence to ex\r\n ecute it.\\n\\nIntensity Level: Mild intensity\\n\\nMultiple topics are covered\r\n  at a steady pace\\, with in-class activities requiring some preparation. So\r\n me out-of-class work is required\\, and regular in-class participation is ex\r\n pected. Students will develop a moderate level of skill-building during the\r\n  course.Facilitated by: \\n\\nAnnamaria Lusardi\\, senior fellow\\, Stanford In\r\n stitute for Economic Policy ResearchAngela Rensae Amarillas\\, student servi\r\n cesDetails: \\n\\nWhen: May 5 and 7 (Tuesday and Thursday)\\, 4-6PM\\n\\nOpen to\r\n  enrolled graduate students at any stage in any discipline or degree progra\r\n m. Postdocs will be accepted if space is available\\, but priority is given \r\n to graduate students.\\n\\nA Deep Dive - Financial Decision-Making for Grad S\r\n tudents is a two-part workshop. Session dates are Tuesday and Thursday May \r\n 5 and 7 from 4-6PM. Space is limited. Due to the workshop’s interactive for\r\n mat\\, full participation in both sessions are required. Dinner will be serv\r\n ed. \\n\\nIf you are accepted to this workshop\\, you must confirm your place \r\n by submitting a Student Participation Fee Agreement\\, which authorizes VPGE\r\n  to charge $50 to your Stanford bill – only if you do not fully participate\r\n  in the event. You will receive a link to the Agreement and instructions if\r\n  you are offered a place.\\n\\nApplication deadline: Tuesday\\, April 28th @11\r\n :59PM PT.\\n\\nApply here\r\nDTEND:20260508T010000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260507T230000Z\r\nLOCATION:EVGR 144b\r\nSEQUENCE:0\r\nSUMMARY:A Deep Dive - Financial Decision-Making for Grad Students\r\nUID:tag:localist.com\\,2008:EventInstance_52198700236972\r\nURL:https://events.stanford.edu/event/a-deep-dive-financial-decision-making\r\n -for-grad-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260508T013000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404974079\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:\"How we are seen no doubt changes how we see ourselves.\"\\n- Glo\r\n ria Steinem\\n\\nJoin us for a screening of three short documentaries by Jan \r\n Krawitz\\, followed by a discussion with the director.\\n\\nThis event is co-s\r\n ponsored by the Department of Art & Art History and the Clayman Institute f\r\n or Gender Research.\\n\\nAbout the Films\\nMIRROR MIRROR\\, 17 minutes\\nThis fi\r\n lm provocatively explores the relationship between female body image and th\r\n e quest for an elusive ideal.\\n\\nIN HARM’S WAY\\, 27 minutes\\nA personal mem\r\n oir that questions the fragile myths instilled in children growing up in th\r\n e Cold War era.\\n\\nNICE GIRLS DON'T ASK\\, 17 minutes\\nOffering a cautionary\r\n  tale in the current political climate\\, the film casts an incisive lens on\r\n  the “rules for living” embodied in archival social guidance films.\\n\\nAbou\r\n t the Filmmaker\\nJan Krawitz is Professor Emerita in the Stanford Departmen\r\n t of Art & Art History. Her documentaries have screened at festivals in the\r\n  U.S. and abroad including Sundance\\, The New York Film Festival\\, SXSW\\, A\r\n FI Docs\\, Edinburgh\\, Visions du Réel\\, Full Frame\\, and the Krakow Film Fe\r\n stival. Six of her films received a national broadcast on PBS (Independent \r\n Lens\\, P.O.V.\\, America ReFramed) and Big Enough was broadcast internationa\r\n lly in eighteen countries. She has had artist residencies at Yaddo\\, Docs i\r\n n Progress (Washington\\, D.C.)\\, and the Bogliasco Foundation in Italy. Jan\r\n  was a fellow at the Radcliffe Institute for Advanced Study at Harvard and \r\n a recent Fulbright Scholar in Austria.\\n\\nVISITOR INFORMATION\\nOshman Hall \r\n is located within the McMurtry Building on Stanford campus at 355 Roth Way.\r\n  Visitor parking is available in designated areas and is free after 4pm on \r\n weekdays. Alternatively\\, take the Caltrain to Palo Alto Transit Center and\r\n  hop on the free Stanford Marguerite Shuttle. If you need a disability-rela\r\n ted accommodation or wheelchair access information\\, please contact Juliann\r\n e White at jgwhite@stanford.edu. This event is open to Stanford affiliates \r\n and the general public. Admission is free.\r\nDTEND:20260508T023000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T003000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:How We Are Seen… | Three Short Documentaries by Jan Krawitz with Di\r\n scussion to Follow\r\nUID:tag:localist.com\\,2008:EventInstance_52056228295166\r\nURL:https://events.stanford.edu/event/how-we-are-seen-three-short-documenta\r\n ries-by-jan-krawitz-director-discussion\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join us for a conversation between artists and collaborators Mi\r\n ljohn Ruperto and Candice Lin\\, moderated by Jessica Riskin\\, Frances and C\r\n harles Field Professor of History at Stanford University. This program is p\r\n resented in conjunction with the exhibition Animal\\, Vegetable\\, nor Minera\r\n l: Works by Miljohn Ruperto\\, on view at the Cantor from March 12 through S\r\n eptember 14\\, 2026.\\n\\nThrough working collaboratively with artists\\, schol\r\n ars\\, scientists\\, and technologists\\, Ruperto champions interdependence an\r\n d cooperation—not isolated genius—as vital and innate to creativity and sch\r\n olarship. Animal\\, Vegetable\\, nor Mineral features two works by Ruperto an\r\n d Lin from their Putrefaction series (2024) which challenge traditional mod\r\n es of classifying and representing the natural world.\\n\\nRuperto and Lin sh\r\n are interests in cycles of transformation\\, decomposition\\, rot\\, and anima\r\n cy. Among their many intersecting points of inquiry are 16th century cerami\r\n cist and natural scientist Bernard Palissy\\, who proposed the early underst\r\n anding of fossils being the result of mineral processes enacted on once liv\r\n ing organisms\\; contemporary media theorist Esther Leslie and the idea of t\r\n he digital as an expression of the mineral\\; and 19th century microbiologis\r\n t Louis Pasteur and the history of bacteria\\, virology\\, and hygiene.\\n\\nTh\r\n eir resulting artworks\\, utilizing photogrammetry and 3D printed in clay\\, \r\n unsettle what we think we know about nature. Ruperto and Lin will be joined\r\n  in conversation with Professor Riskin\\, whose new book The Power of Life t\r\n races the invention of biology through early 19th century French naturalist\r\n  Jean-Baptiste Lamarck and asks: What is a living being?\\n\\nAll public prog\r\n rams at the Cantor Arts Center are always free! Space for this program is l\r\n imited\\; advance registration is recommended. Those who have registered wil\r\n l have priority for seating.\\n\\nRSVP HERE\\n\\nParticipant Bios\\n\\nMiIjohn Ru\r\n perto’s (b. 1971\\, Manila\\, Philippines) distinctive multimedia practice co\r\n nsiders the elusive nature of knowledge and strives to unsettle our knowled\r\n ge of nature. Working across film\\, video\\, digital animation\\, performance\r\n \\, photography\\, and more\\, Ruperto interrogates the way we conceptualize\\,\r\n  categorize\\, and represent nature to understand our place in the world\\, c\r\n hronicle its history\\, and imagine its future. Ruperto received his M.F.A. \r\n from Yale University\\, and his B.A. in Art Practice from University of Cali\r\n fornia\\, Berkeley. Ruperto has exhibited work internationally at Foto Arsen\r\n al Wien\\, Vienna (2025)\\; ICA LA\\, Los Angeles (2024)\\; MEP\\, Paris (2024)\\\r\n ; Jakarta Biennale (2021)\\; Singapore Biennale (2019)\\; Hammer Museum\\, Los\r\n  Angeles (2018\\, 2012)\\; Schinkel Pavillion\\, Berlin (2018)\\; REDCAT\\, Los \r\n Angeles (2017)\\; Kadist\\, San Francisco (2017)\\; Whitney Biennial (2014)\\; \r\n among others. In 2019\\, he participated in the Acts of Life critical resear\r\n ch residency at NTU CCA Singapore and MCAD Manila commissioned by the Goeth\r\n e-lnstitut. His work is in the collections of Cantor Arts Center\\, MoMA NY\\\r\n , Hammer Museum\\, Whitney Museum of American Art\\, and Kadist Art Foundatio\r\n n.\\n\\nCandice Lin is an interdisciplinary artist who works with installatio\r\n n\\, drawing\\, video\\, and living materials and processes\\, such as mold\\, m\r\n ushrooms\\, bacteria\\, fermentation\\, and stains. Her work deals with the po\r\n litics of representation and issues of race\\, gender\\, and sexuality throug\r\n h histories of colonialism and diaspora. Lin has had recent solo exhibition\r\n s at Whitechapel Gallery\\, London\\; Jameel Arts Center\\, Dubai\\; Talbot Ric\r\n e Gallery\\, Edinburgh\\, Scotland\\; Canal Projects\\, New York\\; Spike Island\r\n \\, Bristol\\, UK\\; the Carpenter Center for the Visual Arts\\, Cambridge\\, Wa\r\n lker Art Center\\, Minneapolis\\; Guangdong Times Museum\\, Guangzhou\\, China\\\r\n ; and Govett Brewster Art Gallery\\, New Plymouth\\, New Zealand. Lin’s work \r\n was included in the 59th Venice Biennale\\, The Milk of Dreams\\, Prospect.5 \r\n Triennial Yesterday We Said Tomorrow\\, and both the 13th and 14th Gwangju B\r\n iennales. She is the recipient of the 2024 Ruth Award\\, the 2023 Arnoldo Po\r\n modoro Sculpture Prize\\, a 2022 Gold Art Prize\\, and a 2019 Joan Mitchell F\r\n oundation Award\\, among numerous other recognitions. Her work can be found \r\n in the permanent collections of the Los Angeles County Museum of Art\\, the \r\n Museum of Contemporary Art Los Angeles\\, the Solomon R. Guggenheim Museum\\,\r\n  and the Walker Art Center. Lin lives and works in Los Angeles. She is an A\r\n ssociate Professor of Art at the University of California Los Angeles.\\n\\nJ\r\n essica Riskin is Frances and Charles Field Professor of History at Stanford\r\n  University where she teaches modern European history and the history of sc\r\n ience. Her work examines the changing nature of scientific explanation\\, th\r\n e relations of science\\, culture and politics\\, and the history of theories\r\n  of life and mind. Her books include The Restless Clock: A History of the C\r\n enturies-Long Argument over What Makes Living Things Tick (2016)\\, which wa\r\n s awarded the 2021 Patrick Suppes Prize in the History of Science from the \r\n American Philosophical Society\\, and Science in the Age of Sensibility (200\r\n 2)\\, which received the American Historical Association's J. Russell Major \r\n prize for best book in French history. Her new book The Power of Life: The \r\n Invention of Biology and the Revolutionary Science of Jean-Baptiste Lamarck\r\n  is forthcoming from Penguin Riverhead in spring 2026. She is a regular con\r\n tributor to various publications including Aeon\\, the Los Angeles Review of\r\n  Books and the New York Review of Books.\\n\\nImage: Miljohn Ruperto and Cand\r\n ice Lin installation shot\\, Putrefaction: Candice Lin & Miljohn Ruperto\\, S\r\n eptember 13\\, 2024–November 1\\, 2024\\, Micki Meng Gallery. Courtesy of the \r\n artists and Micki Meng Gallery\\, San Francisco.\\n\\n________\\n\\nParking\\n\\nF\r\n ree visitor parking is available along Lomita Drive as well as on the first\r\n  floor of the Roth Way Garage Structure\\, located at the corner of Campus D\r\n rive West and Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. From the \r\n Palo Alto Caltrain station\\, the Cantor Arts Center is about a 20-minute wa\r\n lk or the free Marguerite shuttle will bring you to campus via the Y or X l\r\n ines.\\n\\nDisability parking is located along Lomita Drive near the main ent\r\n rance of the Cantor Arts Center. Additional disability parking is located o\r\n n Museum Way and in Parking Structure 1 (Roth Way & Campus Drive). Please c\r\n lick here to view the disability parking and access points.\\n\\nAccessibilit\r\n y Information or Requests\\n\\nCantor Arts Center at Stanford University is c\r\n ommitted to ensuring our programs are accessible to everyone. To request ac\r\n cess information and/or accommodations for this event\\, please complete thi\r\n s form at least one week prior to the event: museum.stanford.edu/access.\\n\\\r\n nFor questions\\, please contact disability.access@stanford.edu or Kwang-Mi \r\n Ro\\, kwangmi8@stanford.edu\\, (650) 723-3469.\\n\\nConnect with the Cantor Art\r\n s Center! Subscribe to our mailing list and follow us on Instagram.\r\nDTEND:20260508T023000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T010000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, The John L. Eastman\\, '61 Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Mijohn Ruperto & Candice Lin: Putrefaction\r\nUID:tag:localist.com\\,2008:EventInstance_51995567387586\r\nURL:https://events.stanford.edu/event/mijohn-ruperto-candice-lin-putrefacti\r\n on\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This lecture is a work of interpretive political history that c\r\n harts the Islamic Republic’s postrevolutionary trajectory through the organ\r\n izing prism of enmity. While most histories of modern Iran emphasize ideolo\r\n gy\\, religion\\, geopolitics\\, or authoritarianism\\, this talk argues that e\r\n nmity – both as a political practice and a psychological disposition – has \r\n functioned as the central axis around which the Islamic Republic’s internal\r\n  consolidation and external projection have revolved. From revolutionary fe\r\n rvor to institutionalized grievance\\, from foreign threat inflation to the \r\n suppression of domestic dissent\\, the politics of enmity animates the regim\r\n e’s symbolic vocabulary\\, policy decisions\\, and collective self-understand\r\n ing.\\n\\nHussein Banai is an Associate Professor of International Studies in\r\n  the Hamilton Lugar School of Global and International Studies at Indiana U\r\n niversity\\, Bloomington. He is the (co)author of several books on Iran’s po\r\n litical development and US-Iran relations\\, most recently Hidden Liberalism\r\n : Burdened Visions of Progress in Modern Iran (Cambridge\\, 2020) and Republ\r\n ics of Myth: National Narratives and US-Iran Conflict (Johns Hopkins\\, 2022\r\n ).\\n\\nStanford is committed to ensuring its facilities\\, programs and servi\r\n ces are accessible to everyone. To request access information and/or accomm\r\n odations for this event\\, please complete https://tinyurl.com/AccessStanfor\r\n d at the latest one week before the event.\r\nDTEND:20260508T030000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T013000Z\r\nLOCATION:In person at Stanford\r\nSEQUENCE:0\r\nSUMMARY:Enmity and Revolution in Iran\r\nUID:tag:localist.com\\,2008:EventInstance_51323299682924\r\nURL:https://events.stanford.edu/event/enmity-and-revolution-in-iran\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThe Stanford Blood and Marrow Transplantation and Cellu\r\n lar Therapy Symposium is a two-day hybrid educational activity designed to \r\n address the evolving landscape of hematopoietic cell transplantation (HCT) \r\n and cellular therapies. As the number of eligible patients and range of dis\r\n ease indications continue to expand\\, and as supportive care requirements g\r\n row increasingly complex\\, there is a critical need for ongoing education a\r\n mong healthcare providers who refer\\, manage\\, and care for these patients \r\n before\\, during\\, and after therapy. This symposium will provide a comprehe\r\n nsive review of state-of-the-art transplant and cellular therapy approaches\r\n  for hematologic malignancies and select non-hematologic diseases. Faculty \r\n experts will highlight advances in treatment strategies\\, emerging research\r\n \\, and best practices in supportive care\\, equipping participants with the \r\n knowledge and tools to optimize patient outcomes across the continuum of ca\r\n re.\\n\\nRegistrationRegistration fee includes course materials\\, certificate\r\n  of participation\\, breakfast and lunch.  The symposium is a hybrid activit\r\n y\\; you can attend in person or virtually.  Please select the corresponding\r\n  registration type when registering.Early Bird Rate: Physicians (in person)\r\n  - $200 Physicians (virtual) - $200 Nurses/Allied Health Professionals (in \r\n person) - $150Nurses/Allied Health Professionals (virtual) - $150\\nStanford\r\n  RN - $50\\nIndustry (in person) - $350\\nIndustry (virtual) - $350After 04/0\r\n 7/2026Physicians (in person) - $300 Physicians (virtual) - $300Nurses/Allie\r\n d Health Professionals (in person) - $250 Nurses/Allied Health Professional\r\n s (virtual) - $250\\nStanford RN - $50\\nIndustry (in person) - $350\\nIndustr\r\n y (virtual) - $350\\n\\nSTAP-eligible employees can use STAP funds towards th\r\n e registration fees for this activity.  Complete the STAP Reimbursement Req\r\n uest Form and submit to your department administrator.Your email address is\r\n  used for critical information\\, including registration confirmation\\, eval\r\n uation\\, and certificate. Be sure to include an email address that you chec\r\n k frequently. \\n\\nCreditsAMA PRA Category 1 Credits™ (13.00 hours)\\, AAPA C\r\n ategory 1 CME credits (13.00 hours)\\, ABIM MOC Part 2 (13.00 hours)\\, ACPE \r\n Contact Hours (13.00 hours)\\, ADA CERP Continuing Education Credits (13.00 \r\n hours)\\, ANCC Contact Hours (13.00 hours)\\, CA BRN - California Board of Re\r\n gistered Nurses Contact Hours (13.00 hours)\\, Non-Physician Participation C\r\n redit (13.00 hours)\\n\\nTarget AudienceSpecialties - Hematology\\, OncologyPr\r\n ofessions - Advance Practice Nurse (APN)\\, Dietetic Technician Registered (\r\n DTR)\\, Fellow/Resident\\, Non-Physician\\, Nurse\\, Pharmacist\\, Physician\\, P\r\n hysician Associate\\, Registered Dietitian\\, Registered Nurse (RN)\\, Social \r\n Worker\\n ObjectivesAt the conclusion of this activity\\, learners should be \r\n able to:\\n1. Explore the current and emerging data on the efficacy and safe\r\n ty of cellular therapy\\, T cell redirecting therapies like bispecific antib\r\n odies\\, gene therapy \\, autologous and allogenic stem cell transplant in th\r\n e treatment of hematologic malignancies including leukemia\\, lymphoma and m\r\n yeloma. \\n2. Examine the role of cellular therapies in the treatment of sol\r\n id tumors and non-cancer indications\\n3. Examine correlates of efficacy and\r\n  toxicity\\, including predictors of long-term response and functional cure \r\n in hematologic malignancies with cellular therapies\\, T cell direction ther\r\n apies (bispecific antibodies) and transplant.\\n\\nAccreditationIn support of\r\n  improving patient care\\, Stanford Medicine is jointly accredited by the Ac\r\n creditation Council for Continuing Medical Education (ACCME)\\, the Accredit\r\n ation Council for Pharmacy Education (ACPE)\\, and the American Nurses Crede\r\n ntialing Center (ANCC)\\, to provide continuing education for the healthcare\r\n  team. \\n\\nCredit Designation \\nAmerican Medical Association (AMA) \\nStanfo\r\n rd Medicine designates this Live Activity for a maximum of 13.00 AMA PRA Ca\r\n tegory 1 CreditsTM.  Physicians should claim only the credit commensurate w\r\n ith the extent of their participation in the activity. \\n\\nAmerican Nurses \r\n Credentialing Center (ANCC) \\nStanford Medicine designates this Live Activi\r\n ty for a maximum of 13 ANCC contact hours.\\n  \\nCalifornia Board of Registe\r\n red Nursing (CA BRN)\\nStanford Medicine Provider approved by the California\r\n  Board of Registered Nursing\\, Provider Number 17874\\, for 13 contact hours\r\n .\\n\\nCommission on Dietetic Registration (CDR)\\nCompletion of this RD/DTR p\r\n rofession-specific or IPCE activity awards CPEUs (One IPCE credit = One CPE\r\n U).\\nIf the activity is dietetics-related but not targeted to RDs or DTRs\\,\r\n  CPEUs may be claimed which are commensurate with participation in contact \r\n hours (One 60 minute hour = 1CPEU)\\nRD’s and DTRs are to select activity ty\r\n pe 102 in their Activity Log. Sphere and Competency selection is at the lea\r\n rner’s discretion.\\n\\nCalifornia Board of Registered Nursing (CA BRN)\\nStan\r\n ford Medicine Provider approved by the California Board of Registered Nursi\r\n ng\\, Provider Number 17874\\, for 13 contact hours.\\n\\nAccreditation Council\r\n  of Pharmacy Education (ACPE) \\nStanford Medicine designates this knowledge\r\n -based activity for a maximum of 13 hours. Credit will be provided to NABP \r\n CPE Monitor within 60 days after the activity completion. Pharmacist UAN: J\r\n A0000751-0000-26-002-L01-P.\\n\\nAmerican Academy of PAs (AAPA)\\nStanford Med\r\n icine has been authorized by the American Academy of PAs (AAPA) to award AA\r\n PA Category 1 CME credit for activities planned in accordance with AAPA CME\r\n  Criteria. This live activity is designated for 13 AAPA Category 1 CME cred\r\n its. PAs should only claim credit commensurate with the extent of their par\r\n ticipation.\\n\\nAmerican Board of Internal Medicine MOC Credit \\nSuccessful \r\n completion of this CME activity\\, which includes participation in the evalu\r\n ation component\\, enables the participant to earn up to 13.00 MOC points in\r\n  the American Board of Internal Medicine’s (ABIM) Maintenance of Certificat\r\n ion (MOC) program. It is the CME activity provider’s responsibility to subm\r\n it participant completion information to ACCME for the purpose of granting \r\n ABIM MOC credit.\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260508\r\nLOCATION:Alumni Center\\, Palo Alto\\, CA\r\nSEQUENCE:0\r\nSUMMARY:2026 Stanford Blood and Marrow Transplantation and Cellular Therapy\r\n  Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_51957735081456\r\nURL:https://events.stanford.edu/event/2026-stanford-blood-and-marrow-transp\r\n lantation-and-cellular-therapy-symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260508\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294438372\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260508\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355571737\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260509T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910880006\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260509T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817896207\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260508T190000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802460424\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260508T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699872458\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260508T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260508T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682871727\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260509\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294439397\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083913Z\r\nDTSTART;VALUE=DATE:20260509\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355572762\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260510T000000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260509T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910881031\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260509T183000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260509T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078580670\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260509T193000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260509T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699874507\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260509T203000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260509T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692006192\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260509T210000Z\r\nDTSTAMP:20260308T083913Z\r\nDTSTART:20260509T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682872752\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260509T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260509T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708357923\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260509T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260509T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668886034\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260510\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294440422\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260510\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355573787\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260511T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910882056\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260510T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809534841\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260510T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51969417155654\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260510T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692009265\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260510T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682873777\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:在博物馆导览员的带领下，探索坎特艺术中心的收藏品。导览员将为您介绍来自不同文化和不同时期的精选作品。\\n\\n欢迎您参与对话，分\r\n 享您对游览过程中所探讨主题的想法，或者按照自己的舒适程度参与互动。\\n\\n导览免费，但需提前登记。请通过以下链接选择并 RSVP 您希望参加的日期。\\\r\n n\\nFebruary 8\\, 2026: https://thethirdplace.is/event/February\\n\\nMarch 8\\, \r\n 2026: https://thethirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thet\r\n hirdplace.is/event/April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/M\r\n ay\\n\\nJune 14\\, 2026: https://thethirdplace.is/event/June\\n\\n______________\r\n _____________________________\\n\\nExplore the Cantor's collections with a mu\r\n seum engagement guide who will lead you through a selection of works from d\r\n ifferent cultures and time periods.\\n\\n Participants are welcomed to partic\r\n ipate in the conversation and provide their thoughts on themes explored thr\r\n oughout the tour but are also free to engage at their own comfort level. \\n\r\n \\n Tours are free of charge but require advance registration. Please select\r\n  and RSVP for your preferred date using the links below.\\n\\nFebruary 8\\, 20\r\n 26: https://thethirdplace.is/event/February\\n\\nMarch 8\\, 2026: https://thet\r\n hirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thethirdplace.is/event\r\n /April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/May\\n\\nJune 14\\, 20\r\n 26: https://thethirdplace.is/event/June\r\nDTEND:20260510T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Chinese \r\nUID:tag:localist.com\\,2008:EventInstance_51897285071947\r\nURL:https://events.stanford.edu/event/public-tour-cantor-highlights-chinese\r\n -language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260510T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708359972\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260510T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260510T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668887059\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a Leave of Absence to withdraw f\r\n rom the university with a partial refund.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260511\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Term Withdrawal Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472525485135\r\nURL:https://events.stanford.edu/event/spring-quarter-term-withdrawal-deadli\r\n ne-2874\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260511\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Term withdrawal deadline\\; last day to submit Leave of Absence to w\r\n ithdraw from the University with a partial refund (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464399151807\r\nURL:https://events.stanford.edu/event/term-withdrawal-deadline-last-day-to-\r\n submit-leave-of-absence-to-withdraw-from-the-university-with-a-partial-refu\r\n nd-5-pm-1032\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260512T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260511T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910883081\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Feed your brain as well as your body in this engaging and infor\r\n mative cooking demonstration focused on enhancing cognitive health through \r\n nutrition. This class will explore the science behind brain-supportive food\r\n s and how everyday cooking can become a powerful tool for protecting memory\r\n \\, improving focus\\, and promoting long-term brain health.\\n\\nYou will lear\r\n n how to prepare a variety of simple\\, delicious recipes for breakfast\\, lu\r\n nch\\, dinner\\, and snacks\\, all featuring ingredients shown to support brai\r\n n health\\, such as omega-3-rich fish\\, antioxidant-packed berries\\, leafy g\r\n reens\\, nuts\\, seeds\\, and spices known for their anti-inflammatory propert\r\n ies.\\n\\nThroughout the demonstration\\, you'll gain practical tips for incor\r\n porating these nutrient-dense ingredients into your daily routine\\, along w\r\n ith strategies for efficient meal planning and preparation\\, making it perf\r\n ect for even the busiest schedules. Whether you're cooking for yourself or \r\n your family\\, this class will leave you inspired to make choices that suppo\r\n rt mental clarity\\, memory\\, and overall well-being.\\n\\nRecipes with detail\r\n ed instructions\\, ingredients\\, and equipment lists will be provided after \r\n the class for you to recreate at home. Ingredient substitutions will be sug\r\n gested to accommodate most dietary restrictions.\\n\\nThis class will be reco\r\n rded and a one-week link to the recording will be shared with all registere\r\n d participants. To receive incentive points\\, attend at least 80% of the li\r\n ve session or listen to the entire recording within one week.  Request disa\r\n bility accommodations and access info.\\n\\nClass details are subject to chan\r\n ge.\r\nDTEND:20260511T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260511T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Nourishing Your Mind\r\nUID:tag:localist.com\\,2008:EventInstance_52220232322973\r\nURL:https://events.stanford.edu/event/nourishing-your-mind-9370\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Continue the conversation: Join the speaker for a complimentary\r\n  dinner in the Theory Center (second floor of the neurosciences building) a\r\n fter the seminar\\n\\nA neural manifold view of motor controlAbstract coming \r\n soon\\n\\n \\n\\nJuan GallegoImperial College London\\n\\nVisit Lab Website \\n\\nH\r\n osted by Liz Jun (Stanford Profile)\\n\\n \\n\\nAbout the Mind\\, Brain\\, Comput\r\n ation\\, and Technology (MBCT) Seminar SeriesThe Stanford Center for Mind\\, \r\n Brain\\, Computation and Technology (MBCT) Seminars explore ways in which co\r\n mputational and technical approaches are being used to advance the frontier\r\n s of neuroscience. \\n\\nThe series features speakers from other institutions\r\n \\, Stanford faculty\\, and senior training program trainees. Seminars occur \r\n about every other week\\, and are held at 4:00 pm on Mondays at the Cynthia \r\n Fry Gunn Rotunda - Stanford Neurosciences E-241. \\n\\nQuestions? Contact neu\r\n roscience@stanford.edu\\n\\nSign up to hear about all our upcoming events\r\nDTEND:20260512T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260511T230000Z\r\nLOCATION:Stanford Neurosciences Building | Gunn Rotunda (E241)\r\nSEQUENCE:0\r\nSUMMARY:MBCT Seminar: Juan Gallego - A neural manifold view of motor contro\r\n l\r\nUID:tag:localist.com\\,2008:EventInstance_50919729734029\r\nURL:https://events.stanford.edu/event/mbct-seminar-juan-gallego-a-neural-ma\r\n nifold-view-of-motor-control\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260512T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260512T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430661494\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260512\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Early Clinical Engagement (1:30 p.m. - 3:20 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_50383804425978\r\nURL:https://events.stanford.edu/event/early-clinical-engagement-130-pm-320-\r\n pm-7988\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260513T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260512T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910884106\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260513T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260512T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222791931\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Year-end Symposium and Research ShowcaseThe Knight Initiative f\r\n or Brain Resilience at Stanford invites the community to a symposium showca\r\n sing our award recipients’ trailblazing research on aging\\, neurodegenerati\r\n on\\, and brain resilience. It will include a Stanford neuroscience poster s\r\n ession and contest\\, as well as a reception. This is an in-person-only even\r\n t. \\n\\nRenowned experts in the field will share their latest research and h\r\n elp us better understand the remarkable resilience of the human brain. Spea\r\n ker details will be shared soon.\\n\\nRegistrationRegistration will open this\r\n  month.\\n\\nPoster Session and ContestWe encourage Stanford-affiliated atten\r\n dees from all neuroscience disciplines and career stages to present researc\r\n h\\, including early-stage unpublished work\\, at the symposium poster sessio\r\n n. \\n\\nKnight Initiative Awardees (PI & CoPI labs) and Brain Resilience Pos\r\n tdocs are encouraged to present a poster at the Symposium poster session. \\\r\n n\\nPoster submissions are located in the registration form.\r\nDTEND:20260513T010000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260512T193000Z\r\nLOCATION:Li Ka Shing Center (LKSC)\\, Paul Berg Hall\r\nSEQUENCE:0\r\nSUMMARY:Knight Initiative Spring 2026 Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_49990690822599\r\nURL:https://events.stanford.edu/event/knight-initiative-spring-2026-symposi\r\n um\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260512T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260512T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491629991\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Do you wonder what it means to be \"healthy as a horse?\" This 4-\r\n session class series uses the horse-human relationship to enhance our abili\r\n ty to breathe deeply and relax\\, to self-regulate our emotions\\, and to app\r\n ly other stress relief techniques.\\n\\nHorses help us develop these skills t\r\n hrough their magnificent strength\\, grace\\, and reading of body language. T\r\n hey teach us to use all our senses plus breath and movement to release stre\r\n ss\\, heal\\, and invigorate the body. Using techniques from mindfulness medi\r\n tation\\, tai chi\\, qigong\\, yoga\\, Reiki\\, and nature-based therapy\\, you w\r\n ill learn to ground\\, center\\, and relax by touching and breathing with hor\r\n ses. No horse experience needed. All activities are conducted on the ground\r\n . Meditation ride optional during the last class.\\n\\nThe Harvard Medical Sc\r\n hool Guide to Tai Chi cites medical studies showing the value of tai chi an\r\n d qigong on long-term stress reduction and improvement in cognitive functio\r\n n. Horse-assisted somatic or \"of the body\" learning\\, in combination with d\r\n aily practices offered in class\\, will help you establish a lasting and hea\r\n lthy integration of your physical movements and senses with your intellect\\\r\n , emotions\\, and intuition.\\n\\nThis is an in-person class and will not be r\r\n ecorded. Attendance requirement for incentive points - at least 80% of 3 of\r\n  the 4 sessions.  Request disability accommodations and access info.\\n\\nCla\r\n ss details are subject to change.\r\nDTEND:20260513T003000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260512T230000Z\r\nGEO:37.406145;-122.194733\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Equine-imity - Stress Reduction in the Company of Horses\r\nUID:tag:localist.com\\,2008:EventInstance_52220232390563\r\nURL:https://events.stanford.edu/event/equine-imity-stress-reduction-in-the-\r\n company-of-horses-8017\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260513T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663087034\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260513T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622322067\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260513\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294444521\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260513\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355575836\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260514T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910885131\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260513T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105030277\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260514T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222792956\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Andreas Baumler\\, \r\n \"Gut dysbiosis: ecological causes and consequence on human disease\"\r\nDTEND:20260513T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Andreas Baumler\\, \"Gut\r\n  dysbiosis: ecological causes and consequence on human disease\"\r\nUID:tag:localist.com\\,2008:EventInstance_51807378326447\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-andreas-baumler-gut-dysbiosis-ecological-causes-and-consequence-on-hum\r\n an-disease\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260514T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743793635\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Learn about how stress and anxiety show up in your body\\, emoti\r\n ons\\, thoughts and behaviors\\, and gain skills to lower anxiety in each are\r\n a. Increase your ability to manage anxious thoughts and develop skills to r\r\n ecognize the role of systems of oppression and conditioning in anxiety.\\n\\n\r\n You will create an individualized plan for recognizing and working with str\r\n ess and anxiety during this workshop.\\n\\nMultiple dates and times available\r\n  to attend this 2 hour workshop.Multiple CAPS therapists collaborate to pro\r\n vide these workshops.All enrolled students are eligible to participate in C\r\n APS groups and workshops. Connecting with CAPS is required to join this gro\r\n up. Please call 650.723.3785 during business hours (8:30 a.m. - 5:00 p.m. w\r\n eekdays) to connect and meet with a CAPS therapist\\, or message your therap\r\n ist/contact person at CAPS\\, to determine if this workshop is right for you\r\n \\, and be added to the workshop meeting that works best for your schedule. \r\n Workshops are in person.Access Anxiety Toolbox Workshop 2025-26 slides here\r\n .Anxiety Toolbox Dates\\n\\nFriday\\, April 17\\, 2026 from 1:00 p.m. - 3:00 p.\r\n m. Wednesday\\, April 29\\, 2026 from 2:00 p.m. - 4:00 p.m. Thursday\\, May 7\\\r\n , 2026 from 2:30 p.m. - 4:30 p.m. Wednesday\\, May 13\\, 2026 from 2:30 p.m.-\r\n 4:30 p.m. Tuesday\\, May 19\\, 2026 from 2:30 p.m.-4:30 p.m.\r\nDTEND:20260513T233000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T213000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\\, Ed Center\r\nSEQUENCE:0\r\nSUMMARY:Anxiety Toolbox\r\nUID:tag:localist.com\\,2008:EventInstance_52208020164906\r\nURL:https://events.stanford.edu/event/copy-of-anxiety-toolbox-6726\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Stanford Public Humanities invites you to join an event and liv\r\n ely conversation that takes you on a journey to the everyday landscapes of \r\n Silicon Valley. How do the technology companies in Stanford’s backyard shap\r\n e the sub/urban worlds of the larger Bay Area? What spatial formations and \r\n new cultural paradigms are prototyped on San Francisco’s sidewalks? And wha\r\n t urban worlds are imagined to emerge in Google and Meta's planned “village\r\n s”?\\n\\nThe flaneur is a figure at the cusp of new conjunctures of capitalis\r\n m\\, Walter Benjamin writes. If we follow her in and out of town halls and t\r\n ech offices\\, new forms of capture and capital expansion come into view. In\r\n  conversation with Charles Petersen\\, Katja Schwaller will discuss everyday\r\n  life and urban struggles unfolding in the fragmented landscapes of the Sil\r\n icon Valley region. \\n\\nPlease RSVP at this link to attend. \\n\\nKatja Schwa\r\n ller is an Urban Ethnographer and a Public Knowledge Fellow at Stanford Pub\r\n lic Humanities. Her work examines the spatial and cultural paradigms of dig\r\n ital capitalism through the built environment. She is the editor of Technop\r\n olis\\, a volume on Big Tech and urban struggles in the San Francisco Bay Ar\r\n ea (Seismo/Assoziation A 2019). As a PhD Candidate in Stanford’s Modern Tho\r\n ught and Literature Program\\, she is currently working on a book on Silicon\r\n  Valley urban formations.\\n\\nCharles Petersen is the Harold Hohbach histori\r\n an at Silicon Valley Archives at Stanford. He has served as an editor at n+\r\n 1 magazine for more than 15 years and has written for the New York Times\\, \r\n the Wall Street Journal\\, and the New York Review of Books. He is currently\r\n  working on a book around meritocracy in America\\, building on his Harvard \r\n doctoral research and his expertise on the history of Silicon Valley and th\r\n e history of the U.S. political economy from the Gilded Age to the present.\r\nDTEND:20260514T003000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260513T230000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:Green Library\\, Hohbach Hall\\, HH126 (SVA Seminar Room)\r\nSEQUENCE:0\r\nSUMMARY:Silicon Valley Landscapes: A Reading and Conversation with Katja Sc\r\n hwaller\r\nUID:tag:localist.com\\,2008:EventInstance_52241395020167\r\nURL:https://events.stanford.edu/event/silicon-valley-landscapes-a-reading-a\r\n nd-conversation-with-katja-schwaller\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260514T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379390667\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Creative Writing Program is pleased to announce the next ev\r\n ent in the Lane Lecture Series: A Reading with Amaud Jamaul Johnson.\\n\\nThi\r\n s event is open to Stanford affiliates and the general public. Registration\r\n  is encouraged but not required. Register here\\n\\n____\\n\\nAmaud Jamaul John\r\n son is the author of three poetry collections\\, Imperial Liquor (Pitt Poetr\r\n y Series\\, 2020)\\, Darktown Follies (Tupelo Press\\, 2013)\\, and Red Summer \r\n (Tupelo 2006). Born and raised in Compton\\, California\\, educated at Howard\r\n  University and Cornell University\\, his honors include a Pushcart Prize\\, \r\n the Hurston/Wright Legacy Award\\, the Edna Meudt Poetry Award\\, the Dorset \r\n Prize\\, and fellowships from MacDowell\\, Stanford\\, Bread Loaf\\, and Cave C\r\n anem. His work has appeared in The Atlantic\\, The New York Times\\, The Sout\r\n hern Review\\, American Poetry Review\\, Los Angeles Review of Books\\, Kenyon\r\n  Review\\, Callaloo\\, Academy of American Poets\\, Furious Flower\\, andBest A\r\n merican Poetry. He currently teaches at Pomona College\\, where he is the Ar\r\n thur M. and Fanny M. Dole Professor of English.\r\nDTEND:20260514T040000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T023000Z\r\nGEO:37.427784;-122.174323\r\nLOCATION:Jen-Hsun Huang Building (School of Engineering)\\, Mackenzie Room\r\nSEQUENCE:0\r\nSUMMARY:Reading with Amaud Jamaul Johnson\\, part of the Lane Lecture Series\r\nUID:tag:localist.com\\,2008:EventInstance_50879554761573\r\nURL:https://events.stanford.edu/event/reading-with-amaud-jamaul-johnson-par\r\n t-of-the-lane-lecture-series\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:This Executive Forum brings together C-Suite executives from ma\r\n jor employers across hospitality\\, logistics\\, retail\\, healthcare\\, and ma\r\n nufacturing to explore how AI can transform large-scale frontline labor sys\r\n tems.\\n\\nOpen to Faculty\\, Students. Attendance is limited to 100 executive\r\n s at VP-level and above from organizations with significant frontline workf\r\n orces\\, plus 25 Stanford faculty and students. Registration closes April 1s\r\n t or when capacity is reached.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260514\r\nLOCATION:Vidalakis\r\nSEQUENCE:0\r\nSUMMARY:AI @ Work: The Executive Forum for Frontline Workforce Innovation\r\nUID:tag:localist.com\\,2008:EventInstance_51966577940863\r\nURL:https://events.stanford.edu/event/ai-work-the-executive-forum-for-front\r\n line-workforce-innovation\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260514\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294445546\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260514\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355576861\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260515T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910886156\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260515T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222793981\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Creating a financial plan can feel especially complex when you \r\n are balancing multiple responsibilities\\, navigating life transitions\\, or \r\n putting your own financial goals on the back burner. Without a clear plan\\,\r\n  it is easy to feel uncertain about debt\\, budgeting\\, and whether you are \r\n truly prepared for the future.\\n\\nIn this empowering and practical webinar\\\r\n , you will learn four clear steps to begin reducing your debt and gain tool\r\n s to organize your budget with confidence. We will also explore how to esti\r\n mate how much you may need for retirement and how these pieces fit together\r\n  to support your long-term financial well-being.\\n\\nDesigned with women’s u\r\n nique goals and experiences in mind\\, this session will guide you through c\r\n reating a personalized financial plan that reflects your priorities and val\r\n ues. You will take away clarity\\, confidence\\, and actionable steps to help\r\n  you move forward with intention.\\n\\nThis class will not be recorded. Atten\r\n dance requirement for incentive points - at least 80% of the live session. \r\n  Request disability accommodations and access info.\\n\\nClass details are su\r\n bject to change.\r\nDTEND:20260514T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:A Woman’s Guide to Building a Financial Plan\r\nUID:tag:localist.com\\,2008:EventInstance_52220232440745\r\nURL:https://events.stanford.edu/event/a-womans-guide-to-building-a-financia\r\n l-plan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Join the speaker for coffee\\, cookies\\, and conversation before\r\n  the talk\\, starting at 11:45am.\\n\\nTalk title to be announcedAbstract comi\r\n ng soon\\n\\n \\n\\nWilliam Yang\\, MD\\, PhDProfessor\\, Terry Semel Chair in Alz\r\n heimer’s Disease Research and Treatment\\, Department of Psychiatry & Biobeh\r\n avioral Sciences\\, UCLA\\n\\nVisit lab website\\n\\nHosted by Andy Tsai (Wyss-C\r\n oray Lab)\\n\\n \\n\\nSign up for Speaker Meet-upsEngagement with our seminar s\r\n peakers extends beyond the lecture. On seminar days\\, invited speakers meet\r\n  one-on-one with faculty members\\, have lunch with a small group of trainee\r\n s\\, and enjoy dinner with a small group of faculty and the speaker's host.\\\r\n n\\nIf you’re a Stanford faculty member or trainee interested in participati\r\n ng in these Speaker Meet-up opportunities\\, click the button below to expre\r\n ss your interest. Depending on availability\\, you may be invited to join th\r\n e speaker for one of these enriching experiences.\\n\\nSpeaker Meet-ups Inter\r\n est Form\\n\\n About the Wu Tsai Neurosciences Seminar SeriesThe Wu Tsai Neur\r\n osciences Institute seminar series brings together the Stanford neuroscienc\r\n e community to discuss cutting-edge\\, cross-disciplinary brain research\\, f\r\n rom biochemistry to behavior and beyond.\\n\\nTopics include new discoveries \r\n in fundamental neurobiology\\; advances in human and translational neuroscie\r\n nce\\; insights from computational and theoretical neuroscience\\; and the de\r\n velopment of novel research technologies and neuro-engineering breakthrough\r\n s.\\n\\nUnless otherwise noted\\, seminars are held Thursdays at 12:00 noon PT\r\n .\\n\\nSign up to learn about all our upcoming events\r\nDTEND:20260514T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: William Yang - Talk Title TBA\r\nUID:tag:localist.com\\,2008:EventInstance_50539423450112\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-william-yang-ta\r\n lk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260514T191500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762193207\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260514T194500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794491679\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260514T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491631016\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260515T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743794660\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:Michael Greenstone is the Milton Friedman Distinguished Service\r\n  Professor in Economics at the University of Chicago. In addition\\, he serv\r\n es as the founding director of the University’s Institute for Climate and S\r\n ustainable Growth and the director of the interdisciplinary Energy Policy I\r\n nstitute at the University of Chicago. He was previously the director of th\r\n e Becker Friedman Institute for Economics.\\n\\n\\nDuring the Obama Administra\r\n tion\\, he served as the Chief Economist for the President’s Council of Econ\r\n omic Advisers\\, where he proposed and then co-led the development of the Un\r\n ited States Government’s social cost of carbon. He is an elected member of \r\n both the National Academy of Sciences and the American Academy of Arts and \r\n Sciences\\, a fellow of the Econometric Society\\, a Carnegie Fellow (aka the\r\n  “Brainy Award”)\\, and a former editor of the Journal of Political Economy.\r\n  Formerly\\, Greenstone was the 3M Professor of Environmental Economics at M\r\n IT and directed The Hamilton Project.\\n\\n\\nGreenstone’s research\\, which ha\r\n s influenced policy in the United States and globally\\, is focused on the g\r\n lobal energy challenge that requires all societies to balance the needs for\r\n  inexpensive and reliable energy\\, protection of the public’s health from a\r\n ir pollution\\, and minimizing the damages from climate change. Recently\\, h\r\n is research has helped lead to the United States Government quadrupling its\r\n  estimate of the damages from climate change\\, the adoption of pollution ma\r\n rkets in India\\, and the use of machine learning techniques to target envir\r\n onmental inspections. As a co-director of the Climate Impact Lab\\, he is pr\r\n oducing empirically grounded estimates of the local and global impacts of c\r\n limate change. He created the Air Quality Life Index® that converts air pol\r\n lution concentrations into their impact on life expectancy and co-founded C\r\n limate Vault\\, a 501(c)(3) that uses markets to allow institutions and peop\r\n le to reduce their carbon footprint and foster innovation in carbon dioxide\r\n  removal.\\n\\n\\nGreenstone received a Ph.D. in Economics from Princeton Univ\r\n ersity and a B.A. in Economics with High Honors from Swarthmore College.\r\nDTEND:20260514T213000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260514T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Global Environmental Policy Seminar with Michael Greenstone\r\nUID:tag:localist.com\\,2008:EventInstance_50710667496043\r\nURL:https://events.stanford.edu/event/global-environmental-policy-seminar-w\r\n ith-michael-greenstone\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260515T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404975104\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:The Creative Writing Program is pleased to announce this year’s\r\n  Poetry Into Film Festival.\\n\\nAll films submitted for the 14th annual Poet\r\n ry Into Film Contest will be screened. Awards will be recognized.\\n\\nThis e\r\n vent is open to Stanford affiliates and the general public. Registration is\r\n  encouraged but not required\\; registration form to follow.\r\nDTEND:20260515T040000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T020000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Poetry Into Film Festival\r\nUID:tag:localist.com\\,2008:EventInstance_50721631245145\r\nURL:https://events.stanford.edu/event/poetry-into-film-festival-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260515\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294447595\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260515\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355578910\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260516T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910887181\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260516T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817898256\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260515T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802461449\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260515T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699876556\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260516T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222795006\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Please join us for this month's Center for Sleep and Circadian \r\n Sciences William C. Dement Seminar Series!\\n\\n\"Metabolic Drivers of Sleep D\r\n isruption in Alzheimer’s Disease\"\\n\\nFriday\\, May 15th\\, 2026 at 12pm PST\\n\r\n \\nShannon L. Macauley\\, Ph.D.\\nAssociate Professor\\, Dept of Physiology\\, U\r\n niversity of Kentucky\\nAdjunct Associate Professor\\, Dept of Physiology & P\r\n harmacology\\, Wake Forest School of Med\\n\\nLocation: Li Ka Shing Center\\, R\r\n oom LK120 (291 Campus Drive\\, Stanford\\, CA 94305)\\n\\nZoom link (if unable \r\n to attend in person): https://stanford.zoom.us/j/99004753637?pwd=RWVUem1FbT\r\n NneFhlVFF1Z0l6Mi90UT09\r\nDTEND:20260515T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T190000Z\r\nGEO:37.43181;-122.175758\r\nLOCATION:Li Ka Shing Center\\, Friday\\, May 15th\\, 2026\r\nSEQUENCE:0\r\nSUMMARY:CSCS William C. Dement Seminar Series: \"Metabolic Drivers of Sleep \r\n Disruption in Alzheimer’s Disease\" with Dr. Shannon Macauley\r\nUID:tag:localist.com\\,2008:EventInstance_51933520453563\r\nURL:https://events.stanford.edu/event/cscs-william-c-dement-seminar-series-\r\n 7541\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:“I have found that the greatest degree of inner tranquility com\r\n es from the development of love and compassion.” ― Dalai Lama XIV\\n\\nAre yo\r\n u ready to take your meditation practice to the next level? This two-sessio\r\n n online class is designed for everyone who has some experience with medita\r\n tion and wishes to deepen their practice. This class extends mindfulness pr\r\n actice to emphasize cultivation of loving-kindness\\, compassion\\, and equan\r\n imity. These practices will help to enrich both your intrapersonal and inte\r\n rpersonal experiences.\\n\\nThrough guided practices and community sharing\\, \r\n you will broaden and strengthen your meditation practice and integrate its \r\n benefits into your daily life.\\n\\nThis class is open to everyone with some \r\n prior meditation experience. Also\\, if you are new to mediation\\, this clas\r\n s will build upon the foundational skills covered in our companion class\\, \r\n Building Your Meditation Practice. Both new and experienced practitioners a\r\n re welcome to sign up for both classes for a comprehensive overview to the \r\n practice of meditation.\\n\\nThis class will not be recorded. Attendance requ\r\n irement for incentive points - at least 80% of both sessions. Request disab\r\n ility accommodations and access info.\\n\\nClass details are subject to chang\r\n e.\r\nDTEND:20260515T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Deepening Your Meditation Practice (May 15 - 22)\r\nUID:tag:localist.com\\,2008:EventInstance_52220232489903\r\nURL:https://events.stanford.edu/event/deepening-your-meditation-practice-ma\r\n y-15-22\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260515T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260515T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682874802\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:At the annual Education Partnership for Internationalizing Curr\r\n iculum (EPIC) Symposium\\, community college faculty and administrators from\r\n  across the U.S. will gather virtually to discuss ways to prepare students \r\n for a world that is increasingly interconnected. Join us for our 11th annua\r\n l symposium about the challenges and opportunities of developing global stu\r\n dies at community colleges. \\n\\nThe day will include presentations from Sta\r\n nford faculty as well as community college professors who have collaborated\r\n  with Stanford University partners to integrate international topics into t\r\n heir curricula. Presentations will feature adapted lesson plans and course \r\n material as well as strategies for reaching diverse student populations. Th\r\n is event is free and open to all community college faculty\\, administrators\r\n \\, librarians\\, and counselors. \\n\\nThis year's event will take place virtu\r\n ally. Registration is free but required for attendance.\\n\\nIf you need a di\r\n sability-related accommodation\\, please contact us at stanfordglobalstudies\r\n @stanford.edu. Kindly note that requests should be made by May 1\\, 2026.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260516\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 EPIC Symposium: Integrating Global Topics into Community Colle\r\n ge Curricula\r\nUID:tag:localist.com\\,2008:EventInstance_52065690677213\r\nURL:https://events.stanford.edu/event/2026-epic-symposium-integrating-globa\r\n l-topics-into-community-college-curricula\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260516\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294448620\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260516\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355579935\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Annual Symposium\\, which will take place May 16-17\\, 2025\\, at \r\n Stanford University\\, Stanford\\, CA\\, USA. \\n\\n The Stat4Onc Annual Symposi\r\n um is an NCI sponsored conference that fosters interdisciplinary discussion\r\n s between clinical and quantitative scientists on cancer clinical trials. R\r\n esearchers from academia\\, industry\\, and regulatory agencies are invited t\r\n o share their latest research\\, explore novel ideas\\, and collaborate on so\r\n lutions for enhancing trial design\\, drug development\\, and patient care.\\n\r\n Find more details here: The Stat4Onc Annual Symposium\\nSave big before 4/15\r\n ! \\nDon't miss out on the opportunity to register early and take advantage \r\n of discounted rates. \\n\\nConference Registration Rates Early Bird before 4/\r\n 15 \\nFor Stanford\\, U Chicago\\, U Conn\\, OHSU\\, and Government:\\n\\nBefore 4\r\n /15: $35.00After 4/15: $70.00For Academia and Non-Profit:\\n\\nBefore 4/15: $\r\n 110.00After 4/15: $225.00Five short courses are offered on May 15 and May 1\r\n 8. Please visit registration link for short course registration fees.\\n \\nR\r\n EGISTER NOW!\r\nDTEND:20260517T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T150000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:8th Stat4Onc Annual Symposium: May 16-17\r\nUID:tag:localist.com\\,2008:EventInstance_49225378608197\r\nURL:https://events.stanford.edu/event/8th-stat4onc-annual-symposium-may-16-\r\n 17\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260517T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910888206\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260516T183000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078581695\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260516T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699877581\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260516T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692012338\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260516T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682876851\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260516T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708362021\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260516T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260516T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668891157\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Pop Royalty BTS to perform at Stanford Stadium on May 16\\, 17\\,\r\n  & 19\\, 2026\\n\\nTickets Available Starting 11 AM PST on Thursday\\, January \r\n 22 via ARMY MEMBERSHIP PRESALE\\n\\nGeneral Onsale Begins 11 AM PST on Saturd\r\n ay\\, January 24 at LiveNation.com\\n\\nFor more details visit GOSTANFORD\\n\\nS\r\n tanford Live and Stanford Athletics\\, in conjunction with Live Nation\\, ann\r\n ounce two performances on May 16\\, 17\\, and 19\\, 2026\\, by pop royalty BTS \r\n at Stanford Stadium. The Stanford dates are part of the group’s long-awaite\r\n d return to the stage and largest world tour to date\\, spanning 34 regions \r\n with 79 shows. Notably\\, the tour will feature a 360-degree\\, in-the-round \r\n stage design. The immersive setup places the audience at the center of the \r\n experience while allowing for increased capacity at every venue.\\n\\nThese p\r\n erformances underscore Stanford’s commitment to the role of music in shapin\r\n g global contemporary culture\\, and to the unique capacity of universities \r\n to convene transformative shared experiences for students and the broader c\r\n ommunity. The group will become just the second musical act to perform at S\r\n tanford Stadium\\, following Coldplay’s inaugural shows last year. \\n\\nTICKE\r\n T INFORMATION\\n\\nTickets for the Stanford dates will be available starting \r\n Thursday\\, January 22 at 11AM PST via ARMY MEMBERSHIP PRESALE. Remaining ti\r\n ckets will be available via general onsale beginning Saturday\\, January 24 \r\n at 11AM at LiveNation.com.\\n\\nARMY MEMBERSHIP holders (US or GLOBAL) must r\r\n egister for the Presale on Weverse by January 18 at 3:00 PM PST / 6:00 PM E\r\n ST / 11:00 PM GMT / January 19 at 12:00 AM CET in order for their membershi\r\n p to be verified. For more information\\, see HERE.\r\nDTEND:20260517T030000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T020000Z\r\nGEO:37.43453;-122.161123\r\nLOCATION:Stanford Stadium\r\nSEQUENCE:0\r\nSUMMARY:BTS WORLD TOUR ‘ARIRANG’ IN STANFORD\r\nUID:tag:localist.com\\,2008:EventInstance_51815776753782\r\nURL:https://events.stanford.edu/event/bts-world-tour-at-the-stanford-stadiu\r\n m\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260517\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294449645\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260517\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355580960\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:Today Axess and other ERP systems may be unavailable due to mai\r\n ntenance window.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260517\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:UIT Extended Maintenance Window\r\nUID:tag:localist.com\\,2008:EventInstance_50472525591640\r\nURL:https://events.stanford.edu/event/uit-extended-maintenance-window-5369\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260517\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:UIT Extended Maintenance Window\\; Axess and other ERP systems may b\r\n e unavailable.\r\nUID:tag:localist.com\\,2008:EventInstance_49464408300976\r\nURL:https://events.stanford.edu/event/uit-extended-maintenance-window-axess\r\n -and-other-erp-systems-may-be-unavailable-4702\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Stanford Libraries presents Finely Printed Books: Albert Bender\r\n  and the Birth of Stanford Special Collections\\, on view in the Peterson Ga\r\n llery and Munger Rotunda of the Cecil H. Green Library from February 26 to \r\n May 17\\, 2026. \\n\\nFinely Printed Books tells the incredible story of Alber\r\n t Bender and his remarkable gifts to Stanford that became the foundation of\r\n  Stanford University Libraries Special Collections. It has been almost one \r\n hundred years since the first beautiful book came to the Green Library. Fro\r\n m 1926 to 1941\\, Albert M. Bender personally donated more than five hundred\r\n  volumes and encouraged his friends to contribute to the growing collection\r\n .\\n\\n“This\\, my copy of the Laudes Creaturarum of S. Francis\\, I now give t\r\n o the Leland Stanford Junior University through Albert M. Bender\\, in memor\r\n y of my husband’s dearly loved sister Frances A. H. Sanderson Stewart.\\n–An\r\n ne Cobden-Sanderson\\, Stanford\\, June 27th\\, 1926.”\\n\\nOn Sunday\\, June 27\\\r\n , 1926\\, Anne Cobden-Sanderson made her way down the peninsula from San Fra\r\n ncisco to the Stanford campus. The previous evening\\, she had attended a me\r\n al in her honor at Coppa’s restaurant in San Francisco\\, a haunt for Bohemi\r\n ans\\, artists\\, literati\\, and book people. The trip to Stanford came at th\r\n e end of a week of celebration of the “book beautiful\\,” during which Cobde\r\n n-Sanderson\\, was feted by the area’s printers\\, publishers\\, and book coll\r\n ectors. It was one of the final stops on a West Coast visit from Santa Barb\r\n ara to the Bay Area\\, a tour punctuated by lectures on the suffragette move\r\n ment\\, the labor movement in England\\, the Doves Press\\, and interviews and\r\n  research on prison reform – all topics which had played key roles in Cobde\r\n n-Sanderson’s life – with every event documented by the California newspape\r\n rs as she worked her way north.\\n\\nWhile we cannot know for certain what wa\r\n s discussed over dinner that Saturday evening nearly a century ago\\, we do \r\n know three things with some certainty: first\\, that Albert M. Bender was th\r\n ere\\; second\\, that he encouraged Cobden-Sanderson to travel from the city \r\n to a young campus near Palo Alto\\, pay a visit to the Stanford University L\r\n ibrary in what is now the Green Library building\\, and inscribe her copy of\r\n  a book from the Doves Press\\, founded by her husband T. J. Cobden-Sanderso\r\n n and financed by Anne herself\\, to a nascent rare book collection\\; third\\\r\n , that this gift to the University\\, from a person who bridged the worlds o\r\n f William Morris\\, Jane Stanford\\, and the burgeoning post-earthquake Bay A\r\n rea book arts scene\\, was the first step in the transformation of a haphaza\r\n rd accumulation of old and rare books acquired in the first three decades o\r\n f the University’s operations into a well-organized Department of Special C\r\n ollections serving the faculty and students of a major research institution\r\n .\\n\\nAlbert M. Bender (1866–1941)\\, the self-effacing catalyst who transfor\r\n med Bay Area cultural life through his extensive philanthropy and enthusias\r\n m for beauty in art\\, literature\\, and the book arts\\, shaped Stanford’s co\r\n llections in ways that are still felt today. He encouraged dozens of his fr\r\n iends and acquaintances to give generously to help Stanford grow from a lib\r\n rary that struggled to keep up with the demands of building a basic teachin\r\n g collection to one that could also support access to rare\\, antiquarian\\, \r\n and unique materials for serious scholarship. By providing us with carefull\r\n y selected examples of fine printing\\, illustration\\, type design\\, paperma\r\n king\\, and binding\\, ranging across all periods\\, he challenged the librari\r\n ans at the time to rethink how Stanford viewed its role as a repository of \r\n research materials. No longer were our rare books defined just by how old t\r\n hey were or which texts they contained\\, but now there was a need to consid\r\n er aesthetics\\, research importance\\, monetary value\\, book history\\, prove\r\n nance\\, uniqueness\\, and\\, in short\\, all the myriad attributes that might \r\n make a book an object of scholarly inquiry. \\n\\nThis exhibition tells the s\r\n tory of Albert M. Bender’s remarkable gift to Stanford University. An inven\r\n tory of the gifts that Bender helped bring to Stanford in 1926 and 1927\\, F\r\n inely Printed Books Presented to the Library of Stanford University: A Cata\r\n logue\\, has allowed us to identify and update the provenance for 179 volume\r\n s from that initial gift\\, recovering information that had been lost from o\r\n ur catalog decades ago in the conversion from card catalogs to online recor\r\n ds. On display are highlights from this bountiful donation. The archival tr\r\n aces of Albert M. Bender\\, his circle of friends who made the initial donat\r\n ions possible\\, the librarians who helped shepherd in a new era of collecti\r\n ng for Stanford University\\, and the impact that this gift had on the Stanf\r\n ord community at the time. As we look ahead to a second century of rare boo\r\n k collecting\\, much has been done\\, and much remains to be done\\, to build \r\n a world-class resource to support Stanford scholarship.\\n\\nThis exhibition \r\n is curated by Benjamin Albritton\\, Rare Books Curator for the Department of\r\n  Special Collections. Produced and designed by Deardra Fuzzell\\, with assis\r\n tance from Elizabeth Fischbach\\, Kylee Diedrich\\, and Pasha Tope.\r\nDTEND:20260518T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T160000Z\r\nGEO:37.426984;-122.167998\r\nLOCATION:Green Library\\, Bing Wing\\, Peterson Gallery and Munger Rotunda\r\nSEQUENCE:0\r\nSUMMARY:Finely Printed Books: Albert Bender and the Birth of Stanford Speci\r\n al Collections\r\nUID:tag:localist.com\\,2008:EventInstance_52014910889231\r\nURL:https://events.stanford.edu/event/finely-printed-books-albert-bender-an\r\n d-the-birth-of-stanford-special-collections\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260517T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809535866\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260517T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51969417156679\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260517T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692015411\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260517T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682877876\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:¡Ven a conocer el museo Cantor!\\n\\nExplora las colecciones del \r\n Cantor con un guía que te guiará a través de una selección de obras de dife\r\n rentes culturas y épocas.\\n\\nLos participantes están muy bienvenidos a part\r\n icipar en la conversación y aportar sus ideas sobre los temas explorados a \r\n lo largo de la visita si lo desean.\\n\\nLas visitas no requieren reserva pre\r\n via y son gratuitas. Se ruega registrarse en el mostrador de atención al vi\r\n sitante del vestíbulo principal del museo. \\n\\n ¡Esperamos verte en el muse\r\n o!\\n_______________________________________\\n\\nCome and visit the Cantor! \\\r\n n\\nExplore the Cantor's collections with a museum engagement guide who will\r\n  lead you through a selection of works from different cultures and time per\r\n iods.\\n\\nParticipants are welcomed to participate in the conversation and p\r\n rovide their thoughts on themes explored throughout the tour but are also f\r\n ree to engage at their own comfort level. \\n\\n Tours do not require a reser\r\n vation and are free of charge. Please check-in at the visitor services desk\r\n  in the main museum lobby.\r\nDTEND:20260517T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Spanish \r\nUID:tag:localist.com\\,2008:EventInstance_52057413918677\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -spanish-language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260517T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766130245\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260517T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708363046\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260517T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260517T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668892182\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Pop Royalty BTS to perform at Stanford Stadium on May 16\\, 17\\,\r\n  & 19\\, 2026\\n\\nTickets Available Starting 11 AM PST on Thursday\\, January \r\n 22 via ARMY MEMBERSHIP PRESALE\\n\\nGeneral Onsale Begins 11 AM PST on Saturd\r\n ay\\, January 24 at LiveNation.com\\n\\nFor more details visit GOSTANFORD\\n\\nS\r\n tanford Live and Stanford Athletics\\, in conjunction with Live Nation\\, ann\r\n ounce two performances on May 16\\, 17\\, and 19\\, 2026\\, by pop royalty BTS \r\n at Stanford Stadium. The Stanford dates are part of the group’s long-awaite\r\n d return to the stage and largest world tour to date\\, spanning 34 regions \r\n with 79 shows. Notably\\, the tour will feature a 360-degree\\, in-the-round \r\n stage design. The immersive setup places the audience at the center of the \r\n experience while allowing for increased capacity at every venue.\\n\\nThese p\r\n erformances underscore Stanford’s commitment to the role of music in shapin\r\n g global contemporary culture\\, and to the unique capacity of universities \r\n to convene transformative shared experiences for students and the broader c\r\n ommunity. The group will become just the second musical act to perform at S\r\n tanford Stadium\\, following Coldplay’s inaugural shows last year. \\n\\nTICKE\r\n T INFORMATION\\n\\nTickets for the Stanford dates will be available starting \r\n Thursday\\, January 22 at 11AM PST via ARMY MEMBERSHIP PRESALE. Remaining ti\r\n ckets will be available via general onsale beginning Saturday\\, January 24 \r\n at 11AM at LiveNation.com.\\n\\nARMY MEMBERSHIP holders (US or GLOBAL) must r\r\n egister for the Presale on Weverse by January 18 at 3:00 PM PST / 6:00 PM E\r\n ST / 11:00 PM GMT / January 19 at 12:00 AM CET in order for their membershi\r\n p to be verified. For more information\\, see HERE.\r\nDTEND:20260518T030000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260518T020000Z\r\nGEO:37.43453;-122.161123\r\nLOCATION:Stanford Stadium\r\nSEQUENCE:0\r\nSUMMARY:BTS WORLD TOUR ‘ARIRANG’ IN STANFORD\r\nUID:tag:localist.com\\,2008:EventInstance_51815776754807\r\nURL:https://events.stanford.edu/event/bts-world-tour-at-the-stanford-stadiu\r\n m\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Our broad\\, interdisciplinary community is the heart of the Wu \r\n Tsai Neurosciences Institute. The 2026 Wu Tsai Neuro Scientific Retreat is \r\n a day to connect across labs and disciplines\\, share new discoveries\\, and \r\n spark collaborations across neuroscience discovery\\, engineering\\, and medi\r\n cine.\\n\\n \\n\\nRegistration is now open! Register via the Retreat Registrati\r\n on Site now through April 21\\n\\n \\n\\n \\n\\nWhat to expectTalks from the Wu T\r\n sai Neuro community\\, spanning discovery\\, engineering\\, and medicine (incl\r\n uding talks from both faculty and trainees)Poster session featuring recent \r\n advances from the Wu Tsai Neuro communityTime to connect with colleagues ac\r\n ross labs and disciplinesProgram includes catered meals and access to the m\r\n useum's exhibitsA program overview and additional logistics will be posted \r\n on the Registration Site. The final agenda will be available the day of Ret\r\n reat.\\n\\nInterested in presenting? We're putting a special spotlight on tra\r\n inees/junior researchers this year! Attendees can indicate interest in pres\r\n enting via the registration form.\\n\\nPoster Session: Open to students\\, pos\r\n tdocs\\, and staff. Spots are limited and are first-come\\, first-serve.\\n\\nO\r\n ral Talks: Open to postdocs and PhD students only. Interested participants \r\n can submit an abstract via registration to be considered for one of the ora\r\n l talks. \\n\\n \\n\\nWho can attendActive Stanford faculty affiliated with the\r\n  Wu Tsai Neurosciences Institute and members of their labs are invited to a\r\n ttend.\\n\\nNot yet an affiliate? Faculty affiliation request formNot sure if\r\n  you (or your PI) is affiliated? Check the Stanford Profile for the tag “Me\r\n mber\\, Wu Tsai Neurosciences Institute” under Academic Appointments.Attenda\r\n nce expectationParticipants are expected to attend the full program (9:30 A\r\n M–6:00 PM).\\n\\nRegistrationRegistration is required. Registration will open\r\n  on March 2 and close on April 21. Register here.\\n\\n \\n\\nSign up to receiv\r\n e updates about registration and other Institute events\r\nDTEND:20260519T010000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260518T153000Z\r\nLOCATION:Computer History Museum\\, 1401 N Shoreline Blvd\\, Mountain View\\, \r\n CA 94043\r\nSEQUENCE:0\r\nSUMMARY:2026 Wu Tsai Neurosciences Institute Retreat\r\nUID:tag:localist.com\\,2008:EventInstance_52034445486436\r\nURL:https://events.stanford.edu/event/2026-wu-tsai-neurosciences-institute-\r\n retreat\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Do you or anyone in your school or unit work with minors? Stanf\r\n ord's policy for Protection of Minors requires that anyone working directly\r\n  with\\, supervising\\, chaperoning\\, or otherwise overseeing minors (individ\r\n uals under 18 years of age) in Stanford-sponsored programs or activities mu\r\n st complete a Live Scan background check.\\n\\nA Live Scan unit will be on ca\r\n mpus to provide fingerprinting service at no cost to the employee or the de\r\n partment. Please note\\, this Live Scan fingerprinting session can only proc\r\n ess Live Scan application forms where results are submitted to Stanford. If\r\n  you have previously cleared a Live Scan background check for Stanford and \r\n subsequently left the university\\, you may be required to complete a Live S\r\n can background check again. Reach out to your youth program contact to conf\r\n irm whether your results are on file. \\n\\nAll Program Staff will need to su\r\n bmit their completed Live Scan application forms to University Human Resour\r\n ces.  Program Staff will not meet the university’s Live Scan requirement un\r\n less they have completed this step.  Once Program Staff complete the finger\r\n print submission\\, they must submit their forms through this link. Please n\r\n ote if Program Staff complete Live Scan at a free on-campus session hosted \r\n by Stanford\\, a copy of their application form will be submitted to Univers\r\n ity Human Resources directly by the vendor. \\n\\nPlease complete these steps\r\n  before going to a Live Scan event: \\n\\nPlease bring a completed Live Scan \r\n application form. If you are an Employee\\, identify the specific program/ac\r\n tivity for which you are completing Live Scan in the field \"Type of License\r\n /Certification/Permit OR Working Title.\" If you are a Volunteer\\, enter “Vo\r\n lunteer” in this field.  Note that this field is limited to 30 characters. \r\n Bring a government-issued ID\\, such as a Driver's License or passport (with\r\n  U.S. visa).\\n\\nIf you have any questions\\, please see the Protection of Mi\r\n nors website or download the FAQ.  You can also contact University Human Re\r\n sources—Employee & Labor Relations at 650-721-4272 or protectminors@stanfor\r\n d.edu.\r\nDTEND:20260518T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260518T160000Z\r\nGEO:37.422506;-122.167404\r\nLOCATION:Haas Center for Public Service\\, DK Room (first floor)\r\nSEQUENCE:0\r\nSUMMARY:Protection of Minors Live Scan Fingerprinting\r\nUID:tag:localist.com\\,2008:EventInstance_51577856852604\r\nURL:https://events.stanford.edu/event/copy-of-protection-of-minors-live-sca\r\n n-fingerprinting-1485\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260518T191500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260518T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314074239\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260519T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260518T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222796031\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Have you ever tried to change a routine with the best intention\r\n s\\, only to find that a few weeks later your plan has quietly faded and old\r\n  habits have crept back in? You’re not alone\\, and it’s not a lack of motiv\r\n ation.\\n\\nJoin us for an engaging webinar that introduces a proven\\, scienc\r\n e-backed approach to sustainable behavior change. You’ll learn how small sh\r\n ifts can lead to lasting results by following three simple principles: Make\r\n  it fun. Make it easy. Make it you!\\n\\nThrough real-life examples and guide\r\n d reflection\\, we’ll explore how the science of behavior change translates \r\n into practical strategies you can use right away. You’ll see how these prin\r\n ciples work across different goals and situations\\, and how to adapt them t\r\n o fit your own values\\, preferences\\, and lifestyle so your changes feel pe\r\n rsonal\\, meaningful\\, and achievable.\\n\\nIf you’re ready to end the start–s\r\n top cycle and create healthy changes that truly last\\, this session will gi\r\n ve you a clear and flexible path forward.\\n\\nThis class will be recorded an\r\n d a one-week link to the recording will be shared with all registered parti\r\n cipants. To receive incentive points\\, attend at least 80% of the live sess\r\n ion or listen to the entire recording within one week.  Request disability \r\n accommodations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260518T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260518T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Healthy Change\r\nUID:tag:localist.com\\,2008:EventInstance_52220232538037\r\nURL:https://events.stanford.edu/event/healthy-change\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260519T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260519T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430662519\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260520T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260519T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222797056\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Do you have muscle tightness or soreness? You may find relief t\r\n hrough self-myofascial release - a practice that involves applying gentle\\,\r\n  sustained pressure to the connective tissues around the muscles to elimina\r\n te pain and restore motion.\\n\\nIn this noontime webinar\\, we will explore h\r\n ow muscle tightness and soreness impact body movement and the benefits of i\r\n ncorporating self-myofascial release into your wellness routine. After an o\r\n verview of muscle and fascial physiology\\, we will highlight the benefits o\r\n f self-myofascial release for healthy adults. You will also have a chance t\r\n o practice some simple techniques with guidance from the instructor.\\n\\nThi\r\n s interactive webinar is ideal for individuals who work on a computer at ho\r\n me or in the office and want to learn how to reduce muscle soreness and ten\r\n sion\\, especially in the neck\\, shoulders\\, the low back and hips. By the e\r\n nd of the seminar\\, you will be more conscious of your body’s restrictions\\\r\n , and how to improve your body’s movement from within.\\n\\nPlease bring two \r\n tennis balls and a sock to use in the demonstration. This class may not be \r\n suitable for everyone\\, such as those with recent major surgeries or injuri\r\n es to the neck\\, shoulders\\, low back and hips. If in doubt\\, please consul\r\n t a medical professional for guidance.\\n\\nThis class will be recorded and a\r\n  one-week link to the recording will be shared with all registered particip\r\n ants. To receive incentive points\\, attend at least 80% of the live session\r\n  or listen to the entire recording within one week.  Request disability acc\r\n ommodations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260519T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260519T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Self-Myofascial Release\r\nUID:tag:localist.com\\,2008:EventInstance_52220232585147\r\nURL:https://events.stanford.edu/event/self-myofascial-release-566\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260519T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260519T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491632041\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Learn about how stress and anxiety show up in your body\\, emoti\r\n ons\\, thoughts and behaviors\\, and gain skills to lower anxiety in each are\r\n a. Increase your ability to manage anxious thoughts and develop skills to r\r\n ecognize the role of systems of oppression and conditioning in anxiety.\\n\\n\r\n You will create an individualized plan for recognizing and working with str\r\n ess and anxiety during this workshop.\\n\\nMultiple dates and times available\r\n  to attend this 2 hour workshop.Multiple CAPS therapists collaborate to pro\r\n vide these workshops.All enrolled students are eligible to participate in C\r\n APS groups and workshops. Connecting with CAPS is required to join this gro\r\n up. Please call 650.723.3785 during business hours (8:30 a.m. - 5:00 p.m. w\r\n eekdays) to connect and meet with a CAPS therapist\\, or message your therap\r\n ist/contact person at CAPS\\, to determine if this workshop is right for you\r\n \\, and be added to the workshop meeting that works best for your schedule. \r\n Workshops are in person.Access Anxiety Toolbox Workshop 2025-26 slides here\r\n .Anxiety Toolbox Dates\\n\\nFriday\\, April 17\\, 2026 from 1:00 p.m. - 3:00 p.\r\n m. Wednesday\\, April 29\\, 2026 from 2:00 p.m. - 4:00 p.m. Thursday\\, May 7\\\r\n , 2026 from 2:30 p.m. - 4:30 p.m. Wednesday\\, May 13\\, 2026 from 2:30 p.m.-\r\n 4:30 p.m. Tuesday\\, May 19\\, 2026 from 2:30 p.m.-4:30 p.m.\r\nDTEND:20260519T233000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260519T213000Z\r\nGEO:37.422023;-122.163629\r\nLOCATION:Vaden Student Health Center\\, Ed Center\r\nSEQUENCE:0\r\nSUMMARY:Anxiety Toolbox\r\nUID:tag:localist.com\\,2008:EventInstance_52208020164907\r\nURL:https://events.stanford.edu/event/copy-of-anxiety-toolbox-6726\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260520T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663088059\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260520T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622323092\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Pop Royalty BTS to perform at Stanford Stadium on May 16\\, 17\\,\r\n  & 19\\, 2026\\n\\nTickets Available Starting 11 AM PST on Thursday\\, January \r\n 22 via ARMY MEMBERSHIP PRESALE\\n\\nGeneral Onsale Begins 11 AM PST on Saturd\r\n ay\\, January 24 at LiveNation.com\\n\\nFor more details visit GOSTANFORD\\n\\nS\r\n tanford Live and Stanford Athletics\\, in conjunction with Live Nation\\, ann\r\n ounce two performances on May 16\\, 17\\, and 19\\, 2026\\, by pop royalty BTS \r\n at Stanford Stadium. The Stanford dates are part of the group’s long-awaite\r\n d return to the stage and largest world tour to date\\, spanning 34 regions \r\n with 79 shows. Notably\\, the tour will feature a 360-degree\\, in-the-round \r\n stage design. The immersive setup places the audience at the center of the \r\n experience while allowing for increased capacity at every venue.\\n\\nThese p\r\n erformances underscore Stanford’s commitment to the role of music in shapin\r\n g global contemporary culture\\, and to the unique capacity of universities \r\n to convene transformative shared experiences for students and the broader c\r\n ommunity. The group will become just the second musical act to perform at S\r\n tanford Stadium\\, following Coldplay’s inaugural shows last year. \\n\\nTICKE\r\n T INFORMATION\\n\\nTickets for the Stanford dates will be available starting \r\n Thursday\\, January 22 at 11AM PST via ARMY MEMBERSHIP PRESALE. Remaining ti\r\n ckets will be available via general onsale beginning Saturday\\, January 24 \r\n at 11AM at LiveNation.com.\\n\\nARMY MEMBERSHIP holders (US or GLOBAL) must r\r\n egister for the Presale on Weverse by January 18 at 3:00 PM PST / 6:00 PM E\r\n ST / 11:00 PM GMT / January 19 at 12:00 AM CET in order for their membershi\r\n p to be verified. For more information\\, see HERE.\r\nDTEND:20260520T030000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T020000Z\r\nGEO:37.43453;-122.161123\r\nLOCATION:Stanford Stadium\r\nSEQUENCE:0\r\nSUMMARY:BTS WORLD TOUR ‘ARIRANG’ IN STANFORD\r\nUID:tag:localist.com\\,2008:EventInstance_51898063880996\r\nURL:https://events.stanford.edu/event/bts-world-tour-at-the-stanford-stadiu\r\n m\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260520\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294453744\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260520\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355581985\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The third of three spring quarter bills is due for graduate stu\r\n dents. Any new student charges posted since the last bill will be shown on \r\n this bill.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260520\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Third Spring Quarter Bill Due for Graduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720657143\r\nURL:https://events.stanford.edu/event/third-spring-quarter-bill-due-for-gra\r\n duate-students-4812\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The third of three bills generated for the spring quarter is du\r\n e for all undergraduate students. This includes tuition\\, mandatory and cou\r\n rse fees\\, updates or changes to housing and dining\\, and other student fee\r\n s.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260520\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Third Spring Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720756482\r\nURL:https://events.stanford.edu/event/third-spring-quarter-bill-due-for-und\r\n ergraduate-students-777\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260520T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105031302\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260521T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222798081\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Bando and Monack L\r\n abs\\, Alyssa Cutter \"TBA\"/TBD\\, \"TBA\"\r\nDTEND:20260520T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Bando and Monack Labs\\\r\n , Alyssa Cutter \"TBA\"/TBD\\, \"TBA\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144465338376\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-bando-and-monack-labs-alyssa-cutter-tbatbd-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260521T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743795685\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:If you are currently or have ever experienced the death of a si\r\n gnificant person in your life\\, or are experiencing feelings of grief in a \r\n time of uncertainty\\, this is an opportunity to share your experiences\\, su\r\n ggestions\\, and concerns with others in a safe and supportive environment.\\\r\n n\\nStudent Grief Gatherings are held 3x/quarter and are facilitated by staf\r\n f from ORSL\\, Well-Being\\, CAPS and GLO. This event is free and open only t\r\n o Stanford students.\r\nDTEND:20260521T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260520T230000Z\r\nGEO:37.423921;-122.172872\r\nLOCATION:Kingscote Garden\r\nSEQUENCE:0\r\nSUMMARY:Student Grief & Loss Gathering\r\nUID:tag:localist.com\\,2008:EventInstance_52093114050687\r\nURL:https://events.stanford.edu/event/student-grief-gathering\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260521T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379391692\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260521\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294454769\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260521\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355584034\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260522T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222799106\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Are you tired of the endless dieting-cycles and body loathing? \r\n Do you analyze every food decision? Have you stopped trusting yourself arou\r\n nd food? Diets are not only a low ROI endeavor\\, they can cause long term h\r\n arm\\, \"eat up\" our energy\\, and keep us from living our best lives yet.\\n\\n\r\n Discover an alternative to the paradigm of restrictive eating in this four-\r\n session online class series. You will learn the principles of intuitive eat\r\n ing to break free from the illusion of diets\\, reconnect with your body’s h\r\n unger and fullness cues\\, and adopt self-care practices that truly nourish \r\n you. We will explore what has you stuck in a diet mentality and provide pra\r\n ctical tips and tools on how to change your thoughts about diets\\, food\\, a\r\n nd your body for good. \\n\\nYou will experience small group sharing and disc\r\n ussion\\, thought provoking self-reflection\\, and effective home practice wh\r\n ich will start you down the road to making peace with your body and redisco\r\n vering the joy of eating without depriving yourself. Please be prepared to \r\n actively participate in breakout rooms and class discussions.\\n\\nNote: This\r\n  course is intended for general health education and an introduction to the\r\n  Intuitive Eating approach and is not intended to diagnose or treat eating \r\n disorders.\\n\\nThis class will not be recorded. Attendance requirement for i\r\n ncentive points - at least 80% of 3 of the 4 sessions.  Request disability \r\n accommodations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260521T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Intuitive Eating (May 21 - June 11)\r\nUID:tag:localist.com\\,2008:EventInstance_52220232632257\r\nURL:https://events.stanford.edu/event/intuitive-eating-may-21-june-11\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260521T191500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762194232\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Update: This seminar has been cancelled. Instead\\, we hope you'\r\n ll join us at our 2026 Annual Neurosciences Symposium\\, where she will be o\r\n ne of the featured speakers.\\n\\n \\n\\nRebecca Saxe\\, PhDProfessor\\, MIT\\n\\nR\r\n ebecca Saxe is the John W. Jarve (1978) Professor of Cognitive Neuroscience\r\n  and the Associate Dean of Science at MIT. She studies the development and \r\n neural basis of human cognition\\, focusing on social cognition. Saxe obtain\r\n ed her Ph.D. from MIT and was a Harvard Junior Fellow before joining the MI\r\n T faculty in 2006. She has received the Troland Award from the National Aca\r\n demy of Sciences\\, a Guggenheim fellowship\\, the MIT Committed to Caring Aw\r\n ard for graduate mentorship and is a member of American Academy of Arts and\r\n  Science.\\n\\nVisit lab website\\n\\nHosted by Caroline Kaicher (Gwilliams Lab\r\n oratory of Speech Neuroscience)\\n\\n \\n\\nSign up for Speaker Meet-upsEngagem\r\n ent with our seminar speakers extends beyond the lecture. On seminar days\\,\r\n  invited speakers meet one-on-one with faculty members\\, have lunch with a \r\n small group of trainees\\, and enjoy dinner with a small group of faculty an\r\n d the speaker's host.\\n\\nIf you’re a Stanford faculty member or trainee int\r\n erested in participating in these Speaker Meet-up opportunities\\, click the\r\n  button below to express your interest. Depending on availability\\, you may\r\n  be invited to join the speaker for one of these enriching experiences.\\n\\n\r\n Speaker Meet-ups Interest Form\\n\\n About the Wu Tsai Neurosciences Seminar \r\n SeriesThe Wu Tsai Neurosciences Institute seminar series brings together th\r\n e Stanford neuroscience community to discuss cutting-edge\\, cross-disciplin\r\n ary brain research\\, from biochemistry to behavior and beyond.\\n\\nTopics in\r\n clude new discoveries in fundamental neurobiology\\; advances in human and t\r\n ranslational neuroscience\\; insights from computational and theoretical neu\r\n roscience\\; and the development of novel research technologies and neuro-en\r\n gineering breakthroughs.\\n\\nUnless otherwise noted\\, seminars are held Thur\r\n sdays at 12:00 noon PT.\\n\\nSign up to learn about all our upcoming events\r\nDTEND:20260521T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:[Canceled] Neurosciences Seminar: Rebecca Saxe\r\nUID:tag:localist.com\\,2008:EventInstance_50539423307771\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-rebecca-saxe-ta\r\n lk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260521T194500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794493728\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260521T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491633066\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260522T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743796710\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDESCRIPTION:Low Fertility and Pronatalism in the U.S\\n\\nLow birth rates in \r\n the U.S. (and elsewhere) have become a hot topic of conversation – and a ca\r\n use for major concern among many\\, including the current Presidential admin\r\n istration. These concerns have given rise to strong claims about the causes\r\n  and consequences of low birth rates as well as several potential policy re\r\n sponses to reverse recent declines. In this talk\\, I will provide backgroun\r\n d on U.S. birth rate trends\\, review what research shows is likely driving \r\n low birth rates\\, and discuss the population consequences. Further\\, I will\r\n  provide an overview of the current U.S. rhetoric around low birth rates\\, \r\n review proposed formal and informal responses to raise birth rates\\, and di\r\n scuss whether such responses are likely to be effective. I argue that the c\r\n urrent alarmist discussion around low birth rates is\\, to a large extent\\, \r\n misdirection aimed at obscuring a larger effort to (re)create a hierarchy i\r\n n the U.S. along sex/gender\\, race and ethnicity\\, ability\\, religion\\, nat\r\n ivity\\, and other axes of marginalization. Finally\\, I conclude with eviden\r\n ce-based suggestions for addressing the impacts of low birth rates for popu\r\n lation structure and composition.\\n\\nBIO\\n\\nKaren Benjamin Guzzo is a famil\r\n y demographer and sociologist. She serves as Director of the Carolina Popul\r\n ation Center and is a Professor of Sociology at the University of North Car\r\n olina at Chapel Hill. Dr. Guzzo’s research has been funded by multiple gran\r\n ts from federal agencies\\, including the NICHD Population Dynamics Branch (\r\n PDB)\\, the Office of Planning\\, Research\\, and Evaluation (OPRE) within the\r\n  Administration for Children and Families in the U.S. Department of Health \r\n and Human Services\\, and the National Science Foundation. She has served on\r\n  the Boards of the Population Association of America and the National Counc\r\n il on Family Relations. She has been a Deputy Editor for Demography since 2\r\n 017 and serves on the Editorial Boards of the Journal of Marriage and Famil\r\n y\\, Family Transitions\\, and Journal of Family Theory and Review. She is th\r\n e chair of the American Sociological Association’s (ASA) Sociology of Popul\r\n ation section. Dr. Guzzo’s research has been published in top demography an\r\n d family science journals\\, and she frequently appears in major news outlet\r\n s\\, such as NPR’s Fresh Air\\, The New York Times\\, CNN\\, and The Wall Stree\r\n t Journal\\, to provide insight into contemporary childbearing patterns in t\r\n he U.S.\r\nDTEND:20260521T213000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Environmental Behavioral Sciences Seminar with Karen Guzzo\r\nUID:tag:localist.com\\,2008:EventInstance_50710677667105\r\nURL:https://events.stanford.edu/event/environmental-behavioral-sciences-sem\r\n inar-with-karen-guzzo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260522T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764717156\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Workshop\r\nDESCRIPTION:Dr. Sarita Patel\\, Board-Certified Child and Adolescent Psychia\r\n trist\\, will discuss the many factors beyond ADHD that can affect a young c\r\n hild’s ability to focus\\, including: anxiety\\, developmental delays\\, senso\r\n ry sensitivities\\, sleep issues\\, and temperament. Designed to inform and e\r\n mpower without pressuring families to self-diagnose\\, this session offers a\r\n  compassionate look at the complexities behind attention difficulties in yo\r\n ung children.\\n\\nThis workshop is geared towards parents of children in ele\r\n mentary school\\, though all are welcome to attend. This session will not be\r\n  recorded.\r\nDTEND:20260522T003000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T230000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Attentional Difficulties in Young Children - When to Seek Support\r\nUID:tag:localist.com\\,2008:EventInstance_51269982843536\r\nURL:https://events.stanford.edu/event/attentional-difficulties-in-young-chi\r\n ldren-when-to-seek-support\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Intellectual in a Time of Crisis is the theme for this year\r\n 's Spring Celebration. Featuring presentations by current SHC Fellows\\, the\r\n  event will include a general discussion with Q&A moderated by SHC Director\r\n  Roland Greene. \\n\\nMore details will be announced.\\n \\n\\nExplore the Collo\r\n quy\\n\\nTo complement this event\\, we have asked our fellows to contribute t\r\n o a forthcoming Colloquy on Arcade. Check back for essays\\, reflections\\, v\r\n ideos\\, and more.\\n\\nLearn More\r\nDTEND:20260522T010000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260521T230000Z\r\nGEO:37.424631;-122.172061\r\nLOCATION:Humanities Center\\, Levinthal Hall\r\nSEQUENCE:0\r\nSUMMARY:The Intellectual in a Time of Crisis | 2026 Spring Celebration\r\nUID:tag:localist.com\\,2008:EventInstance_52251791327665\r\nURL:https://events.stanford.edu/event/the-intellectual-in-a-time-of-crisis-\r\n 2026-spring-celebration\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260522T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404977153\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260522\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294456818\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260522\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355585059\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260522\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Change of grading basis deadline (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464413653401\r\nURL:https://events.stanford.edu/event/change-of-grading-basis-deadline-5-pm\r\n -9881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260522\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Course withdrawal deadline\\, except GSB\\, Law\\, and MD (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464418765913\r\nURL:https://events.stanford.edu/event/course-withdrawal-deadline-except-gsb\r\n -law-and-md-5-pm-6268\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grading basis changes\\, except f\r\n or GSB courses (which is earlier).\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260522\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Change of Grading Basis Deadline (Except GSB)\r\nUID:tag:localist.com\\,2008:EventInstance_50472525692001\r\nURL:https://events.stanford.edu/event/spring-quarter-change-of-grading-basi\r\n s-deadline-except-gsb-6116\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a course withdrawal application\\\r\n , except for GSB\\, Law\\, and MD students.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260522\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Course Withdrawal Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472525789290\r\nURL:https://events.stanford.edu/event/spring-quarter-course-withdrawal-dead\r\n line\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260523T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817900305\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260522T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802462474\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260522T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699879630\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260523T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222800131\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260522T201500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51958777364843\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260522T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682878901\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Other\r\nDESCRIPTION:In this in-person session\\, an admission officer provides an ov\r\n erview of Knight-Hennessy Scholars\\, the admission process\\, and the applic\r\n ation. The session includes a presentation\\, and Knight-Hennessy scholar(s)\r\n  may join to share their experience. \\n\\nAbout Knight-Hennessy Scholars\\n\\n\r\n Knight-Hennessy Scholars is a multidisciplinary\\, multicultural graduate sc\r\n holarship program. Each Knight-Hennessy scholar receives up to three years \r\n of financial support to pursue graduate studies at Stanford while participa\r\n ting in engaging experiences that prepare scholars to be visionary\\, courag\r\n eous\\, and collaborative leaders who address complex challenges facing the \r\n world.\\n\\nEligibility\\n\\nYou are eligible to apply to the 2027 cohort of Kn\r\n ight-Hennessy Scholars if you earned (or will earn) your bachelor's degree \r\n in 2020 or later. For military (active or veteran) applicants\\, you are eli\r\n gible if you earned your bachelor's degree in 2018 or later. Additionally\\,\r\n  current Stanford PhD students in the first year of enrollment may apply if\r\n  starting at KHS in the second year of PhD enrollment.\\n\\nDeadline\\n\\nThe K\r\n HS application to join the 2026 cohort is now closed. The KHS application t\r\n o join the 2027 cohort will open in summer 2026. \\n\\nParking\\n\\nParking at \r\n Stanford University is free after 4:00 pm Monday-Friday. We recommend you u\r\n se the Tressider Lot or street parking. Please visit Stanford Transportatio\r\n n for more information.\\n\\nYou will receive details on how to join the even\r\n t by email following registration.\r\nDTEND:20260523T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260522T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Info session for Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51934581403697\r\nURL:https://events.stanford.edu/event/copy-of-info-session-for-knight-henne\r\n ssy-scholars-5058\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260523\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294457843\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260523\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355587108\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260523T183000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078582720\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance,Conference/Symposium\r\nDESCRIPTION:Listening in the Past: Sound\\, Space\\, and the Aesthetics of th\r\n e Sublime\\n\\nJoin us for a two-day international gathering of researchers\\,\r\n  scholars and artists with interests in archaeoacoustics\\, paleoacoustics\\,\r\n  musicology\\, and music perception and cognition. Schedule (TBA) will inclu\r\n de presentations\\, performances\\, and demonstrations.\\n\\nDates:\\nFriday\\, M\r\n ay 22: 12pm – 4pm\\, concert at 7pm\\nSaturday\\, May 23: 10am – 5pm \\n\\nAdmis\r\n sion Information\\n\\nFree admission\r\nDTEND:20260524T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T170000Z\r\nGEO:37.421012;-122.172383\r\nLOCATION:The Knoll\\, CCRMA Stage & Listening Room\r\nSEQUENCE:0\r\nSUMMARY:CCRMA Presents: 2026 Symposium on Music and The Brain – Day 2\r\nUID:tag:localist.com\\,2008:EventInstance_52205386844423\r\nURL:https://events.stanford.edu/event/ccrma-symposium-music-and-brain-2026-\r\n 2\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260523T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699881679\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260523T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692019508\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260523T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682880950\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260523T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708365095\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260523T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260523T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668894232\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260524\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294458868\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260524\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355588133\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260524T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809536891\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Dr. T.L. Steinwert\\, Dea\r\n n for Religious & Spiritual Life\\, preaching.\\n\\nUniversity Public Worship \r\n gathers weekly for the religious\\, spiritual\\, ethical\\, and moral formatio\r\n n of the Stanford community. Rooted in the history and progressive Christia\r\n n tradition of Stanford’s historic Memorial Church\\, we cultivate a communi\r\n ty of compassion and belonging through ecumenical Christian worship and occ\r\n asional multifaith celebrations.\r\nDTEND:20260524T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. D\r\n r. T.L. Steinwert Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51969417157704\r\nURL:https://events.stanford.edu/event/upw-with-dean-t-l-steinwert-preaching\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260524T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543409190\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260524T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692023605\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260524T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682881975\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260524T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708367144\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260524T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260524T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668896281\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260525\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA - First day of clerkships for Period 12.\r\nUID:tag:localist.com\\,2008:EventInstance_49464827780150\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-12-1275\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The university is closed to recognize an official holiday on th\r\n is date\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260525\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Memorial Day\r\nUID:tag:localist.com\\,2008:EventInstance_51754587650909\r\nURL:https://events.stanford.edu/event/copy-of-presidents-day-3050\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the Memorial Day holiday. There are no classes.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260525\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Memorial Day (No Classes)\r\nUID:tag:localist.com\\,2008:EventInstance_50472525887603\r\nURL:https://events.stanford.edu/event/memorial-day-no-classes-8622\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260525\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Memorial Day (holiday\\, no classes).\r\nUID:tag:localist.com\\,2008:EventInstance_49464422900712\r\nURL:https://events.stanford.edu/event/memorial-day-holiday-no-classes-5284\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260526\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grade rosters open for Spring quarter.\r\nUID:tag:localist.com\\,2008:EventInstance_49464834382336\r\nURL:https://events.stanford.edu/event/grade-rosters-open-for-spring-quarter\r\n -8860\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the grade roster opens for the current quarter.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260526\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Grade Rosters Open\r\nUID:tag:localist.com\\,2008:EventInstance_50472526013564\r\nURL:https://events.stanford.edu/event/spring-quarter-grade-rosters-open-276\r\n 7\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260527T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260526T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222801156\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260527T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260526T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310157930\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Good sleep is critical to a healthy lifestyle. Studies have sho\r\n wn that poor sleep is linked to higher body weight\\, greater risk of heart \r\n disease\\, stroke\\, type 2 diabetes\\, inflammation\\, and depression\\, while \r\n good sleep can improve concentration and productivity\\, athletic performanc\r\n e\\, and immune function. Yet for many of us\\, a good night's sleep remains \r\n an elusive dream. One study by the CDC found that more than a third of Amer\r\n ican adults are not getting enough sleep or good quality sleep on a regular\r\n  basis.\\n\\nJoin us in this noontime webinar to explore the science of sleep\r\n . Learn how sleep is related to the core pillars of health -- exercise\\, di\r\n et\\, and stress resilience. Gain information about what constitutes good sl\r\n eep and how to spot common sleep disruptions. Finally\\, learn evidence-base\r\n d techniques to improve sleep\\, leading to better health\\, resiliency\\, and\r\n  quality of life.\\n\\nThis class will be recorded and a one-week link to the\r\n  recording will be shared with all registered participants. To receive ince\r\n ntive points\\, attend at least 80% of the live session or listen to the ent\r\n ire recording within one week.  Request disability accommodations and acces\r\n s info.\\n\\nClass details are subject to change.\r\nDTEND:20260526T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260526T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Sleep Your Way to Health and Happiness\r\nUID:tag:localist.com\\,2008:EventInstance_52220232690631\r\nURL:https://events.stanford.edu/event/sleep-your-way-to-health-and-happines\r\n s\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260526T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260526T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491634091\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260527T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663090108\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:This event is sponsored by the Center for South Asia.\\n\\nAbout \r\n the event\\nThe breakup of Pakistan in 1971 produced not only a new state\\, \r\n Bangladesh\\, but also a profound crisis of citizenship. While thousands of \r\n Pakistani soldiers became prisoners of war in Bangladesh and India\\, a para\r\n llel process unfolded within Pakistan: Bengalis in (West) Pakistan were rec\r\n ast from citizens into hostages and later internees. This talk explains the\r\n  internment of Bengalis between 1971 and 1974\\, tracing how state power red\r\n efined belonging through suspicion\\, confinement\\, and exclusion. It argues\r\n  that the aftermath of 1971 exposed the fragility of national identity and \r\n reveals how political crises can rapidly transform citizens into perceived \r\n enemies.\\n\\nAbout the speaker\\nIlyas Chattha is Associate Professor of Hist\r\n ory at LUMS. He is the author of Citizens to Traitors: Bengali Internment i\r\n n Pakistan\\, 1971–1974 (Cambridge University Press\\, 2025)\\; The Punjab Bor\r\n derland (Cambridge University Press\\, 2022)\\; and Partition and Locality: V\r\n iolence (Oxford University Press\\, 2012). His upcoming work is on the Evacu\r\n ee and Enemy Property in Pakistan.\r\nDTEND:20260527T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T003000Z\r\nGEO:37.426792;-122.164842\r\nLOCATION:Encina Commons\\, 123\r\nSEQUENCE:0\r\nSUMMARY:Book Talk: Citizens to traitors: Bengali Internment in Pakistan 197\r\n 1-1974\r\nUID:tag:localist.com\\,2008:EventInstance_52252175614194\r\nURL:https://events.stanford.edu/event/ilyas-ahmad-chattha-talk\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260527T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622325141\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260527\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294462967\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260527\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355590182\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:We are excited to host Stanford’s 2nd Education Data Science Co\r\n nference May 27-28\\, bringing together educators\\, researchers\\, and policy\r\n makers to explore what education data science research can—and should—be in\r\n  an era of rapidly advancing technology. As generative AI makes rich educat\r\n ional data feel immediately actionable\\, it also raises pressing questions \r\n around validity\\, bias\\, privacy\\, and pedagogical judgment. This conferenc\r\n e provides a forum to engage these opportunities and challenges through dia\r\n logue\\, collaboration\\, and cutting-edge research.\\n\\nThe program will feat\r\n ure a wide array of presentations on:\\n\\nBridging research and practice: Re\r\n search–practice partnerships with educators\\, leaders\\, and policymakers\\n\\\r\n nLLMs + multimodal/linked data: Integrating text\\, audio\\, video\\, logs\\, s\r\n ensors\\, and administrative data\\n\\nScaling\\, transferability\\, and reprodu\r\n cibility: Transparent pipelines\\, documentation\\, and code (where feasible)\r\n \\n\\nEquity\\, ethics\\, privacy\\, and global perspectives: Fairness\\, governa\r\n nce\\, and innovations in data-sparse contexts\\n\\nMore details on attending \r\n the event can be found on the conference website: edsconference.stanford.ed\r\n u. If you are interested in presenting\\, please go to the conference websit\r\n e for details about how to submit an abstract for consideration by January \r\n 5.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260527\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Education Data Science Conference \r\nUID:tag:localist.com\\,2008:EventInstance_51454105357994\r\nURL:https://events.stanford.edu/event/the-education-data-science-conference\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260527T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105032327\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260528T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222803205\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260528T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310159979\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Lecture/Presentation/Talk\r\nDESCRIPTION:Microbiology & Immunology Wednesday Seminar: Einav and Sarnow L\r\n abs\\, TBD \"TBA\"/TBD\\, \"TBA\"\r\nDTEND:20260527T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T193000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\\, B060\r\nSEQUENCE:0\r\nSUMMARY:Microbiology & Immunology Wednesday Seminar: Einav and Sarnow Labs\\\r\n , TBD \"TBA\"/TBD\\, \"TBA\"\r\nUID:tag:localist.com\\,2008:EventInstance_51144471943513\r\nURL:https://events.stanford.edu/event/microbiology-immunology-wednesday-sem\r\n inar-einav-and-sarnow-labs-tbd-tbatbd-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260528T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743797735\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Grief after loss can overwhelm us with a host of strong emotion\r\n s\\, numbness\\, and confusion. While resilience often emerges over time\\, he\r\n aling can also be actively nurtured through attention\\, expression\\, and ca\r\n re. Expressive art can be a welcome resource during this difficult time\\, a\r\n llowing for a deepened connection with one’s lost loved one\\, a release of \r\n pain\\, and an opportunity for soothing.\\n\\nJoin us for a free\\, two-hour on\r\n line workshop for anyone navigating grief\\, where you will engage with grie\r\n f and healing through hands-on expressive arts activities\\, honoring both y\r\n our loved one’s influence in your life and your evolving self. No art exper\r\n ience is needed\\, only a willingness to engage with the creative process at\r\n  your own pace\\, in a supportive and compassionate space. A list of simple \r\n art supplies needed for the class will be shared with your class confirmati\r\n on.\\n\\nThis class will not be recorded. Attendance requirement for incentiv\r\n e points - at least 80% of the live session.  Request disability accommodat\r\n ions and access info.\\n\\nInstructor: Christine Kovach\\, LCSW\\, is a license\r\n d clinical social worker specializing in grief and loss. She has 30 years o\r\n f experience in hospice social work and grief counseling. She is currently \r\n a bereavement services manager with Mission Hospice serving the Peninsula a\r\n s well as Hope Hospice in the Tri-Valley East Bay\\, both affiliates of By t\r\n he Bay Health.\\n\\nClass details are subject to change.\r\nDTEND:20260528T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260527T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Art for Healing through Grief\r\nUID:tag:localist.com\\,2008:EventInstance_52220232752077\r\nURL:https://events.stanford.edu/event/art-for-healing-through-grief\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260528T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379392717\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260528\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294463992\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260528\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355591207\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:We are excited to host Stanford’s 2nd Education Data Science Co\r\n nference May 27-28\\, bringing together educators\\, researchers\\, and policy\r\n makers to explore what education data science research can—and should—be in\r\n  an era of rapidly advancing technology. As generative AI makes rich educat\r\n ional data feel immediately actionable\\, it also raises pressing questions \r\n around validity\\, bias\\, privacy\\, and pedagogical judgment. This conferenc\r\n e provides a forum to engage these opportunities and challenges through dia\r\n logue\\, collaboration\\, and cutting-edge research.\\n\\nThe program will feat\r\n ure a wide array of presentations on:\\n\\nBridging research and practice: Re\r\n search–practice partnerships with educators\\, leaders\\, and policymakers\\n\\\r\n nLLMs + multimodal/linked data: Integrating text\\, audio\\, video\\, logs\\, s\r\n ensors\\, and administrative data\\n\\nScaling\\, transferability\\, and reprodu\r\n cibility: Transparent pipelines\\, documentation\\, and code (where feasible)\r\n \\n\\nEquity\\, ethics\\, privacy\\, and global perspectives: Fairness\\, governa\r\n nce\\, and innovations in data-sparse contexts\\n\\nMore details on attending \r\n the event can be found on the conference website: edsconference.stanford.ed\r\n u. If you are interested in presenting\\, please go to the conference websit\r\n e for details about how to submit an abstract for consideration by January \r\n 5.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260528\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Education Data Science Conference \r\nUID:tag:localist.com\\,2008:EventInstance_51454105359019\r\nURL:https://events.stanford.edu/event/the-education-data-science-conference\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDTEND:20260528T170000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Professoriate: Deep Dive\r\nUID:tag:localist.com\\,2008:EventInstance_51314594533964\r\nURL:https://events.stanford.edu/event/professoriate-deep-dive\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260529T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222804230\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260529T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310161004\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Note: This seminar is still to be confirmed and may be canceled\r\n  or rescheduled. Stay tuned for updates.\\n\\nJoin the speaker for coffee\\, c\r\n ookies\\, and conversation before the talk\\, starting at 11:45am.\\n\\nTalk ti\r\n tle to be announcedAbstract coming soon\\n\\n \\n\\nHaim Sompolinsky\\, PhDProfe\r\n ssor\\, Harvard University\\n\\nVisit lab website\\n\\nHosted by Feng Chen (Druc\r\n kmann Lab)\\n\\n \\n\\nSign up for Speaker Meet-upsEngagement with our seminar \r\n speakers extends beyond the lecture. On seminar days\\, invited speakers mee\r\n t one-on-one with faculty members\\, have lunch with a small group of traine\r\n es\\, and enjoy dinner with a small group of faculty and the speaker's host.\r\n \\n\\nIf you’re a Stanford faculty member or trainee interested in participat\r\n ing in these Speaker Meet-up opportunities\\, click the button below to expr\r\n ess your interest. Depending on availability\\, you may be invited to join t\r\n he speaker for one of these enriching experiences.\\n\\nSpeaker Meet-ups Inte\r\n rest Form\\n\\n About the Wu Tsai Neurosciences Seminar SeriesThe Wu Tsai Neu\r\n rosciences Institute seminar series brings together the Stanford neuroscien\r\n ce community to discuss cutting-edge\\, cross-disciplinary brain research\\, \r\n from biochemistry to behavior and beyond.\\n\\nTopics include new discoveries\r\n  in fundamental neurobiology\\; advances in human and translational neurosci\r\n ence\\; insights from computational and theoretical neuroscience\\; and the d\r\n evelopment of novel research technologies and neuro-engineering breakthroug\r\n hs.\\n\\nUnless otherwise noted\\, seminars are held Thursdays at 12:00 noon P\r\n T.\\n\\nSign up to learn about all our upcoming events\r\nDTEND:20260528T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T190000Z\r\nGEO:37.430178;-122.176478\r\nLOCATION:Stanford Neurosciences Building\r\nSEQUENCE:0\r\nSUMMARY:Neurosciences Seminar: Haim Sompolinsky [to be confirmed] - Talk Ti\r\n tle TBA\r\nUID:tag:localist.com\\,2008:EventInstance_50539423159286\r\nURL:https://events.stanford.edu/event/neurosciences-seminar-haim-sompolinsk\r\n y-talk-title-tba\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260528T191500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762196281\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260528T194500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794496801\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:Join us for the 5th annual Rosenkranz Global Health Policy Symp\r\n osium May 28\\, 2026. The symposium will begin with a panel discussion of gl\r\n obal health leaders\\, followed by a keynote featuring Dr. Chelsea Clinton i\r\n n conversation with Secretary Condoleezza Rice\\, exploring the current land\r\n scape and future directions for global health.\r\nDTEND:20260529T114500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T194500Z\r\nGEO:37.427319;-122.164625\r\nLOCATION:Encina Hall\\, Bechtel Conference Center\r\nSEQUENCE:0\r\nSUMMARY:2026 Rosenkranz Global Health Policy Symposium\r\nUID:tag:localist.com\\,2008:EventInstance_52278346664700\r\nURL:https://events.stanford.edu/event/2026-rosenkranz-global-health-policy-\r\n symposium\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260528T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491635116\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260529T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127743797736\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDTEND:20260528T213000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY:Global Environmental Policy Seminar with Nick Ryan\r\nUID:tag:localist.com\\,2008:EventInstance_50710697083279\r\nURL:https://events.stanford.edu/event/global-environmental-policy-seminar-w\r\n ith-nick-ryan\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Creative Writing Program is pleased to announce this year's\r\n  Undergraduate Prize Reading.\\n\\nJoin us as we honor the recipients of the \r\n 2025-26 Creative Writing Undergraduate Prizes and hear a selection of the v\r\n arious winning pieces.\\n\\nWe extend our warmest thanks to all who submitted\r\n  their writing. As always\\, our program is thrilled to spend time reading t\r\n he collective polished work of the undergraduate students. Learn more about\r\n  the prizes here.\\n\\nThis event is open to Stanford affiliates and the gene\r\n ral public. Registration is encouraged but not required\\; registration form\r\n  to follow.\r\nDTEND:20260529T010000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260528T230000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Building 460\\, Margaret Jacks Hall\\, Room 426\\, Terrace Room\r\nSEQUENCE:0\r\nSUMMARY:Undergraduate Prize Reading\r\nUID:tag:localist.com\\,2008:EventInstance_50721645809094\r\nURL:https://events.stanford.edu/event/undergraduate-prize-reading-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260529T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404978178\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Veronica Roberts\\, John and Jill Freidenrich Director\\, Ca\r\n ntor Arts Center for this special highlights tour of Jeremy Frey: Woven.\\n\\\r\n nJeremy Frey: Woven is the first solo museum exhibition of works by MacArth\r\n ur “genius” award winner Jeremy Frey\\, and the Cantor will be its only West\r\n  Coast venue. Renowned for his innovation in basketry\\, Frey has been advan\r\n cing his practice over the last twenty years. The exhibition will present o\r\n ver 30 objects\\, ranging from early point baskets and urchin forms to more \r\n recent monumental multicolored vases with meticulous porcupine quillwork\\, \r\n as well as new work in video\\, prints\\, and large-scale woven sculpture. Th\r\n e exhibition premiered at the Portland Museum of Art in May 2024\\, before t\r\n raveling to the Art Institute in Chicago and the Bruce Museum in Connecticu\r\n t. Jeremy Frey: Woven is organized by the Portland Museum of Art\\, Maine.\\n\r\n \\nAll public programs at the Cantor Arts Center are always free! Space for \r\n this program is limited\\; advance registration is recommended.\\n\\nRSVP here\r\n .\\n\\n________\\n\\nParking\\n\\nFree visitor parking (after 4pm) is available a\r\n long Lomita Drive as well as on the first floor of the Roth Way Garage Stru\r\n cture\\, located at the corner of Campus Drive West and Roth Way at 345 Camp\r\n us Drive\\, Stanford\\, CA 94305. From the Palo Alto Caltrain station\\, the C\r\n antor Arts Center is about a 20-minute walk or the free Marguerite shuttle \r\n will bring you to campus via the Y or X lines.\\n\\nDisability parking is loc\r\n ated along Lomita Drive near the main entrance of the Cantor Arts Center. A\r\n dditional disability parking is located on Museum Way and in Parking Struct\r\n ure 1 (Roth Way & Campus Drive). Please click here to view the disability p\r\n arking and access points. \\n\\n________\\n\\nAccessibility Information or Requ\r\n ests\\n\\nCantor Arts Center at Stanford University is committed to ensuring \r\n our programs are accessible to everyone. To request access information and/\r\n or accommodations for this event\\, please complete this form at least one w\r\n eek prior to the event: museum.stanford.edu/access.\\n\\nFor questions\\, plea\r\n se contact disability.access@stanford.eduor D Fukunaga-Brates\\, fukunaga@st\r\n anford.edu.\\n\\n----------\\n\\nImage: Jeremy Frey (Passamaquoddy\\, born 1978)\r\n \\, Defensive\\, 2022\\, ash\\, sweetgrass\\, and dye\\, 12 1/2 x 7 1/2 x 7 1/2 i\r\n nches. Collection of Carole Katz\\, California. © Jeremy Frey. Image courtes\r\n y Eric Stoner\r\nDTEND:20260529T020000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T010000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Evening Curator Talk | Jeremy Frey: Woven\r\nUID:tag:localist.com\\,2008:EventInstance_52057936781415\r\nURL:https://events.stanford.edu/event/copy-of-lunchtime-curator-talk-jeremy\r\n -frey-woven-317\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260529\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294466041\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260529\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355592232\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260529\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848823952\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260529\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472294777174\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day of law classes. See the Law School academi\r\n c calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260529\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Last Day of Law Classes\r\nUID:tag:localist.com\\,2008:EventInstance_50472526133381\r\nURL:https://events.stanford.edu/event/spring-quarter-last-day-of-law-classe\r\n s-70\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a late application to graduate a\r\n t the end of spring quarter. ($50 fee)\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260529\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Late Application Deadline for Degree Conferral\r\nUID:tag:localist.com\\,2008:EventInstance_50472526248079\r\nURL:https://events.stanford.edu/event/spring-quarter-late-application-deadl\r\n ine-for-degree-conferral\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260530T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817901330\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260529T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802463499\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260529T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699882704\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260530T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222805255\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260530T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310161005\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Do you spend several hours of your day at a desk\\, on a compute\r\n r\\, or on your phone? Modern technology is amazing in so many ways\\, but it\r\n  is also wreaking havoc on your body. The good news is that there are simpl\r\n e ways to offset the impact of sitting.\\n\\nJoin us for an interactive webin\r\n ar where you'll learn how to seamlessly integrate simple yet highly effecti\r\n ve corrective exercises into your daily routine. Discover how excessive sit\r\n ting impacts your posture\\, mobility\\, and overall well-being\\, and gain pr\r\n actical strategies to strengthen\\, stretch\\, and mobilize your body. With j\r\n ust five minutes a day\\, you can improve flexibility and reduce tension and\r\n  discomfort in key areas like your hip flexors\\, lower back\\, shoulders\\, a\r\n nd neck.\\n\\nThese exercises can be performed by anyone\\, with no special cl\r\n othing or equipment required. You will be able to take part in interactive \r\n demonstrations at your work or home office\\, wearing your usual work clothi\r\n ng. Come away from this session with practical tools you can use right away\r\n  to increase your comfort and well-being at your desk.\\n\\nThis class will b\r\n e recorded and a one-week link to the recording will be shared with all reg\r\n istered participants. To receive incentive points\\, attend at least 80% of \r\n the live session or listen to the entire recording within one week.  Reques\r\n t disability accommodations and access info.\\n\\nClass details are subject t\r\n o change.\r\nDTEND:20260529T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Corrective Exercises for Desk Jockeys\r\nUID:tag:localist.com\\,2008:EventInstance_52220232850393\r\nURL:https://events.stanford.edu/event/corrective-exercises-for-desk-jockeys\r\n -6543\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260529T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682883000\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Breathing is a constant in our lives from the moment we are bor\r\n n. It is also a subtle mirror reflecting various physical and mental imbala\r\n nces.\\n\\nBreathing properly can allow us to live longer and healthier lives\r\n . Breathing poorly\\, by contrast\\, can exacerbate and even cause a laundry \r\n list of chronic diseases. By correcting and consciously working with our br\r\n eath\\, we can calm our minds at will and improve our overall wellness.\\n\\nI\r\n n this online class\\, we will focus on gaining a deeper understanding of ou\r\n r breath and its physiology\\, drawing both from modern science and the anci\r\n ent system of yoga. We will discuss the mechanics of proper breathing throu\r\n gh the conscious relaxation of the diaphragm. We will also explore some of \r\n the common unhealthy breathing habits that many tend to develop and practic\r\n e some effective breathing techniques and exercises to restore a state of b\r\n alance.\\n\\nThis class will not be recorded. Attendance requirement for ince\r\n ntive points - at least 80% of the live session.  Request disability accomm\r\n odations and access info.\\n\\nClass details are subject to change.\r\nDTEND:20260529T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260529T210000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:The Healing Power of Proper Breathing\r\nUID:tag:localist.com\\,2008:EventInstance_52220232900575\r\nURL:https://events.stanford.edu/event/the-healing-power-of-proper-breathing\r\n -1678\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260530\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294467066\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260530\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355594281\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260530\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848826001\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260530\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472294862171\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the Law School reading period. See the Law School a\r\n cademic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260530\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Reading Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472295121253\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-reading-per\r\n iod-4398\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Overview10:00 AM - 12:00 PM (PST) | 1:00 PM - 3:00 PM (EST)\\n\\n\r\n This webinar is designed for physicians\\, advanced practice providers\\, and\r\n  allied health professionals who care for people living with Atypical Parki\r\n nsonian Disorders (APDs). Featuring speakers from the CurePSP Centers of Ca\r\n re at Stanford University\\, University of California San Francisco\\, and Ce\r\n dars-Sinai Medical Center\\, the session will cover advances in diagnostic e\r\n valuation\\, evidence-based rehabilitation strategies\\, local support resour\r\n ces for patients and families\\, and developments in the rapidly evolving cl\r\n inical trial landscape. The goal is to deepen clinicians’ understanding of \r\n APD care and provide practical tools that can improve support\\, coordinatio\r\n n\\, and outcomes for this complex patient population.\\n\\nRegistrationFree t\r\n o all learners\\n\\nCreditsAMA PRA Category 1 Credits™ (2.00 hours)\\, ANCC Co\r\n ntact Hours (2.00 hours)\\, ASWB Clinical Continuing Education (ACE) credits\r\n  (2.00 hours)\\, Non-Physician Participation Credit (2.00 hours)\\n\\nTarget A\r\n udienceSpecialties - NeurologyProfessions - Fellow/Resident\\, Non-Physician\r\n \\, Nurse\\, Physical Therapist\\, Physician\\, Social Worker\\, Speech Language\r\n  Pathologist ObjectivesAt the conclusion of this activity\\, learners should\r\n  be able to:\\n1. Utilize a systematic diagnostic approach that enhances con\r\n fidence in achieving an early provisional diagnosis of Atypical Parkinsonia\r\n n Disorders (APDs).\\n2. Identify appropriate ancillary diagnostic tools to \r\n increase confidence in ordering and interpreting complex diagnostics\\, part\r\n icularly for challenging cases.\\n3. Recognize the essential components and \r\n specific functions of the multidisciplinary team (neurology specific physic\r\n al therapy and speech therapy\\, social work) to ensure comprehensive sympto\r\n matic management for people living with APDs.\\n4. Integrate available local\r\n  and national support and educational resources into the patient and family\r\n  care plan to meet the critical need for disease-specific knowledge and sup\r\n port.\\n5. Develop strategies to facilitate patient access to academic cente\r\n rs and clinical trials by utilizing reliable communication channels to addr\r\n ess logistical barriers and improve knowledge of available advanced researc\r\n h opportunities.\\n\\nAccreditationIn support of improving patient care\\, Sta\r\n nford Medicine is jointly accredited by the Accreditation Council for Conti\r\n nuing Medical Education (ACCME)\\, the Accreditation Council for Pharmacy Ed\r\n ucation (ACPE)\\, and the American Nurses Credentialing Center (ANCC)\\, to p\r\n rovide continuing education for the healthcare team. \\n \\nCredit Designatio\r\n n \\nAmerican Medical Association (AMA) \\nStanford Medicine designates this \r\n Live Activity for a maximum of 2.00 AMA PRA Category 1 CreditsTM.  Physicia\r\n ns should claim only the credit commensurate with the extent of their parti\r\n cipation in the activity. \\n\\nAmerican Nurses Credentialing Center (ANCC) \\\r\n nStanford Medicine designates this live activity for a maximum of 2 ANCC co\r\n ntact hours.  \\n\\nASWB Approved Continuing Education Credit (ACE) – Social \r\n Work Credit \\nAs a Jointly Accredited Organization\\, Stanford Medicine is a\r\n pproved to offer social work continuing education by the Association of Soc\r\n ial Work Boards (ASWB) Approved Continuing Education (ACE) program. Organiz\r\n ations\\, not individual courses\\, are approved under this program. Regulato\r\n ry boards are the final authority on courses accepted for continuing educat\r\n ion credit. Social workers completing this activity receive 2 continuing ed\r\n ucation credits.\\n\\nInterprofessional Continuing Education (IPCE)\\nThis act\r\n ivity was planned by and for the healthcare team\\, and learners will receiv\r\n e 2 Interprofessional Continuing Education (IPCE) credits for learning and \r\n change.\\n\\nPhysical Therapy and Speech Language Pathologist Credit (PT / SL\r\n P)\\nStanford Health Care Department of Rehabilitation is an approved provid\r\n er for physical therapy and speech therapy for courses that meet the requir\r\n ements set forth by the respective California Boards. This course is approv\r\n ed for 2.00 hours CEU for PT and SLP.\r\nDTEND:20260530T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260530T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Atypical Parkinsonian Disorders: Outreach\\, Access\\, and Education\r\nUID:tag:localist.com\\,2008:EventInstance_52144133772826\r\nURL:https://events.stanford.edu/event/atypical-parkinsonian-disorders-outre\r\n ach-access-and-education\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260530T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260530T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699884753\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260530T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260530T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692026678\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260530T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260530T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682885049\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260530T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260530T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708368169\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260530T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260530T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668899355\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260531\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294468091\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260531\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355595306\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260531\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848828050\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260531\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472294926684\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the Law School reading period. See the Law School a\r\n cademic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260531\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Reading Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472295224683\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-reading-per\r\n iod-4398\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260531T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809537916\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Multifaith Service with Rabbi Ilana Goldhaber-Gordon\r\n \\, Associate Dean for Religious & Spiritual Life and Campus Rabbi\\, preachi\r\n ng.\\n\\nUniversity Public Worship gathers weekly for the religious\\, spiritu\r\n al\\, ethical\\, and moral formation of the Stanford community. Rooted in the\r\n  history and progressive Christian tradition of Stanford’s historic Memoria\r\n l Church\\, we cultivate a community of compassion and belonging through ecu\r\n menical Christian worship and occasional multifaith celebrations.\r\nDTEND:20260531T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Multifaith Service with Rabbi\r\n  Ilana Goldhaber-Gordon Preaching\r\nUID:tag:localist.com\\,2008:EventInstance_51958687451711\r\nURL:https://events.stanford.edu/event/upw-with-rabbi-ilana\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260531T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692030775\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260531T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682886074\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Welcome to Sankofa Sunday: University Praise & Worship at Stanf\r\n ord! The history of Black Church at Stanford dates back to 1989 when severa\r\n l students and the then Associate Dean Rev. Floyd Thompkins formed a worshi\r\n pping community to meet the spiritual and cultural yearnings of the Black C\r\n ommunity at Stanford. After a robust History the service was discontinued u\r\n ntil 2022 when the need once again led by students and staff began to reviv\r\n e Black Church as an occasional service once a month.\r\nDTEND:20260531T213000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T203000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Sankofa Sundays: University Praise & Worship\r\nUID:tag:localist.com\\,2008:EventInstance_51958646501400\r\nURL:https://events.stanford.edu/event/sankofa-sundays-university-praise-wor\r\n ship\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260531T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708370218\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260531T230000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260531T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 3 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51756668901404\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-1879\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260601\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848830099\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260601\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Period 1 clerkship drop deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_51783499132184\r\nURL:https://events.stanford.edu/event/period-1-clerkship-drop-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260601\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472294954333\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the Law School reading period. See the Law School a\r\n cademic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260601\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Reading Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472295307628\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-reading-per\r\n iod-4398\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260602T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260601T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222807304\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260602T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260601T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310162030\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Our ears do much more than help us hear. They support balance\\,\r\n  spatial awareness\\, and our ability to stay connected to the world around \r\n us.\\n\\nIn this engaging and practical free webinar\\, you’ll learn the essen\r\n tials of ear and hearing health\\, including basic ear anatomy and how the i\r\n nner ear plays a vital role in both hearing and balance. Through lecture\\, \r\n demonstrations\\, and real-world examples\\, we’ll explore topics including s\r\n afe ear-wax care\\, why sudden changes in hearing should never be ignored\\, \r\n and how everyday medications can affect hearing and balance. We’ll also dis\r\n cuss noise-induced hearing loss\\, tinnitus (ringing in the ears)\\, and othe\r\n r hearing-related signs that signal when it’s time to seek medical attentio\r\n n. Ample time will be set aside for questions.\\n\\nTake away clear\\, actiona\r\n ble strategies for protecting your hearing\\, guidance on when to schedule a\r\n  hearing test\\, and practical tools to reduce listening fatigue and support\r\n  lifelong ear health.\\n\\nThis class will be recorded and a one-week link to\r\n  the recording will be shared with all registered participants. To receive \r\n incentive points\\, attend at least 80% of the live session or listen to the\r\n  entire recording within one week.  Request disability accommodations and a\r\n ccess info.\\n\\nClass details are subject to change.\r\nDTEND:20260601T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260601T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Listen Up - Essentials of Ear and Hearing Health\r\nUID:tag:localist.com\\,2008:EventInstance_52220232948709\r\nURL:https://events.stanford.edu/event/listen-up-essentials-of-ear-and-heari\r\n ng-health\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Global Risk team is offering virtual pre-departure resource\r\n  review sessions specifically for internationally traveling faculty\\, resea\r\n rchers.\\n\\nIn this session\\, Global Risk will cover\\n\\nhigh-level travel ri\r\n sk overview and mitigations\\n\\ncurrent events impacting travel\\n\\ntraveling\r\n  as a non-U.S. citizen\\n\\ntraveling to destinations with\\n\\nrestrictive pri\r\n vacy laws\\n\\ndata security concerns\\n\\nelevated medical and security risks\\\r\n n\\nincident response processes and resources\\n\\ncampus services available t\r\n o support them\\, their research\\, and their work.\\n\\n \\n\\nThe session will \r\n be 30 minutes\\, with the option to remain for an optional Q&A.\r\nDTEND:20260601T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260601T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Global Risk Resource Review for Faculty\\, Researchers (June)\r\nUID:tag:localist.com\\,2008:EventInstance_51808358785762\r\nURL:https://events.stanford.edu/event/global-risk-resource-review-for-facul\r\n ty-researchers-june\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Begin the week with clarity and ease in a space dedicated to qu\r\n iet reflection and contemplation. This all-levels class includes gentle str\r\n etching\\, mindful breathwork\\, and a guided yoga nidra relaxation for stres\r\n s relief and nervous system reset. Open to students\\, faculty\\, and staff—f\r\n ree of charge. Bring a yoga mat and a friend\\, and leave feeling balanced a\r\n nd ready for the week ahead.\\n\\nSara Elizabeth Ivanhoe is a Doctoral Candid\r\n ate in Yoga Philosophy at the Graduate Theological Union\\, writing her diss\r\n ertation on yoga and meditation for sleep. With nearly 30 years of teaching\r\n  experience\\, she holds a Master’s in Yoga Studies from Loyola Marymount Un\r\n iversity and completed three 500-hour Yoga Teacher Trainings. She is the Fo\r\n unding Director of YogaUSC\\, Co-Director of USC Yoga Teacher Training\\, and\r\n  a recipient of USC's Sustainability Across Curriculum grant. In 2024\\, she\r\n  began teaching at Stanford\\, focusing on movement\\, meditation\\, and sleep\r\n .\r\nDTEND:20260602T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260602T003000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Candlelight Yoga in Memorial Church\r\nUID:tag:localist.com\\,2008:EventInstance_50818430663544\r\nURL:https://events.stanford.edu/event/candlelight-yoga-memorial-church\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260602\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848831124\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260602\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472294983006\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260602\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295391601\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-examination\r\n s-4482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260603T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260602T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222808329\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260603T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260602T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310163055\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260602T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260602T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491637165\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260603T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663091133\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Relax + Center with Yoga Class with Diane Saenz. A traditional\\\r\n , easy-to-learn system of Hatha Yoga which encourages proper breathing and \r\n emphasizes relaxation.  A typical class includes breathing exercises\\, warm\r\n -ups\\, postures and deep relaxation.  The focus is on a systematic and bala\r\n nced sequence that builds a strong foundation of basic asanas from which va\r\n riations may be added to further deepen the practice.  This practice is bot\r\n h for beginners and seasoned practitioners alike to help calm the mind and \r\n reduce tension.\\n\\nDiane Saenz (she/her) is a yoga instructor with more tha\r\n n 20 years of experience in the use of yoga and meditation to improve menta\r\n l and physical well-being.  Following a classical approach\\, she leans on a\r\n sana and pranayama as tools to invite participants into the present moment.\r\n   Diane completed her 500 hour level training with the International Sivana\r\n nda Yoga Vedanta Organization in South India\\, followed by specializations \r\n in adaptive yoga and yoga for kids.  She has taught adult and youth audienc\r\n es around the globe.\r\nDTEND:20260603T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Relax + Center with Yoga Tuesdays\r\nUID:tag:localist.com\\,2008:EventInstance_50818622326166\r\nURL:https://events.stanford.edu/event/relax-center-yoga_tuesdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294472190\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355597355\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848833173\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Last day of classes.\r\nUID:tag:localist.com\\,2008:EventInstance_49464856630439\r\nURL:https://events.stanford.edu/event/last-day-of-classes-6424\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Last opportunity to arrange Incomplete in a course\\, at last class.\r\nUID:tag:localist.com\\,2008:EventInstance_49464878874734\r\nURL:https://events.stanford.edu/event/last-opportunity-to-arrange-incomplet\r\n e-in-a-course-at-last-class-8971\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472295011679\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day marks the last day of classes (unless the class meets \r\n on Saturday)\\, except Law classes.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Last Day of Classes\r\nUID:tag:localist.com\\,2008:EventInstance_50472526346392\r\nURL:https://events.stanford.edu/event/spring-quarter-last-day-of-classes-12\r\n 78\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the last opportunity to arrange \"Incomplete\" in a c\r\n ourse\\, at the last class.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Last Day to Arrange Incomplete\r\nUID:tag:localist.com\\,2008:EventInstance_50472526445729\r\nURL:https://events.stanford.edu/event/spring-quarter-last-day-to-arrange-in\r\n complete\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260603\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295480693\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-examination\r\n s-4482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260603T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105033352\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260604T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222809354\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260604T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310164080\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:Enjoy lunchtime organ music in the glowing acoustic of Memorial\r\n  Church. University Organist Robert Huw Morgan will perform brief recitals\\\r\n , followed by light refreshments in the Round Room!\\n\\nThese free events ar\r\n e open to the public.\\n\\n12:15 - 12:45 pm | Concert\\n12:45 - 1:15 pm | Tea \r\n & cookies\r\nDTEND:20260603T201500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T191500Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Recitals & Communi-Tea \r\nUID:tag:localist.com\\,2008:EventInstance_51958777365868\r\nURL:https://events.stanford.edu/event/lunchtime-recitals-communi-tea\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260604T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768241081\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Step away from the rush of daily life and slow down through the\r\n  practice of nature journaling. In this hands-on\\, experiential workshop\\, \r\n you’ll explore simple ways to draw and write in response to the natural wor\r\n ld\\, building your own unique nature journal along the way. By combining wo\r\n rds\\, images\\, and observation\\, you’ll strengthen your ability to notice d\r\n etails\\, stay present in the moment\\, and capture memories of a special pla\r\n ce.\\n\\nThe session will begin indoors with an introduction to nature journa\r\n ling techniques and strategies\\, including brief demonstrations\\, warm-up e\r\n xercises\\, and examples to spark inspiration. From there\\, we’ll head outdo\r\n ors to “wander and wonder\\,” allowing curiosity and focused attention to gu\r\n ide your observations. You’ll have time to sketch\\, write\\, and record what\r\n  you notice\\, with gentle guidance in a supportive group setting. No prior \r\n art or journaling experience is needed. All materials are provided\\, though\r\n  you’re welcome to bring your own sketchbook or unlined notebook if you pre\r\n fer.\\n\\nThis class will take place in person on the Stanford University cam\r\n pus. Please dress comfortably for walking and being outside. Enrollment is \r\n limited\\, so register early to reserve your spot. Request disability accomm\r\n odations and access info.\\n\\n\\n\\nClass details are subject to change.\r\nDTEND:20260604T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260603T220000Z\r\nGEO:37.429309;-122.163547\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Wander and Wonder with the Nature Journal Experience\r\nUID:tag:localist.com\\,2008:EventInstance_52220233071601\r\nURL:https://events.stanford.edu/event/wander-and-wonder-with-the-nature-jou\r\n rnal-experience\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:This all-levels yoga class offers a balanced\\, accessible pract\r\n ice designed to support both physical ease and mental clarity. Classes typi\r\n cally integrate mindful movement\\, breath awareness\\, and simple contemplat\r\n ive elements to help release accumulated tension while maintaining stabilit\r\n y and strength. Postures are approached with options and modifications\\, ma\r\n king the practice appropriate for a wide range of bodies and experience lev\r\n els. Emphasis is placed on sustainable movement\\, nervous system regulation\r\n \\, and cultivating practices that translate beyond the mat and into daily l\r\n ife.\\n\\nSara Elizabeth Ivanhoe\\, M.A.\\, Ph.D.\\, earned her doctorate in Yog\r\n a Philosophy from the Graduate Theological Union. Her dissertation\\, In Sea\r\n rch of Sleep: A Comprehensive Study of Yoga Philosophy\\, Therapeutic Practi\r\n ce\\, and Improving Sleep in Higher Education\\, examines the integration of \r\n contemplative practices within university settings. She joined the Stanford\r\n  community in Spring 2024\\, where she has taught Sleep for Peak Performance\r\n  and Meditation through Stanford Living Education (SLED)\\, and currently te\r\n aches Yoga for Stress Management in the Department of Athletics\\, Physical \r\n Education\\, and Recreation (DAPER). Dr. Ivanhoe is the Founding Director Em\r\n eritus of YogaUSC and previously lectured in USC’s Mind–Body Department\\, w\r\n here she also served on faculty wellness boards. A practitioner and educato\r\n r since 1995\\, she has completed three 500-hour teacher training programs. \r\n She has served as the Yoga Spokesperson for Weight Watchers: Yoga\\, Yoga fo\r\n r Dummies\\, and Crunch: Yoga\\, and was the yoga columnist for Health magazi\r\n ne for three years. Her work has appeared in nearly every major yoga and we\r\n llness publication. In 2018\\, she co-created Just Breathe\\, a yoga\\, breath\r\n work\\, and meditation initiative in partnership with Oprah Magazine. She is\r\n  a recipient of USC’s Sustainability Across the Curriculumgrant and the Pau\r\n l Podvin Scholarship from the Graduate Theological Union. She currently ser\r\n ves as Interim Director of Events and Operations in Stanford’s Office for R\r\n eligious and Spiritual Life\\, where she also teaches weekly contemplative p\r\n ractice classes.\r\nDTEND:20260604T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, The Sanctuary in the CIRCLE\\, 3rd floor\r\nSEQUENCE:0\r\nSUMMARY:All-Levels Yoga Wednesdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969379394766\r\nURL:https://events.stanford.edu/event/all-levels-yoga-wednesday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294473215\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355598380\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Day before finals\\, no classes.\r\nUID:tag:localist.com\\,2008:EventInstance_49464887411321\r\nURL:https://events.stanford.edu/event/day-before-finals-no-classes-8824\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49464848835222\r\nURL:https://events.stanford.edu/event/end-quarter-period-4881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the day before finals. There are no classes.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Day Before Finals (No Classes)\r\nUID:tag:localist.com\\,2008:EventInstance_50472526558379\r\nURL:https://events.stanford.edu/event/spring-quarter-day-before-finals-no-c\r\n lasses-688\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Period\r\nUID:tag:localist.com\\,2008:EventInstance_50472295051616\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-period-91\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260604\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295552374\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-examination\r\n s-4482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260605T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222810379\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260605T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T190000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310165105\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260604T191500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762198330\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260604T194500Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794500898\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260604T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491639214\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260605T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768242106\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar,Conference/Symposium,Lecture/Presentation/Talk\r\nDTEND:20260604T213000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260604T201500Z\r\nGEO:37.42816;-122.175935\r\nLOCATION:Y2E2 Building\\, 300\r\nSEQUENCE:0\r\nSUMMARY: Environmental Behavioral Sciences Seminar with Rachel Wetts\r\nUID:tag:localist.com\\,2008:EventInstance_50710706018374\r\nURL:https://events.stanford.edu/event/environmental-behavioral-sciences-sem\r\n inar-8668\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Workshop\r\nDESCRIPTION:Evening Guided Meditation is designed to offer basic meditation\r\n  skills\\, to encourage regular meditation practice\\, to help deepen self-re\r\n flection\\, and to offer instructions on how meditation can be useful during\r\n  stressful and uncertain times.  All sessions are led by Andy Acker.\\n\\nOpe\r\n n to Stanford Affiliates. Free\\, no pre-registration is required.\r\nDTEND:20260605T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T003000Z\r\nGEO:37.425173;-122.170403\r\nLOCATION:Old Union\\, CIRCLE Sanctuary (3rd Floor)\r\nSEQUENCE:0\r\nSUMMARY:Guided Meditation Thursdays\r\nUID:tag:localist.com\\,2008:EventInstance_51969404980227\r\nURL:https://events.stanford.edu/event/yoga_thursdays_f2023\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294474240\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355600429\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49464914327639\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-4804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations run.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295673213\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-examinatio\r\n ns-7717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295598455\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-examination\r\n s-4482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (noon) to submit your university thesis\\, \r\n DMA final project\\, or PhD dissertation.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: University Thesis/Dissertation Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472526666932\r\nURL:https://events.stanford.edu/event/spring-quarter-university-thesisdisse\r\n rtation-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260605\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:University thesis\\, D.M.A. final project\\, or Ph.D. dissertation\\, \r\n last day to submit (noon).\r\nUID:tag:localist.com\\,2008:EventInstance_49464906102680\r\nURL:https://events.stanford.edu/event/university-thesis-dma-final-project-o\r\n r-phd-dissertation-last-day-to-submit-noon-5106\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260606T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817902355\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260605T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802464524\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260605T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699886802\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Inter-Arts Public Exhibition\\n\\nFeaturing the work of Honors in\r\n  the Arts and Inter-Arts Minor Seniors\\n\\nFriday\\, June 5 | noon– 4:30pm\\nL\r\n ive program starts @ 1pm\\n\\nRoble Arts Gym (375 Santa Teresa Street)\\n\\nFre\r\n e and open to the public\\n\\nThe twenty-one student artists in the 2025-26 H\r\n onors in the Arts and Inter-Arts Minor cohort have spent the academic year \r\n creating deeply innovative and interdisciplinary projects across a wide spe\r\n ctrum of media: creative writing including poetry\\, screenwriting\\, fiction\r\n \\, and creative non-fiction\\; visual arts including sculpture\\, photography\r\n \\, mixed media\\, and painting\\; film\\, dance and performance art\\; multimed\r\n ia installations\\, fashion design\\, and exhibition curation. We invite you \r\n to experience their work at a public exhibition on June 5. A brief live pro\r\n gram featuring readings by the creative writers will begin at 1pm.\r\nDTEND:20260605T233000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T190000Z\r\nGEO:37.426008;-122.174909\r\nLOCATION:Roble Gym\\, Roble Arts Gym (through the courtyard)\r\nSEQUENCE:0\r\nSUMMARY:Inter-Arts Public Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_52259349300455\r\nURL:https://events.stanford.edu/event/inter-arts-public-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Physical activity is a powerful medicine that can promote healt\r\n h and change the trajectory of aging. However\\, in the modern world\\, we ha\r\n ve drifted away from incorporating physical activity into our lives\\, and i\r\n t can be challenging to get the physical movement we need to maintain healt\r\n h and well-being.\\n\\nIn this noontime webinar\\, we will discuss how physica\r\n l activity can slow aging and how different types and amounts of activity c\r\n an optimize desired health and fitness outcomes. We will explore what scien\r\n tists have learned about the pathways of disease\\, the causes of aging\\, an\r\n d the ways in which exercise can play a role in slowing the aging process a\r\n nd improving longevity. We will also discuss realistic ways to overcome bar\r\n riers to movement and strategies to make regular physical activity a joyful\r\n  part of your daily life.\\n\\nThis class will be recorded and a one-week lin\r\n k to the recording will be shared with all registered participants. To rece\r\n ive incentive points\\, attend at least 80% of the live session or listen to\r\n  the entire recording within one week.  Request disability accommodations a\r\n nd access info.\\n\\nClass details are subject to change.\r\nDTEND:20260605T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Physical Activity for Longevity\r\nUID:tag:localist.com\\,2008:EventInstance_52220233119735\r\nURL:https://events.stanford.edu/event/physical-activity-for-longevity\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260605T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260605T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682887099\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Join us at Harmony House for IDA’s monthly First Fridays! A gat\r\n hering space for artists\\, students\\, and community to connect\\, unwind\\, a\r\n nd create together. Each month\\, we open our doors at the Harmony House  fo\r\n r an evening of conversation\\, art-making\\, and chill vibes over food and d\r\n rinks. Whether you’re here to meet new people\\, share your work\\, or just h\r\n ang out\\, First Fridays are a chance to slow down and be in creative commun\r\n ity.\r\nDTEND:20260606T020000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260606T000000Z\r\nGEO:37.424294;-122.173061\r\nLOCATION:Harmony House\r\nSEQUENCE:0\r\nSUMMARY:First Fridays at IDA (Social)\r\nUID:tag:localist.com\\,2008:EventInstance_50731549507028\r\nURL:https://events.stanford.edu/event/first-fridays-at-ida-social\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260606\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Application to Graduate opens for Summer.\r\nUID:tag:localist.com\\,2008:EventInstance_49463853857998\r\nURL:https://events.stanford.edu/event/application-to-graduate-opens-for-sum\r\n mer-3053\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260606\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294475265\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260606\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355601454\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260606\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49464926211366\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-4804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations run.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260606\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295770497\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-examinatio\r\n ns-7717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of Law School examinations. See the Law S\r\n chool academic calendar website for more information.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260606\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Law School Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295619960\r\nURL:https://events.stanford.edu/event/spring-quarter-law-school-examination\r\n s-4482\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260606T183000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260606T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078585794\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260606T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260606T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699887827\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260606T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260606T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692034872\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260606T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260606T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682888124\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260606T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260606T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708372267\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260607\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294476290\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260607\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355603503\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260607\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49464926213415\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-4804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations run.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260607\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295862658\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-examinatio\r\n ns-7717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the application process for graduating at the end of\r\n  summer quarter opens.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260607\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Application to Graduate Opens\r\nUID:tag:localist.com\\,2008:EventInstance_50472526804158\r\nURL:https://events.stanford.edu/event/summer-quarter-application-to-graduat\r\n e-opens\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260607T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260607T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809538941\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Religious/Spiritual\r\nDESCRIPTION:Ecumenical Christian Service with Rev. Glen Davis\\, Chaplain Af\r\n filiate\\, Preaching.\\n\\n \\n\\nUniversity Public Worship gathers weekly for t\r\n he religious\\, spiritual\\, ethical\\, and moral formation of the Stanford co\r\n mmunity. Rooted in the history and progressive Christian tradition of Stanf\r\n ord’s historic Memorial Church\\, we cultivate a community of compassion and\r\n  belonging through ecumenical Christian worship and occasional multifaith c\r\n elebrations. \\n\\nDoors open at 10:30 am.\r\nDTEND:20260607T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260607T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:University Public Worship: Ecumenical Christian Service with Rev. G\r\n len Davis\\, Chaplain Affiliate\\, Preaching.\r\nUID:tag:localist.com\\,2008:EventInstance_51969421918988\r\nURL:https://events.stanford.edu/event/upw-glen-davis\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260607T203000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260607T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692038969\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260607T210000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260607T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682890173\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260607T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260607T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740371470\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260607T223000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260607T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708374316\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260608\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294477315\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260608\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355605552\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260608\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49464926214440\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-4804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations run.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260608\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295900547\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-examinatio\r\n ns-7717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260609\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294479364\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260609\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355606577\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260609\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49464926216489\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-4804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations run.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260609\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295918980\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-examinatio\r\n ns-7717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260609T220000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260609T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491640239\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, June 9\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\, or \r\n Zoom for a presentation by Vinod Balachandran\\, MD\\, director of the Olayan\r\n  Center for Cancer Vaccines at Memorial Sloan Kettering Cancer Center.\\n\\nT\r\n he event is open to Stanford Cancer Institute members\\, postdocs\\, fellows\\\r\n , and students\\, as well as Stanford University and Stanford Medicine facul\r\n ty\\, trainees\\, and staff interested in basic\\, translational\\, clinical\\, \r\n and population-based cancer research.\\n\\nRegistration is encouraged.\r\nDTEND:20260610T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260609T230000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: Pancreatic Cance\r\n r - Survivors to Solutions\r\nUID:tag:localist.com\\,2008:EventInstance_51288516946786\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-pancreatic-cancer-survivors-to-solutions\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260610T013000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260610T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663092158\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Curious about pickling and fermentation? Ready to turn simple s\r\n pring vegetables into something tangy\\, crunchy\\, and full of flavor? Join \r\n us for a hands-on demonstration that explores the art\\, science\\, and every\r\n day logistics of fermenting vegetables at home.\\n\\nWe’ll walk through the p\r\n ractice and science of fermentation\\, explore several simple recipes\\, then\r\n  put our new knowledge and skills to work by making sauerkraut together\\, g\r\n iving you the confidence and know-how to start fermenting in your own kitch\r\n en.\\n\\nThis class is part of our Springtime in the Garden series. We’ll mee\r\n t at the O’Donohue Family Educational Farm on Stanford campus to explore wa\r\n ys to make the most of the garden’s abundant health benefits. Each class in\r\n  the series is offered independently\\, so you can register for the topics t\r\n hat spark your interest and fit your schedule. Join us for one or come for \r\n them all.\\n\\nThis is an in-person class and will not be recorded. Attendanc\r\n e at the live session is required to receive incentive points.  Request dis\r\n ability accommodations and access info.\\n\\nClass details are subject to cha\r\n nge.\r\nDTEND:20260610T020000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260610T003000Z\r\nGEO:37.426461;-122.182765\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Springtime in the Garden - Delicious and Easy Pickled Vegetables\r\nUID:tag:localist.com\\,2008:EventInstance_52220233257993\r\nURL:https://events.stanford.edu/event/springtime-in-the-garden-delicious-an\r\n d-easy-pickled-vegetables\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260610\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294480389\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260610\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355607602\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260610\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49464926218538\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-4804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations run.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260610\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472295941509\r\nURL:https://events.stanford.edu/event/spring-quarter-end-quarter-examinatio\r\n ns-7717\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit GSB grades for graduating studen\r\n ts.\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260610\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: GSB Grades for Graduating Students Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472526902472\r\nURL:https://events.stanford.edu/event/spring-quarter-gsb-grades-for-graduat\r\n ing-students-due\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260610T190000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260610T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105034377\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Global Risk team is offering virtual pre-departure resource\r\n  review sessions specifically for internationally traveling faculty\\, resea\r\n rchers.\\n\\nIn this session\\, Global Risk will cover\\n\\nhigh-level travel ri\r\n sk overview and mitigations\\n\\ncurrent events impacting travel\\n\\ntraveling\r\n  as a non-U.S. citizen\\n\\ntraveling to destinations with\\n\\nrestrictive pri\r\n vacy laws\\n\\ndata security concerns\\n\\nelevated medical and security risks\\\r\n n\\nincident response processes and resources\\n\\ncampus services available t\r\n o support them\\, their research\\, and their work.\\n\\n \\n\\nThe session will \r\n be 30 minutes\\, with the option to remain for an optional Q&A.\r\nDTEND:20260610T193000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260610T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Global Risk Resource Review for Faculty\\, Researchers (June)\r\nUID:tag:localist.com\\,2008:EventInstance_51808358786787\r\nURL:https://events.stanford.edu/event/global-risk-resource-review-for-facul\r\n ty-researchers-june\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260611T000000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260610T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768243131\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260611\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294481414\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083914Z\r\nDTSTART;VALUE=DATE:20260611\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355609651\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Universities are continuously refining how they manage faculty \r\n appointments\\, and staying current is key. In this session\\, we’ll break do\r\n wn effective approaches for submitting Visiting and Short-Term Faculty appo\r\n intment requests—what to do\\, what to avoid\\, and how to streamline the pro\r\n cess for faster turnaround. We’ll also review recent changes and updates im\r\n pacting these appointment types\\, ensuring department administrators leave \r\n with clear guidance\\, practical tips\\, and greater confidence in the submis\r\n sion process.\r\nDTEND:20260611T170000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260611T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Visiting and Short-Term Appointment Best Practices (V/ST/L)\r\nUID:tag:localist.com\\,2008:EventInstance_51314658286420\r\nURL:https://events.stanford.edu/event/visiting-and-short-term-appointment-b\r\n est-practices-vstl-6890\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Event Details\\n\\nJoin Maggie Dethloff\\, Assistant Curator of Ph\r\n otography and New Media\\, on this special highlights tour of Animal\\, Veget\r\n able\\, nor Mineral: Works by Miljohn Ruperto\\, the first large-scale solo m\r\n useum exhibition of Manila-born\\, Los Angeles-based artist Miljohn Ruperto \r\n (b. 1971).  RSVP HERE\\n\\nWorking across photography\\, video\\, animation\\, g\r\n enerative artificial intelligence\\, and other mediums\\, Ruperto explores th\r\n e ways humans have understood their place in the world. From digitally-crea\r\n ted fantastical botanical specimens printed as gelatin silver photographs t\r\n o immersive apocalyptic landscapes experienced in VR\\, Ruperto’s artworks h\r\n ighlight the elusiveness of knowledge and unsettle what we think we know ab\r\n out nature.\\n\\nAnimal\\, Vegetable\\, nor Mineral: Works by Miljohn Ruperto i\r\n s organized by the Cantor Arts Center and curated by Maggie Dethloff\\, Assi\r\n stant Curator of Photography and New Media.This exhibition is presented in \r\n conjunction with the museum’s Asian American Art Initiative (AAAI)\\n\\nAll p\r\n ublic programs at the Cantor Arts Center are always free! Space for this pr\r\n ogram is limited\\; advance registration is recommended.\\n\\n________\\n\\nPark\r\n ing\\n\\nPaid visitor parking is available along Lomita Drive as well as on t\r\n he first floor of the Roth Way Garage Structure\\, located at the corner of \r\n Campus Drive West and Roth Way at 345 Campus Drive\\, Stanford\\, CA 94305. F\r\n rom the Palo Alto Caltrain station\\, the Cantor Arts Center is about a 20-m\r\n inute walk or there the free Marguerite shuttle will bring you to campus vi\r\n a the Y or X lines.\\n\\nDisability parking is located along Lomita Drive nea\r\n r the main entrance of the Cantor Arts Center. Additional disability parkin\r\n g is located on Museum Way and in Parking Structure 1 (Roth Way & Campus Dr\r\n ive).\\n\\n________\\n\\nAccessibility Information or Requests\\n\\nCantor Arts C\r\n enter at Stanford University is committed to ensuring our programs are acce\r\n ssible to everyone. To request access information and/or accommodations for\r\n  this event\\, please complete this form at least one week prior to the even\r\n t: museum.stanford.edu/access.\\n\\nFor questions\\, please contact disability\r\n .access@stanford.eduor aguskin@stanford.edu\\n\\n \\n\\nImage: Miljohn Ruperto\\\r\n , What God Hath Wrought (Kairos)\\, from the series The Great Disappointment\r\n \\, in progress. Three animations with VR (color\\, sound). Courtesy of the a\r\n rtist and Micki Meng Gallery\\, San Francisco.\r\nDTEND:20260611T200000Z\r\nDTSTAMP:20260308T083914Z\r\nDTSTART:20260611T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Freidenrich Family Gallery\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Curator Talk | Animal\\, Vegetable\\, nor Mineral: Works by\r\n  Miljohn Ruperto\r\nUID:tag:localist.com\\,2008:EventInstance_51961235193933\r\nURL:https://events.stanford.edu/event/copy-of-lunchtime-curator-talk-miljoh\r\n n-ruperto\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260611T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260611T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762200379\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260611T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260611T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794502947\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260611T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260611T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491642288\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260612T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260611T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768244156\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:The Department of Art & Art History presents a spring screening\r\n  of short films by first-year MFA students in the Documentary Film program.\r\n  Q&A with filmmakers and reception to immediately follow the screening. \\n\\\r\n nVISITOR INFORMATION\\nThis event is open to Stanford affiliates and the gen\r\n eral public. Seating for this event is limited\\, and admission will be gran\r\n ted on a first-come\\, first-served basis. Please arrive to the venue early \r\n to secure your seat. Admission is free.\\n\\nOshman Hall is located within th\r\n e McMurtry Building on Stanford campus at 355 Roth Way. Visitor parking is \r\n available in designated areas and is free after 4pm on weekdays. Alternativ\r\n ely\\, take the Caltrain to Palo Alto Transit Center and hop on the free Sta\r\n nford Marguerite Shuttle. If you need a disability-related accommodation or\r\n  wheelchair access information\\, please contact Julianne White at jgwhite@s\r\n tanford.edu. \\n\\nConnect with the Department of Art & Art History! Subscrib\r\n e to our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260612T020000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260612T010000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:2026 Spring MFA Documentary Film Screening\r\nUID:tag:localist.com\\,2008:EventInstance_52269398669558\r\nURL:https://events.stanford.edu/event/2026-spring-mfa-documentary-film-scre\r\n ening\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294482439\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355610676\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:At-status enrollment deadline in order to receive stipend or financ\r\n ial aid refund within the first week of term.\r\nUID:tag:localist.com\\,2008:EventInstance_49463859255067\r\nURL:https://events.stanford.edu/event/at-status-enrollment-deadline-in-orde\r\n r-to-receive-stipend-or-financial-aid-refund-within-the-first-week-of-term-\r\n 115\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grades for graduating students due (11:59 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464960744049\r\nURL:https://events.stanford.edu/event/grades-for-graduating-students-due-11\r\n 59-pm-9156\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – INDE 297 session for clinical students (Period 12).\r\nUID:tag:localist.com\\,2008:EventInstance_49464929931872\r\nURL:https://events.stanford.edu/event/md-inde-297-session-for-clinical-stud\r\n ents-period-12-9509\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grades for graduating students.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Grades for Graduating Students Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472527104219\r\nURL:https://events.stanford.edu/event/spring-quarter-grades-for-graduating-\r\n students-due-698\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the undergraduate housing move-out date for all student\r\n s not involved in Commencement. See the Residential & Dining Enterprises Ca\r\n lendar for more information.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Undergraduate Housing Move-Out\r\nUID:tag:localist.com\\,2008:EventInstance_50472527212773\r\nURL:https://events.stanford.edu/event/spring-quarter-undergraduate-housing-\r\n move-out\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to meet the at-status enrollment to receiv\r\n e a stipend or financial aid refund within the first week of the term.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260612\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: At-Status Enrollment Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472527011027\r\nURL:https://events.stanford.edu/event/summer-quarter-at-status-enrollment-d\r\n eadline-5804\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260613T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260612T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817903380\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260612T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260612T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802465549\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260612T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260612T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699889876\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:Concern about memory loss and brain health is common. Fortunate\r\n ly\\, the science of brain health has made meaningful progress in recent yea\r\n rs\\, offering more clarity and hope than ever before.\\n\\nJoin us for an evi\r\n dence-based webinar to separate fact from fiction on brain health. Led by a\r\n  trained gerontologist\\, this session breaks down current brain health rese\r\n arch into clear\\, practical insights you can use right away. You’ll learn w\r\n hat research shows about lifestyle choices\\, cognitive activities\\, and eme\r\n rging risk factors that influence brain health across the lifespan\\, as wel\r\n l as which popular strategies may be less effective than commonly believed.\r\n \\n\\nLeave with a clearer understanding of how daily habits shape long-term \r\n cognitive vitality and practical\\, science-backed steps you can take at any\r\n  age.\\n\\nThis class will be recorded and a one-week link to the recording w\r\n ill be shared with all registered participants. To receive incentive points\r\n \\, attend at least 80% of the live session or listen to the entire recordin\r\n g within one week.  Request disability accommodations and access info.\\n\\nC\r\n lass details are subject to change.\r\nDTEND:20260612T200000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260612T190000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Brain Health Without the Hype\r\nUID:tag:localist.com\\,2008:EventInstance_52220233303055\r\nURL:https://events.stanford.edu/event/brain-health-without-the-hype\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260612T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260612T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682891198\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Performance\r\nDESCRIPTION:The annual Commencement recital\\, performed by University Organ\r\n ist Dr. Robert Huw Morgan\\n\\nAll are invited to attend\\, admission is free.\r\nDTEND:20260613T033000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260613T023000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:2026 Stanford Commencement Organ Concert\r\nUID:tag:localist.com\\,2008:EventInstance_52092965560748\r\nURL:https://events.stanford.edu/event/2026-stanford-commencement-organ-conc\r\n ert\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294484488\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355612725\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is Baccalaureate Saturday.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Baccalaureate Saturday\r\nUID:tag:localist.com\\,2008:EventInstance_50472527312110\r\nURL:https://events.stanford.edu/event/baccalaureate-saturday-3332\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:The GSB graduation ceremony is held on this day.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:GSB Graduation Ceremony\r\nUID:tag:localist.com\\,2008:EventInstance_50472527614215\r\nURL:https://events.stanford.edu/event/gsb-graduation-ceremony\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:The Law School graduation ceremony is held on this day. See the\r\n  Law School academic calendar website for more information.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Law School Graduation Ceremony\r\nUID:tag:localist.com\\,2008:EventInstance_50472527498494\r\nURL:https://events.stanford.edu/event/law-school-graduation-ceremony\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:The Medical School graduation ceremony is held on this day.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:School of Medicine Graduation Ceremony\r\nUID:tag:localist.com\\,2008:EventInstance_50472527711504\r\nURL:https://events.stanford.edu/event/school-of-medicine-graduation-ceremon\r\n y-31\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:School of Medicine Graduation Ceremony.\r\nUID:tag:localist.com\\,2008:EventInstance_49464965916618\r\nURL:https://events.stanford.edu/event/school-of-medicine-graduation-ceremon\r\n y-5252\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is Senior Class Day.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260613\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Senior Class Day\r\nUID:tag:localist.com\\,2008:EventInstance_50472527403254\r\nURL:https://events.stanford.edu/event/senior-class-day-2583\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260613T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260613T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699891925\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260613T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260613T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692043066\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260613T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260613T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682892223\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Film/Screening\r\nDESCRIPTION:The Department of Art & Art History presents a screening of fiv\r\n e thesis films produced by graduating second-year MFA students in the Docum\r\n entary Film Program. Q&A with filmmakers and reception to immediately follo\r\n w the screening. \\n\\nVISITOR INFORMATION\\nThis event is open to Stanford af\r\n filiates and the general public. Seating for this event is limited\\, and ad\r\n mission will be granted on a first-come\\, first-served basis. Please arrive\r\n  to the venue early to secure your seat. Admission is free.\\n\\nOshman Hall \r\n is located within the McMurtry Building on Stanford campus at 355 Roth Way.\r\n  Visitor parking is available in designated areas and is free on weekends. \r\n Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on th\r\n e free Stanford Marguerite Shuttle. If you need a disability-related accomm\r\n odation or wheelchair access information\\, please contact Julianne White at\r\n  jgwhite@stanford.edu. \\n\\nConnect with the Department of Art & Art History\r\n ! Subscribe to our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260613T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260613T210000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Oshman Hall\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Documentary Film Screening\r\nUID:tag:localist.com\\,2008:EventInstance_52269455709871\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-documentary-film-scre\r\n ening\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260613T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260613T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708375341\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260614\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294485513\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260614\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355613750\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:The university commencement ceremony is held on this day. See t\r\n he Commencement website for further details.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260614\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Commencement Ceremony\r\nUID:tag:localist.com\\,2008:EventInstance_50472527831321\r\nURL:https://events.stanford.edu/event/commencement-ceremony\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260614\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford University Commencement. See the Commencement website for \r\n further details.\r\nUID:tag:localist.com\\,2008:EventInstance_49464971103443\r\nURL:https://events.stanford.edu/event/stanford-university-commencement-see-\r\n the-commencement-website-for-further-details\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260614T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222812428\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260614T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T170000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310166130\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260614T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809539966\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260614T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692046139\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260614T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682894272\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:在博物馆导览员的带领下，探索坎特艺术中心的收藏品。导览员将为您介绍来自不同文化和不同时期的精选作品。\\n\\n欢迎您参与对话，分\r\n 享您对游览过程中所探讨主题的想法，或者按照自己的舒适程度参与互动。\\n\\n导览免费，但需提前登记。请通过以下链接选择并 RSVP 您希望参加的日期。\\\r\n n\\nFebruary 8\\, 2026: https://thethirdplace.is/event/February\\n\\nMarch 8\\, \r\n 2026: https://thethirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thet\r\n hirdplace.is/event/April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/M\r\n ay\\n\\nJune 14\\, 2026: https://thethirdplace.is/event/June\\n\\n______________\r\n _____________________________\\n\\nExplore the Cantor's collections with a mu\r\n seum engagement guide who will lead you through a selection of works from d\r\n ifferent cultures and time periods.\\n\\n Participants are welcomed to partic\r\n ipate in the conversation and provide their thoughts on themes explored thr\r\n oughout the tour but are also free to engage at their own comfort level. \\n\r\n \\n Tours are free of charge but require advance registration. Please select\r\n  and RSVP for your preferred date using the links below.\\n\\nFebruary 8\\, 20\r\n 26: https://thethirdplace.is/event/February\\n\\nMarch 8\\, 2026: https://thet\r\n hirdplace.is/event/March\\n\\nApril 12\\, 2026: https://thethirdplace.is/event\r\n /April\\n\\nMay 10\\, 2026: https://thethirdplace.is/event/May\\n\\nJune 14\\, 20\r\n 26: https://thethirdplace.is/event/June\r\nDTEND:20260614T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights in Chinese \r\nUID:tag:localist.com\\,2008:EventInstance_51897285072972\r\nURL:https://events.stanford.edu/event/public-tour-cantor-highlights-chinese\r\n -language\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art & Art History presents the 2026 MFA Thesi\r\n s Exhibition\\, featuring the thesis artwork of our graduating art practice \r\n MFA cohort Alexa Burrell\\, Vincent Chong\\, Enam Gbewonyo\\, Hudson Hatfield\\\r\n , and Bailey Scieszka.\\n\\nOn View: May 12-June 4\\, 2026\\nOpening Reception:\r\n  Thursday\\, May 14\\, 5-7pm\\nCurated by Jonathan Calm\\nStanford Art Gallery\\\r\n , 419 Lasuen Mall\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to th\r\n e public\\n\\nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISIT\r\n OR INFORMATION: Stanford Art Gallery is located at 419 Lasuen Mall\\, off Pa\r\n lm Drive. The gallery is open Monday–Friday\\, 12–5pm\\, and will be closed M\r\n emorial Day (May 25). Visitor parking is available in designated areas and \r\n payment is managed through ParkMobile (free after 4pm\\, except by the Oval)\r\n . Alternatively\\, take the Caltrain to Palo Alto Transit Center and hop on \r\n the free Stanford Marguerite Shuttle. This exhibition is open to Stanford a\r\n ffiliates and the general public. Admission is free. \\n\\nConnect with the D\r\n epartment of Art & Art History! Subscribe to our mailing list and follow us\r\n  on Instagram and Facebook.\r\nDTEND:20260614T230000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T213000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:2026 MFA Thesis Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332222814477\r\nURL:https://events.stanford.edu/event/2026-mfa-thesis-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:The Department of Art and Art History presents the 2026 Senior \r\n Exhibition featuring works by graduating students majoring in art practice.\r\n \\n\\nOn View: May 26-June 4\\, 2026\\nOpening Reception: Thursday\\, May 28\\, 4\r\n -6pm\\nCurated by Leila Weefur\\, Lecturer\\nCoulter Art Gallery (McMurtry Bui\r\n lding)\\nGallery Hours: Monday-Friday\\, 12-5pm\\nFree & open to the public\\n\\\r\n nFinal Viewing: Sunday\\, June 14\\, 10am-12pm\\, 2:30-4pm\\n\\nVISITOR INFORMAT\r\n ION: Coulter Art Gallery is located at 355 Roth Way (McMurtry Building) on \r\n Stanford campus. The gallery is open Monday-Friday. Visitor parking is avai\r\n lable in designated areas and payment is managed through ParkMobile (free a\r\n fter 4pm\\, except by the Oval). Alternatively\\, take the Caltrain to Palo A\r\n lto Transit Center and hop on the free Stanford Marguerite Shuttle. This ex\r\n hibition is open to Stanford affiliates and the general public. Admission i\r\n s free. \\n\\nConnect with the Department of Art & Art History! Subscribe to \r\n our mailing list and follow us on Instagram and Facebook.\r\nDTEND:20260614T230000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T213000Z\r\nGEO:37.432546;-122.171856\r\nLOCATION:McMurtry Building\\, Coulter Art Gallery\r\nSEQUENCE:0\r\nSUMMARY:2026 Senior Exhibition\r\nUID:tag:localist.com\\,2008:EventInstance_51332310167155\r\nURL:https://events.stanford.edu/event/2026-senior-exhibition\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260614T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260614T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708377390\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260615\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Posting of J.D. and M.D. degrees\\; degrees will be awarded with a c\r\n onferral date of Commencement. Graduates will have access to official degre\r\n e certifications and transcripts the day after degrees are posted.\r\nUID:tag:localist.com\\,2008:EventInstance_49464975118688\r\nURL:https://events.stanford.edu/event/posting-of-jd-and-md-degrees-degrees-\r\n will-be-awarded-with-a-conferral-date-of-commencement-graduates-will-have-a\r\n ccess-to-official-degree-certifications-and-transcripts-the-day-after-degre\r\n es-are-posted-6788\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:JD and MD degrees are posted on this day. Degrees are awarded w\r\n ith a conferral date of Commencement.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260615\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Posting of JD and MD Degrees\r\nUID:tag:localist.com\\,2008:EventInstance_50472527924512\r\nURL:https://events.stanford.edu/event/posting-of-jd-and-md-degrees\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:Today is the undergraduate housing move-out date for those stud\r\n ents involved in Commencement. See the Residential & Dining Enterprises Cal\r\n endar for more information.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260615\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Undergraduate Housing Move-Out (Graduates)\r\nUID:tag:localist.com\\,2008:EventInstance_50472528175409\r\nURL:https://events.stanford.edu/event/spring-quarter-undergraduate-housing-\r\n move-out-graduates\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:See the Cardinal Care website.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260615\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter Cardinal Care Waiver Deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_49463864554357\r\nURL:https://events.stanford.edu/event/summer-quarter-cardinal-care-waiver-d\r\n eadline-1494\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to apply for the summer quarter Cardinal C\r\n are Waiver. See the Cardinal Care website for more information.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260615\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Cardinal Care Waiver Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472528027944\r\nURL:https://events.stanford.edu/event/summer-quarter-cardinal-care-waiver-d\r\n eadline-4297\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260615T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260615T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314076288\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260616\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Final Recommending Lists due (noon).\r\nUID:tag:localist.com\\,2008:EventInstance_49464979971440\r\nURL:https://events.stanford.edu/event/final-recommending-lists-due-noon616\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260616\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grades for non-graduating students due (11:59 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464984328992\r\nURL:https://events.stanford.edu/event/grades-for-non-graduating-students-du\r\n e-1159-pm-7273\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (at noon) to submit the final recommending\r\n  lists.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260616\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Final Recommending Lists Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472528312634\r\nURL:https://events.stanford.edu/event/spring-quarter-final-recommending-lis\r\n ts-due-6\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grades for non-graduating studen\r\n ts.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260616\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Grades for Non-Graduating Students Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472528420162\r\nURL:https://events.stanford.edu/event/spring-quarter-grades-for-non-graduat\r\n ing-students-due-6881\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:The Global Risk team is offering virtual pre-departure resource\r\n  review sessions specifically for internationally traveling faculty\\, resea\r\n rchers.\\n\\nIn this session\\, Global Risk will cover\\n\\nhigh-level travel ri\r\n sk overview and mitigations\\n\\ncurrent events impacting travel\\n\\ntraveling\r\n  as a non-U.S. citizen\\n\\ntraveling to destinations with\\n\\nrestrictive pri\r\n vacy laws\\n\\ndata security concerns\\n\\nelevated medical and security risks\\\r\n n\\nincident response processes and resources\\n\\ncampus services available t\r\n o support them\\, their research\\, and their work.\\n\\n \\n\\nThe session will \r\n be 30 minutes\\, with the option to remain for an optional Q&A.\r\nDTEND:20260616T163000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260616T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Global Risk Resource Review for Faculty\\, Researchers (June)\r\nUID:tag:localist.com\\,2008:EventInstance_51808358788836\r\nURL:https://events.stanford.edu/event/global-risk-resource-review-for-facul\r\n ty-researchers-june\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260616T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260616T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491643313\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260617T013000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260617T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663092159\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260617\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294489612\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260617\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355615799\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Do you or anyone in your school or unit work with minors? Stanf\r\n ord's policy for Protection of Minors requires that anyone working directly\r\n  with\\, supervising\\, chaperoning\\, or otherwise overseeing minors (individ\r\n uals under 18 years of age) in Stanford-sponsored programs or activities mu\r\n st complete a Live Scan background check.\\n\\nA Live Scan unit will be on ca\r\n mpus to provide fingerprinting service at no cost to the employee or the de\r\n partment. Please note\\, this Live Scan fingerprinting session can only proc\r\n ess Live Scan application forms where results are submitted to Stanford. If\r\n  you have previously cleared a Live Scan background check for Stanford and \r\n subsequently left the university\\, you may be required to complete a Live S\r\n can background check again. Reach out to your youth program contact to conf\r\n irm whether your results are on file. \\n\\nAll Program Staff will need to su\r\n bmit their completed Live Scan application forms to University Human Resour\r\n ces.  Program Staff will not meet the university’s Live Scan requirement un\r\n less they have completed this step.  Once Program Staff complete the finger\r\n print submission\\, they must submit their forms through this link. Please n\r\n ote if Program Staff complete Live Scan at a free on-campus session hosted \r\n by Stanford\\, a copy of their application form will be submitted to Univers\r\n ity Human Resources directly by the vendor. \\n\\nPlease complete these steps\r\n  before going to a Live Scan event: \\n\\nPlease bring a completed Live Scan \r\n application form. If you are an Employee\\, identify the specific program/ac\r\n tivity for which you are completing Live Scan in the field \"Type of License\r\n /Certification/Permit OR Working Title.\" If you are a Volunteer\\, enter “Vo\r\n lunteer” in this field.  Note that this field is limited to 30 characters. \r\n Bring a government-issued ID\\, such as a Driver's License or passport (with\r\n  U.S. visa).\\n\\nIf you have any questions\\, please see the Protection of Mi\r\n nors website or download the FAQ.  You can also contact University Human Re\r\n sources—Employee & Labor Relations at 650-721-4272 or protectminors@stanfor\r\n d.edu.\r\nDTEND:20260617T230000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260617T160000Z\r\nGEO:37.429623;-122.160633\r\nLOCATION:Maples Pavilion\r\nSEQUENCE:0\r\nSUMMARY:Protection of Minors Live Scan Fingerprinting\r\nUID:tag:localist.com\\,2008:EventInstance_51577967165152\r\nURL:https://events.stanford.edu/event/copy-of-protection-of-minors-live-sca\r\n n-fingerprinting-5070\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260617T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260617T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105035402\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260618T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260617T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768245181\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260618\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294491661\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260618\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355616824\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260618\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Posting of degrees\\; degrees will be awarded with a conferral date \r\n of Commencement. Graduates will have access to official degree certificatio\r\n ns and transcripts the day after degrees are posted.\r\nUID:tag:localist.com\\,2008:EventInstance_49464989583504\r\nURL:https://events.stanford.edu/event/posting-of-degrees-degrees-will-be-aw\r\n arded-with-a-conferral-date-of-commencement-graduates-will-have-access-to-o\r\n fficial-degree-certifications-and-transcripts-the-day-after-degrees-are-pos\r\n ted-7504\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the university confers degrees for the most recent s\r\n pring quarter.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260618\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Spring Quarter: Conferral of Degrees\r\nUID:tag:localist.com\\,2008:EventInstance_50472528543052\r\nURL:https://events.stanford.edu/event/spring-quarter-conferral-of-degrees-6\r\n 109\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260618T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260618T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762202428\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260618T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260618T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794512164\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260618T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260618T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491644338\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260619T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260618T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768247230\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260619T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260618T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764718181\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260619\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294492686\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260619\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355618873\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260620T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260619T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817905429\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260619T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260619T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802466574\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260619T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260619T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699893974\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260619T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260619T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682895297\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260620\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294493711\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260620\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355619898\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The first of three bills for the Summer quarter is due. This in\r\n cludes tuition\\, mandatory and course fees\\, updates or changes to housing \r\n and dining\\, and other student fees.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260620\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:First Summer Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720857869\r\nURL:https://events.stanford.edu/event/first-summer-quarter-bill-due-for-und\r\n ergraduate-students-9299\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260620T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260620T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078587844\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260620T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260620T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699894999\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260620T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260620T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692050236\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260620T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260620T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682897346\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260620T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260620T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708379439\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260621\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294494736\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260621\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355620923\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260621T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260621T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809540991\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260621T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260621T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692053309\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260621T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260621T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682898371\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260621T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260621T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766132294\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260621T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260621T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708381488\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:See undergraduate leaves of absence and graduate leaves of abse\r\n nce. See Tuition and Refund Schedule for a full refund schedule.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260622\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Deadline to submit Leave of Absence for full refund (see undergradu\r\n ate leaves of absence and graduate leaves of absence).\r\nUID:tag:localist.com\\,2008:EventInstance_49463883420776\r\nURL:https://events.stanford.edu/event/deadline-to-submit-leave-of-absence-f\r\n or-full-refund-see-undergraduate-leaves-of-absence-and-graduate-leaves-of-a\r\n bsence\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260622\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:First day of quarter\\; instruction begins.\r\nUID:tag:localist.com\\,2008:EventInstance_49463870883783\r\nURL:https://events.stanford.edu/event/first-day-of-quarter-instruction-begi\r\n ns-2574\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260622\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Preliminary Study List deadline (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463876301550\r\nURL:https://events.stanford.edu/event/preliminary-study-list-deadline-5-pm-\r\n 1916\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the first day of summer quarter and the start of classe\r\n s.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260622\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: First Day of Quarter & Instruction Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472528657748\r\nURL:https://events.stanford.edu/event/summer-quarter-first-day-of-quarter-i\r\n nstruction-begins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a Leave of Absence to withdraw f\r\n rom the university with a partial refund.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260622\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Leave of Absence Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472528850277\r\nURL:https://events.stanford.edu/event/summer-quarter-leave-of-absence-deadl\r\n ine\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to complete the Preliminary Study List in \r\n which students must be \"at status\" (i.e.\\, students must have a study list \r\n with sufficient units to meet the requirements for their status or have sub\r\n mitted a petition for Undergraduate Special Registration Status or Graduate\r\n  Special Registration Status). The late study list fee is $200.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260622\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Preliminary Study List Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472528750940\r\nURL:https://events.stanford.edu/event/summer-quarter-preliminary-study-list\r\n -deadline-1433\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260623T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260623T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491645363\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Tuesday Alcoholics Anonymous Meeting on campus at Rogers\r\n  House.\r\nDTEND:20260624T013000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260624T003000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Alcoholics Anonymous Tuesday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773663093184\r\nURL:https://events.stanford.edu/event/alcoholics-anonymous-meeting-4049\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260624\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294498835\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260624\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355621948\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260624T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260624T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105036427\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260625T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260624T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768248255\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260625\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294500884\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260625\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355622973\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Veronica Roberts\\, John and Jill Freidenrich Director\\, Ca\r\n ntor Arts Center for this special highlights tour of Jeremy Frey: Woven.\\n\\\r\n nJeremy Frey: Woven is the first solo museum exhibition of works by MacArth\r\n ur “genius” award winner Jeremy Frey\\, and the Cantor will be its only West\r\n  Coast venue. Renowned for his innovation in basketry\\, Frey has been advan\r\n cing his practice over the last twenty years. The exhibition will present o\r\n ver 30 objects\\, ranging from early point baskets and urchin forms to more \r\n recent monumental multicolored vases with meticulous porcupine quillwork\\, \r\n as well as new work in video\\, prints\\, and large-scale woven sculpture. Th\r\n e exhibition premiered at the Portland Museum of Art in May 2024\\, before t\r\n raveling to the Art Institute in Chicago and the Bruce Museum in Connecticu\r\n t. Jeremy Frey: Woven is organized by the Portland Museum of Art\\, Maine.\\n\r\n \\nAll public programs at the Cantor Arts Center are always free! Space for \r\n this program is limited\\; advance registration is recommended.\\n\\nRSVP here\r\n .\\n\\n________\\n\\nParking\\n\\nPaid visitor parking is available along Lomita \r\n Drive as well as on the first floor of the Roth Way Garage Structure\\, loca\r\n ted at the corner of Campus Drive West and Roth Way at 345 Campus Drive\\, S\r\n tanford\\, CA 94305. From the Palo Alto Caltrain station\\, the Cantor Arts C\r\n enter is about a 20-minute walk or there the free Marguerite shuttle will b\r\n ring you to campus via the Y or X lines.\\n\\nDisability parking is located a\r\n long Lomita Drive near the main entrance of the Cantor Arts Center. Additio\r\n nal disability parking is located on Museum Way and in Parking Structure 1 \r\n (Roth Way & Campus Drive). Please click here to view the disability parking\r\n  and access points.\\n\\n________\\n\\nAccessibility Information or Requests\\n\\\r\n nCantor Arts Center at Stanford University is committed to ensuring our pro\r\n grams are accessible to everyone. To request access information and/or acco\r\n mmodations for this event\\, please complete this form at least one week pri\r\n or to the event: museum.stanford.edu/access.\\n\\nFor questions\\, please cont\r\n act disability.access@stanford.eduor D Fukunaga\\, fukunaga@stanford.edu.\\n\\\r\n n----------\\n\\nImage: Jeremy Frey (Passamaquoddy\\, born 1978)\\, Defensive\\,\r\n  2022\\, ash\\, sweetgrass\\, and dye\\, 12 1/2 x 7 1/2 x 7 1/2 inches. Collect\r\n ion of Carole Katz\\, California. © Jeremy Frey. Image courtesy Eric Stoner\r\nDTEND:20260625T200000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260625T190000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Lunchtime Curator Talk | Jeremy Frey: Woven\r\nUID:tag:localist.com\\,2008:EventInstance_52057876716608\r\nURL:https://events.stanford.edu/event/copy-of-lunchtime-curator-talk-jeremy\r\n -frey-woven\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260625T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260625T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762204477\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260625T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260625T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794516261\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260625T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260625T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491647412\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260626T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260625T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768249280\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260626\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294501909\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260626\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355625022\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260627T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260626T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817906454\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Stanford Memorial Church is the physical heart of the campus\\, \r\n replete with stained glass windows\\, mosaics\\, and stone carvings. Free tou\r\n rs are led by trained docents who share a wealth of knowledge about the chu\r\n rch.\\n\\nTours are held every Friday* starting at 11 AM.  Please meet in fro\r\n nt of the church before the tour starts. \\n\\nFor large groups (more than 10\r\n  attendees)\\, please notify us at stanfordorsl@stanford.edu at least 14 day\r\n s in advance if you would like to attend our Friday 11:00 am tour so that w\r\n e may schedule an additional docent. Unfortunately\\, we cannot accommodate \r\n tour requests of any size outside of our regular Friday tour time. Your gro\r\n up is welcome to visit Memorial Church during open hours\\, Monday-Thursday \r\n 9:00 am-4:00 pm and Friday 9:00 am - 1:00 pm.\\n\\n*Tours are not held on Uni\r\n versity holidays\\, during church services\\, and during Winter Closure.\\n\\nI\r\n f you cannot make the tour\\, download the Memorial Church Self-Guided Tour \r\n Brochure for your visit.\r\nDTEND:20260626T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260626T180000Z\r\nGEO:37.427405;-122.1697\r\nLOCATION:Memorial Church\r\nSEQUENCE:0\r\nSUMMARY:Stanford Memorial Church Docent Tour\r\nUID:tag:localist.com\\,2008:EventInstance_51889802467599\r\nURL:https://events.stanford.edu/event/stanford-memorial-church-docent-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260626T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260626T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699897048\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260626T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260626T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682899396\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Other\r\nDESCRIPTION:In this in-person session\\, an admission officer provides an ov\r\n erview of Knight-Hennessy Scholars\\, the admission process\\, and the applic\r\n ation. The session includes a presentation\\, and Knight-Hennessy scholar(s)\r\n  may join to share their experience. \\n\\nAbout Knight-Hennessy Scholars\\n\\n\r\n Knight-Hennessy Scholars is a multidisciplinary\\, multicultural graduate sc\r\n holarship program. Each Knight-Hennessy scholar receives up to three years \r\n of financial support to pursue graduate studies at Stanford while participa\r\n ting in engaging experiences that prepare scholars to be visionary\\, courag\r\n eous\\, and collaborative leaders who address complex challenges facing the \r\n world.\\n\\nEligibility\\n\\nYou are eligible to apply to the 2027 cohort of Kn\r\n ight-Hennessy Scholars if you earned (or will earn) your bachelor's degree \r\n in 2020 or later. For military (active or veteran) applicants\\, you are eli\r\n gible if you earned your bachelor's degree in 2018 or later. Additionally\\,\r\n  current Stanford PhD students in the first year of enrollment may apply if\r\n  starting at KHS in the second year of PhD enrollment.\\n\\nDeadline\\n\\nThe K\r\n HS application to join the 2026 cohort is now closed. The KHS application t\r\n o join the 2027 cohort will open in summer 2026. \\n\\nParking\\n\\nParking at \r\n Stanford University is free after 4:00 pm Monday-Friday. We recommend you u\r\n se the Tressider Lot or street parking. Please visit Stanford Transportatio\r\n n for more information.\\n\\nYou will receive details on how to join the even\r\n t by email following registration.\r\nDTEND:20260627T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260626T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Info session for Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51934585701939\r\nURL:https://events.stanford.edu/event/copy-of-info-session-for-knight-henne\r\n ssy-scholars-8450\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260627\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294502934\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260627\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355626047\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260627\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Period 3 clerkship drop deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_51783517658612\r\nURL:https://events.stanford.edu/event/period-3-clerkship-drop-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260627T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260627T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078588869\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260627T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260627T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699899097\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260627T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260627T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692055358\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260627T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260627T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682901445\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260627T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260627T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708382513\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260628\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294504983\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260628\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355627072\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Weekly Al-Anon Sunday meeting at Rogers House.  Al-Anon is a fe\r\n llowship of people who have been affected by the substance abuse of a loved\r\n  one.\r\nDTEND:20260628T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260628T180000Z\r\nGEO:37.423453;-122.17193\r\nLOCATION:Rogers House\\, 102\r\nSEQUENCE:0\r\nSUMMARY:Al-Anon Sunday Meeting\r\nUID:tag:localist.com\\,2008:EventInstance_50773809542016\r\nURL:https://events.stanford.edu/event/al-anon-sunday-meeting\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260628T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260628T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543411239\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260628T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260628T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692058431\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260628T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260628T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682903494\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260628T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260628T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708384562\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260629\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA – First day of clerkships for Period 1.\r\nUID:tag:localist.com\\,2008:EventInstance_49463888114825\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-1-5146\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260629\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Period 2 clerkship drop deadline.\r\nUID:tag:localist.com\\,2008:EventInstance_51783507834601\r\nURL:https://events.stanford.edu/event/period-2-clerkship-drop-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260630T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260630T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491648437\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260701\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294509082\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260701\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355629121\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260701T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260701T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105037452\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260702T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260701T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768250305\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260702\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294510107\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260702\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355630146\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260702T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260702T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762206526\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260702T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260702T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794518310\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260702T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260702T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491650486\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260703T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260702T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768251330\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260703\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294512156\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260703\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355631171\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The university is closed to recognize an official holiday on th\r\n is date\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260703\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Independence Day\r\nUID:tag:localist.com\\,2008:EventInstance_51754610664276\r\nURL:https://events.stanford.edu/event/copy-of-memorial-day-6307\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the Independence Day holiday. There are no classes.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260703\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Independence Day (No Classes)\r\nUID:tag:localist.com\\,2008:EventInstance_50472528959854\r\nURL:https://events.stanford.edu/event/independence-day-no-classes-9751\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260703\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Independence Day holiday (no classes).\r\nUID:tag:localist.com\\,2008:EventInstance_49463893944627\r\nURL:https://events.stanford.edu/event/independence-day-holiday-no-classes-7\r\n 424\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260703T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260703T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699901146\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260703T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260703T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682904519\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260704\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294513181\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260704\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355633220\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260704T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260704T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078589894\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260704T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260704T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699902171\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260704T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260704T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692060480\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260704T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260704T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682906568\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260704T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260704T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708386611\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:San Francisco Mission District-based artist Ester Hernandez (b.\r\n  1944) is a celebrated Chicana printmaker and storyteller. In iconic works \r\n such as Sun Mad\\, she weaves incisive commentary with a bold visual languag\r\n e. This single-gallery presentation highlights a selection of artwork\\, wri\r\n ting\\, and other ephemera from the artist’s archive at Stanford Special Col\r\n lections. These materials reveal that Hernandez’s artwork and sociopolitica\r\n l convictions have operated in tandem since the very beginning of her caree\r\n r\\, shaped by her family’s background as farmworkers in California’s raisin\r\n  belt and Hernandez’s own life experiences. Stanford acquired Hernandez’s a\r\n rchive (Special Collections\\, M1301) in 2001.\\n\\nStanford acquired Hernande\r\n z’s archive (Special Collections\\, M1301) in 2001.\\n\\nArchive Room: Ester H\r\n ernandez is curated by Jorge Eduardo Sibaja\\, Curatorial Assistant. We grat\r\n efully acknowledge sustained support provided by The Hockwald Fund.\\n\\nIMAG\r\n E: Ester Hernandez\\, Sun Mad\\, 1982. Courtesy of Department of Special Coll\r\n ections\\, Stanford University Libraries. © Ester Hernandez\\n\\nMUSEUM HOURS\\\r\n nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: M\r\n on and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.edu\r\n /visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260705\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Patricia S. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ester Hernandez |Selections from Special Collections \r\n at Stanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605294515230\r\nURL:https://events.stanford.edu/event/archive-room-ester-hernandez-selectio\r\n ns-from-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Ruth Asawa (1926–2013) was a Japanese American artist and arts \r\n advocate who worked to integrate arts education into the standard curriculu\r\n m of San Francisco’s public schools. Although Asawa is best known for her l\r\n ooped-wire sculptures\\, Archive Room: Ruth Asawa explores her lifelong dedi\r\n cation to arts activism through selected projects from the Alvarado School \r\n Arts Workshop curriculum\\, an artist-in-residence program she cofounded wit\r\n h architect and fellow parent Sally Woodbridge at Alvarado Elementary Schoo\r\n l in 1968. The teaching materials\\, workshops\\, and collaborative projects \r\n presented in this compact\\, single-gallery presentation explores Asawa’s be\r\n lief that art is essential to cultivating a fuller sense of self.\\n\\nStanfo\r\n rd acquired Asawa’s archive (Special Collections\\, M1585) in 2007 with addi\r\n tional materials arriving in subsequent years. To explore Asawa’s archive o\r\n nline\\, please visit Stanford Libraries’ website.\\n\\nArchive Room: Ruth Asa\r\n wa is curated by Kathryn Cua\\, Curatorial Assistant\\, Asian American Art In\r\n itiative. We gratefully acknowledge sustained support provided by The Rober\r\n t Mondavi Family Fund.\\n\\nIMAGE: Ruth Asawa teaching geometric patterns wit\r\n h milk cartons\\, c. 1981. Courtesy Ruth Asawa Lanier\\, Inc.\\n\\nMUSEUM HOURS\r\n \\nWed & Fri: 11 AM–6 PM\\nThurs: 11 AM–8 PM\\nSat & Sun: 10 AM–5 PM\\nCLOSED: \r\n Mon and Tues\\nWe’re always free! Come visit us\\, https://museum.stanford.ed\r\n u/visit\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260705\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Rowland K. Rebele Gallery\r\nSEQUENCE:0\r\nSUMMARY:Archive Room: Ruth Asawa | Selections from Special Collections at S\r\n tanford Libraries\r\nUID:tag:localist.com\\,2008:EventInstance_50605355634245\r\nURL:https://events.stanford.edu/event/archive-room-ruth-asawa-selections-fr\r\n om-special-collections-at-stanford-libraries\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260705T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260705T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692063553\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260705T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260705T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682907593\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260705T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260705T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740372495\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260705T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260705T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708387636\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:Final day to add or drop a class\\; last day to adjust units on \r\n a variable-unit course. Last day for tuition reassessment for dropped cours\r\n es or units. Students may withdraw from a course until the Course Withdrawa\r\n l deadline and a 'W' notation will appear on the transcript.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260706\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Final Study List deadline (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463902117646\r\nURL:https://events.stanford.edu/event/final-study-list-deadline-5-pm-3865\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to complete the Final Study List\\; to add \r\n or drop a class\\; to adjust units on a variable-unit course\\; for tuition r\r\n eassessment for dropped courses or units. Students may withdraw from a cour\r\n se until the Course Withdrawal deadline and a 'W' notation will appear on t\r\n he transcript.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260706\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Final Study List Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472529079672\r\nURL:https://events.stanford.edu/event/summer-quarter-final-study-list-deadl\r\n ine-2547\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260707T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260707T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491651511\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260708T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260708T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105038477\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260709T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260708T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768252355\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260709T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260709T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762208575\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260709T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260709T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794521383\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260709T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260709T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491651512\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260710T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260709T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768252356\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260711T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260710T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817907479\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260710T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260710T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699904220\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260710T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260710T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682909642\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260711T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260711T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078590919\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260711T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260711T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699906269\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260711T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260711T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692065602\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260711T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260711T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682910667\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260711T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260711T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708389685\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260712T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260712T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692067651\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260712T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260712T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682912716\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260712T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260712T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708391734\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260713\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915677359\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260714\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915679408\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260714T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260714T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491653561\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, July 14\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\, or\r\n  Zoom for a presentation by Jedd Wolchok\\, MD\\, PhD\\, Meyer Cancer Center D\r\n irector at Weill Cornell Medical College.\\n\\nThe event is open to Stanford \r\n Cancer Institute members\\, postdocs\\, fellows\\, and students\\, as well as S\r\n tanford University and Stanford Medicine faculty\\, trainees\\, and staff int\r\n erested in basic\\, translational\\, clinical\\, and population-based cancer r\r\n esearch.\\n\\nRegistration is encouraged.\r\nDTEND:20260715T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260714T230000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: Cancer Immunothe\r\n rapy: Of Mice and Men\r\nUID:tag:localist.com\\,2008:EventInstance_51288549051371\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-cancer-immunology-in-evolution\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260715\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915681457\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260715T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260715T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105039502\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260716T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260715T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768253381\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260716\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915683506\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDTEND:20260716T170000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260716T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MedLeave and Faculty Leave Policies Review\r\nUID:tag:localist.com\\,2008:EventInstance_51314683931864\r\nURL:https://events.stanford.edu/event/medleave-and-faculty-leave-policies-r\r\n eview\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260716T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260716T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762209600\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260716T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260716T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794524456\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260716T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260716T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491655610\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260717T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260716T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768254406\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260717T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260716T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764719206\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk\r\nDESCRIPTION:Join Veronica Roberts\\, John and Jill Freidenrich Director\\, Ca\r\n ntor Arts Center for this special highlights tour of Jeremy Frey: Woven.\\n\\\r\n nJeremy Frey: Woven is the first solo museum exhibition of works by MacArth\r\n ur “genius” award winner Jeremy Frey\\, and the Cantor will be its only West\r\n  Coast venue. Renowned for his innovation in basketry\\, Frey has been advan\r\n cing his practice over the last twenty years. The exhibition will present o\r\n ver 30 objects\\, ranging from early point baskets and urchin forms to more \r\n recent monumental multicolored vases with meticulous porcupine quillwork\\, \r\n as well as new work in video\\, prints\\, and large-scale woven sculpture. Th\r\n e exhibition premiered at the Portland Museum of Art in May 2024\\, before t\r\n raveling to the Art Institute in Chicago and the Bruce Museum in Connecticu\r\n t. Jeremy Frey: Woven is organized by the Portland Museum of Art\\, Maine.\\n\r\n \\nAll public programs at the Cantor Arts Center are always free! Space for \r\n this program is limited\\; advance registration is recommended.\\n\\nRSVP here\r\n .\\n\\n________\\n\\nParking\\n\\nFree visitor parking (after 4pm) is available a\r\n long Lomita Drive as well as on the first floor of the Roth Way Garage Stru\r\n cture\\, located at the corner of Campus Drive West and Roth Way at 345 Camp\r\n us Drive\\, Stanford\\, CA 94305. From the Palo Alto Caltrain station\\, the C\r\n antor Arts Center is about a 20-minute walk or the free Marguerite shuttle \r\n will bring you to campus via the Y or X lines.\\n\\nDisability parking is loc\r\n ated along Lomita Drive near the main entrance of the Cantor Arts Center. A\r\n dditional disability parking is located on Museum Way and in Parking Struct\r\n ure 1 (Roth Way & Campus Drive). Please click here to view the disability p\r\n arking and access points. \\n\\n________\\n\\nAccessibility Information or Requ\r\n ests\\n\\nCantor Arts Center at Stanford University is committed to ensuring \r\n our programs are accessible to everyone. To request access information and/\r\n or accommodations for this event\\, please complete this form at least one w\r\n eek prior to the event: museum.stanford.edu/access.\\n\\nFor questions\\, plea\r\n se contact disability.access@stanford.eduor D Fukunaga-Brates\\, fukunaga@st\r\n anford.edu.\\n\\n----------\\n\\nImage: Jeremy Frey (Passamaquoddy\\, born 1978)\r\n \\, Defensive\\, 2022\\, ash\\, sweetgrass\\, and dye\\, 12 1/2 x 7 1/2 x 7 1/2 i\r\n nches. Collection of Carole Katz\\, California. © Jeremy Frey. Image courtes\r\n y Eric Stoner\r\nDTEND:20260717T020000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260717T010000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\\, Halperin Gallery\r\nSEQUENCE:0\r\nSUMMARY:Evening Curator Talk | Jeremy Frey: Woven\r\nUID:tag:localist.com\\,2008:EventInstance_52057947642988\r\nURL:https://events.stanford.edu/event/copy-of-evening-curator-talk-jeremy-f\r\n rey-woven\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260717\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915685555\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260718T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260717T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817908504\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260717T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260717T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699908318\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260717T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260717T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682913741\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260718\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915687604\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260718T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260718T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078591944\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260718T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260718T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699909343\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260718T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260718T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692069700\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260718T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260718T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682915790\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260718T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260718T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708392759\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260719\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915689653\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260719T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260719T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692072773\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260719T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260719T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682929103\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260719T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260719T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766133319\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260719T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260719T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708394808\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The first and second of three summer quarter bills are due for \r\n graduate students. Any new student charges posted since the last bill will \r\n be shown on this bill.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260720\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:First & Second Summer Quarter Bills Due for Graduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479720963351\r\nURL:https://events.stanford.edu/event/first-second-summer-quarter-bills-due\r\n -for-graduate-students-2679\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260720\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915692726\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The second of three bills for summer quarter is due. Any new st\r\n udent charges posted since the last bill will be shown on this bill.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260720\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Second Summer Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479721080098\r\nURL:https://events.stanford.edu/event/second-summer-quarter-bill-due-for-un\r\n dergraduate-students-3683\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260720T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260720T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314076289\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260721\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915694775\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260721T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260721T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491656635\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260722\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915696824\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260722T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260722T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105040527\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260723T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260722T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768255431\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260723\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915698873\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260723T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260723T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762211649\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260723T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260723T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794526505\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260723T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260723T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491657660\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260724T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260723T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768256456\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260724\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915700922\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a Leave of Absence petition to b\r\n e eligible for a full refund. See the undergraduate and graduate leaves of \r\n absence. See the Tuition and Refund Schedule for a full refund schedule.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260724\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Term Withdrawal Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472529188225\r\nURL:https://events.stanford.edu/event/summer-quarter-term-withdrawal-deadli\r\n ne-9198\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260724\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Term withdrawal deadline\\; last day to submit Leave of Absence to w\r\n ithdraw from the University with a partial refund (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463921401688\r\nURL:https://events.stanford.edu/event/term-withdrawal-deadline-last-day-to-\r\n submit-leave-of-absence-to-withdraw-from-the-university-with-a-partial-refu\r\n nd-5-pm-10\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260725T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260724T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817909529\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260724T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260724T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699911392\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260724T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260724T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682930128\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Other\r\nDESCRIPTION:In this in-person session\\, an admission officer provides an ov\r\n erview of Knight-Hennessy Scholars\\, the admission process\\, and the applic\r\n ation. The session includes a presentation\\, and Knight-Hennessy scholar(s)\r\n  may join to share their experience. \\n\\nAbout Knight-Hennessy Scholars\\n\\n\r\n Knight-Hennessy Scholars is a multidisciplinary\\, multicultural graduate sc\r\n holarship program. Each Knight-Hennessy scholar receives up to three years \r\n of financial support to pursue graduate studies at Stanford while participa\r\n ting in engaging experiences that prepare scholars to be visionary\\, courag\r\n eous\\, and collaborative leaders who address complex challenges facing the \r\n world.\\n\\nEligibility\\n\\nYou are eligible to apply to the 2027 cohort of Kn\r\n ight-Hennessy Scholars if you earned (or will earn) your bachelor's degree \r\n in 2020 or later. For military (active or veteran) applicants\\, you are eli\r\n gible if you earned your bachelor's degree in 2018 or later. Additionally\\,\r\n  current Stanford PhD students in the first year of enrollment may apply if\r\n  starting at KHS in the second year of PhD enrollment.\\n\\nDeadline\\n\\nThe K\r\n HS application to join the 2026 cohort is now closed. The KHS application t\r\n o join the 2027 cohort will open in summer 2026. \\n\\nParking\\n\\nParking at \r\n Stanford University is free after 4:00 pm Monday-Friday. We recommend you u\r\n se the Tressider Lot or street parking. Please visit Stanford Transportatio\r\n n for more information.\\n\\nYou will receive details on how to join the even\r\n t by email following registration.\r\nDTEND:20260725T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260724T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Info session for Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51934608348220\r\nURL:https://events.stanford.edu/event/copy-of-info-session-for-knight-henne\r\n ssy-scholars-4105\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260725\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915703995\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260725T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260725T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078592969\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260725T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260725T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699913441\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260725T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260725T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692075846\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260725T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260725T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682932177\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260725T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260725T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708396857\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260726\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915706044\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260726T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260726T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543413288\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260726T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260726T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692080967\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260726T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260726T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682933202\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260726T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260726T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708397882\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260727\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915708093\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260727\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA – First day of clerkships for Period 2.\r\nUID:tag:localist.com\\,2008:EventInstance_49463927352019\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-2-5692\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260728\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915710142\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260728T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260728T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491660733\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260729\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915713215\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260729T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260729T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105041552\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260730T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260729T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768257481\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260730\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915717312\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260730T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260730T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762212674\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260730T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260730T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794530602\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260730T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260730T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491661758\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260731T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260730T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768258506\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Application deadline for Summer Quarter degree conferral (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463950900609\r\nURL:https://events.stanford.edu/event/application-deadline-for-summer-quart\r\n er-degree-conferral-5-pm-4457\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Change of grading basis deadline (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463945200331\r\nURL:https://events.stanford.edu/event/change-of-grading-basis-deadline-5-pm\r\n -1803\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Course withdrawal deadline\\, except MD (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464055063465\r\nURL:https://events.stanford.edu/event/course-withdrawal-deadline-except-md-\r\n 5-pm-6042\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD – Clinical Performance Examination (CPX) (Graduation requirement\r\n  for clinical students).\r\nUID:tag:localist.com\\,2008:EventInstance_49463915719361\r\nURL:https://events.stanford.edu/event/md-clinical-performance-examination-c\r\n px-graduation-requirement-for-clinical-students\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to apply to graduate at the end of summer \r\n quarter. Late application fee after this date is $50.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Application Deadline for Degree Conferral\r\nUID:tag:localist.com\\,2008:EventInstance_50472529494427\r\nURL:https://events.stanford.edu/event/summer-quarter-application-deadline-f\r\n or-degree-conferral\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grade basis changes.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Change of Grading Basis Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472529289609\r\nURL:https://events.stanford.edu/event/summer-quarter-change-of-grading-basi\r\n s-deadline-9555\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit a course withdrawal application.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260731\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Course Withdrawal Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472529393042\r\nURL:https://events.stanford.edu/event/summer-quarter-course-withdrawal-dead\r\n line\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260801T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260731T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817910554\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260731T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260731T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699915490\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260731T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260731T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682935251\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Overview\\n\\nThe Stanford Advanced Practice Provider Leadership \r\n Certificate Program is your opportunity to unlock your leadership potential\r\n  and transform healthcare delivery. Designed for early to mid-career Advanc\r\n ed Practice Providers (APPs)\\, this 4-month program combines evidence-based\r\n  learning with practical tools to help you lead strategically\\, foster coll\r\n aboration\\, and create lasting impact in your organization. Led by expert f\r\n aculty and healthcare leaders\\, the program offers a flexible and immersive\r\n  experience that includes psychometric assessments\\, personalized coaching\\\r\n , live virtual sessions\\, and self-paced modules.\\n\\nEmerge with the skills\r\n  and confidence to navigate complex challenges\\, inspire your team\\, and dr\r\n ive meaningful change in patient care. Build lifelong connections with a dy\r\n namic\\, diverse cohort of peers who share your passion for advancing health\r\n care.\\n\\nProgram Details\\n\\nApplications Open: February 1\\, 2026\\nApplicati\r\n ons Close: June 30\\, 2026\\n\\nPrice: $3\\,600\\nCommitment: 4 Months\\nCoaching\r\n : 3+ Hours\\n\\nApplication Review\\n\\nApplications are reviewed on a rolling \r\n basis.\\nAdmission is offered as space allows.\\nEarly submission is encourag\r\n ed.\\n\\nFormat\\n\\nOnline\\n\\nCredits\\n\\n19.5 CE\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260801\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Advanced Practice Provider Leadership Certificate Program\r\nUID:tag:localist.com\\,2008:EventInstance_52207655923058\r\nURL:https://events.stanford.edu/event/advanced-practice-provider-leadership\r\n -certificate-program-7644\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260801T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260801T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078595018\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260801T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260801T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699916515\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260801T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260801T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692085064\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260801T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260801T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682936276\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260801T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260801T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708399931\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260802T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260802T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692087113\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260802T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260802T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682938325\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260802T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260802T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740373520\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260802T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260802T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708400956\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260803\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grade roster opens for Summer quarter.\r\nUID:tag:localist.com\\,2008:EventInstance_49463956293134\r\nURL:https://events.stanford.edu/event/grade-roster-opens-for-summer-quarter\r\n -6081\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the grade roster opens for the current quarter.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260803\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Grade Rosters Open\r\nUID:tag:localist.com\\,2008:EventInstance_50472529623459\r\nURL:https://events.stanford.edu/event/summer-quarter-grade-rosters-open-291\r\n 1\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260804T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260804T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491662783\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260805T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260805T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105042577\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260806T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260805T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768259531\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260806T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260806T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762214723\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260806T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260806T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794533675\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260806T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260806T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491663808\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260807T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260806T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768260556\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260808T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260807T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817911579\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260807T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260807T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699918564\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260807T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260807T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682940374\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260808\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463968601053\r\nURL:https://events.stanford.edu/event/end-quarter-period-3125\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260808\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Period Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472295993738\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-period-beg\r\n ins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260808T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260808T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078596043\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260808T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260808T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699921637\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260808T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260808T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692090186\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260808T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260808T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682941399\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260808T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260808T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708403005\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260809\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463968603102\r\nURL:https://events.stanford.edu/event/end-quarter-period-3125\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260809\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Period Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472296097166\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-period-beg\r\n ins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260809T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260809T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692092235\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260809T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260809T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682943448\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260809T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260809T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708405054\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260810\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463968605151\r\nURL:https://events.stanford.edu/event/end-quarter-period-3125\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260810\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Period Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472296152463\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-period-beg\r\n ins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260811\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463968607200\r\nURL:https://events.stanford.edu/event/end-quarter-period-3125\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260811\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Period Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472296176016\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-period-beg\r\n ins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260811T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260811T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491664833\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260812\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463968609249\r\nURL:https://events.stanford.edu/event/end-quarter-period-3125\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260812\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Period Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472296194449\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-period-beg\r\n ins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260812T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260812T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105043602\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260813T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260812T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768261581\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260813\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter Period.\r\nUID:tag:localist.com\\,2008:EventInstance_49463968611298\r\nURL:https://events.stanford.edu/event/end-quarter-period-3125\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260813\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Last day of classes.\r\nUID:tag:localist.com\\,2008:EventInstance_49463972630275\r\nURL:https://events.stanford.edu/event/last-day-of-classes-6571\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260813\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Last opportunity to arrange Incomplete in a course\\, at last class.\r\nUID:tag:localist.com\\,2008:EventInstance_49463977201411\r\nURL:https://events.stanford.edu/event/last-opportunity-to-arrange-incomplet\r\n e-in-a-course-at-last-class-5673\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the start of the end-quarter period.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260813\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Period Begins\r\nUID:tag:localist.com\\,2008:EventInstance_50472296218002\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-period-beg\r\n ins\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day marks the last day of classes (unless the class meets \r\n on Saturday).\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260813\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Last Day of Classes\r\nUID:tag:localist.com\\,2008:EventInstance_50472529749420\r\nURL:https://events.stanford.edu/event/summer-quarter-last-day-of-classes-71\r\n 45\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day is the last opportunity to arrange \"Incomplete\" in a c\r\n ourse\\, at the last class.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260813\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Last Day to Arrange Incomplete\r\nUID:tag:localist.com\\,2008:EventInstance_50472529876405\r\nURL:https://events.stanford.edu/event/summer-quarter-last-day-to-arrange-in\r\n complete\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260813T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260813T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762215748\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260813T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260813T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794536748\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260813T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260813T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491666882\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260814T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260813T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768262606\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260814\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463984163074\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-9133\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260814\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472296267159\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-examinatio\r\n ns-1876\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260815T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260814T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817912604\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260814T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260814T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699923686\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260814T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260814T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682945497\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260815\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:End-Quarter examinations.\r\nUID:tag:localist.com\\,2008:EventInstance_49463984165123\r\nURL:https://events.stanford.edu/event/end-quarter-examinations-9133\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:End-quarter examinations.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260815\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: End-Quarter Examinations\r\nUID:tag:localist.com\\,2008:EventInstance_50472296373659\r\nURL:https://events.stanford.edu/event/summer-quarter-end-quarter-examinatio\r\n ns-1876\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260815T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260815T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078597068\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260815T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260815T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699924711\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260815T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260815T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692095308\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260815T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260815T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682946522\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260815T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260815T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708407103\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260816T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260816T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692097357\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260816T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260816T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682948571\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260816T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260816T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766134344\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260816T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260816T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708409152\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260817T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260817T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314078338\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260818T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260818T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491667907\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260819T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260819T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105044627\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260820T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260819T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768264655\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The third of three summer quarter bills is due for graduate stu\r\n dents. Any new student charges posted since the last bill will be shown on \r\n this bill.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260820\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Third Summer Quarter Bill Due for Graduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479721225517\r\nURL:https://events.stanford.edu/event/third-summer-quarter-bill-due-for-gra\r\n duate-students-2563\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Student Billing Dates\r\nDESCRIPTION:The third of three bills is due for the summer quarter for unde\r\n rgraduate students. Any new student charges posted since the last bill will\r\n  be shown on this bill.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260820\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Third Summer Quarter Bill Due for Undergraduate Students\r\nUID:tag:localist.com\\,2008:EventInstance_50479721417016\r\nURL:https://events.stanford.edu/event/third-summer-quarter-bill-due-for-und\r\n ergraduate-students-3650\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:Selecting the correct faculty title is essential for compliance\r\n \\, clarity\\, and a smooth appointment process. In this session\\, we’ll take\r\n  an in-depth look at the Visiting and Short-Term Faculty titles\\, including\r\n  key distinctions\\, eligibility\\, and policy requirements for each. We’ll w\r\n alk through how to determine the most appropriate title for a candidate\\, w\r\n hat information to gather\\, and common factors that influence title selecti\r\n on. This presentation is designed to help department administrators gain gr\r\n eater confidence in navigating title options and applying policy correctly.\r\nDTEND:20260820T170000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260820T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Deep Dive: Visiting & Short-Term Faculty Titles\r\nUID:tag:localist.com\\,2008:EventInstance_51314697713651\r\nURL:https://events.stanford.edu/event/visiting-titles-deep-dive\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260820T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260820T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762217797\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260820T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260820T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794538797\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260820T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260820T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491668932\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260821T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260820T200000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127768265680\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDESCRIPTION:After an unplanned 3 month hiatus\\, for which I sincerely apolo\r\n gize\\, Drupallers Drop-in Web Help is back thanks to the Geballe Laboratory\r\n  of Advanced Materials! Thank you\\, GLAM!\\n\\n\"Drupallers Drop-in Web Help\" \r\n is held every month on the Third Thursday for people to drop in and be help\r\n ed with any Drupal\\, Stanford Sites\\, or other website questions they have \r\n (or to drop in and help others). We usually have helpers with experience of\r\n :\\n\\nStanford SitesDrupalBackdrop CMS (a fork of Drupal 7)React/Next.jsFlas\r\n kDjangostraight up HTML\\, CSS\\, PHP\\, and PythonWe meet using Zoom (SUNet o\r\n r personal Zoom account login required). If we have more than one experienc\r\n ed person helping\\, we'll make use of Zoom's rooms feature to split into gr\r\n oups. As always\\, we encourage those waiting to be helped to listen in to o\r\n thers' questions & answers.\\n\\nEveryone\\, novice or expert\\, is welcome to \r\n these free sessions. The idea is to help one another: learn from people mor\r\n e expert and help people less expert. So log in any time between 3 and 5 pm\r\n  to help and/or be helped! Or just drop in to work on web stuff in congenia\r\n l (virtual) company…\\n\\nThere will always be at least one (hopefully more) \r\n experienced volunteer** Stanford Drupaller available to answer questions on\r\n  a one-to-one basis. No question is too basic (or too advanced —though we g\r\n ive no guarantees about being able to answer!)\\n\\nDrupallers Drop-in Web He\r\n lp is sponsored by Geballe Laboratory for Advanced Materials (GLAM) (who ar\r\n e very kindly sponsoring Sharon Krossa's SUNet ID for the 2025-2026 academi\r\n c year)\\n\\n**Note: Drupallers Drop-in Web Help is a volunteer giving-back-t\r\n o-the-community effort\\, and not part of Stanford Web Services (SWS)\\n\\nCan\r\n 't make this session? See all future dates.\\n\\nAdmission Info\\n\\nFree\\, all\r\n  welcome. Zoom login required. Meeting URL: https://stanford.zoom.us/j/5474\r\n 26382\\nPassword: 180620\r\nDTEND:20260821T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260820T220000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Drupallers Drop-in Web Help — We're Back!\r\nUID:tag:localist.com\\,2008:EventInstance_50768764720231\r\nURL:https://events.stanford.edu/event/drupallers-drop-in-2025-26\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Exhibition\r\nDESCRIPTION:Transit maps hold a place in both the urban environment and the\r\n  cultural zeitgeist\\, often transcending their utilitarian purposes to beco\r\n me symbols of cities and nations alike. Iconic transit maps such as Charles\r\n  Beck's 1933 map of the London Underground or Vignelli's 1972 map of the Ne\r\n w York subway have been lauded as cultural touchstones that both were inspi\r\n red by the past and have influenced the future. \\n\\nYou Are Here is an exhi\r\n bition that explores the unique relationship between transit maps and the i\r\n dentity of their subjects. A transportation system can become synonymous wi\r\n th a city or nation\\, reflecting its change over time\\, spearheading cartog\r\n raphic innocations\\, or reifying an entirely new vision for space and place\r\n . The individual maps in the exhibit serve as a window into the histories o\r\n f the places they represent and the history of transit cartography as a who\r\n le.\\n\\nCurated by the winner of the California Map Society Student Exhibiti\r\n on Competition Jayne Kilander\\, will be on view through Friday\\, August 21\\\r\n , 2026.\r\nDTEND:20260822T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260821T163000Z\r\nGEO:37.426903;-122.167571\r\nLOCATION:David Rumsey Map Center (Green Library) \r\nSEQUENCE:0\r\nSUMMARY:You Are Here: Transit Cartography & Spatial Identity\r\nUID:tag:localist.com\\,2008:EventInstance_52127817913629\r\nURL:https://events.stanford.edu/event/copy-of-above-below-cartography-beyon\r\n d-terrain\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260821T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260821T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699926760\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260821T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260821T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682949596\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Other\r\nDESCRIPTION:In this in-person session\\, an admission officer provides an ov\r\n erview of Knight-Hennessy Scholars\\, the admission process\\, and the applic\r\n ation. The session includes a presentation\\, and Knight-Hennessy scholar(s)\r\n  may join to share their experience. \\n\\nAbout Knight-Hennessy Scholars\\n\\n\r\n Knight-Hennessy Scholars is a multidisciplinary\\, multicultural graduate sc\r\n holarship program. Each Knight-Hennessy scholar receives up to three years \r\n of financial support to pursue graduate studies at Stanford while participa\r\n ting in engaging experiences that prepare scholars to be visionary\\, courag\r\n eous\\, and collaborative leaders who address complex challenges facing the \r\n world.\\n\\nEligibility\\n\\nYou are eligible to apply to the 2027 cohort of Kn\r\n ight-Hennessy Scholars if you earned (or will earn) your bachelor's degree \r\n in 2020 or later. For military (active or veteran) applicants\\, you are eli\r\n gible if you earned your bachelor's degree in 2018 or later. Additionally\\,\r\n  current Stanford PhD students in the first year of enrollment may apply if\r\n  starting at KHS in the second year of PhD enrollment.\\n\\nDeadline\\n\\nThe K\r\n HS application to join the 2026 cohort is now closed. The KHS application t\r\n o join the 2027 cohort will open in summer 2026. \\n\\nParking\\n\\nParking at \r\n Stanford University is free after 4:00 pm Monday-Friday. We recommend you u\r\n se the Tressider Lot or street parking. Please visit Stanford Transportatio\r\n n for more information.\\n\\nYou will receive details on how to join the even\r\n t by email following registration.\r\nDTEND:20260822T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260821T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Info session for Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51934617194651\r\nURL:https://events.stanford.edu/event/copy-of-info-session-for-knight-henne\r\n ssy-scholars-4345\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260822T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260822T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078598093\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260822T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260822T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699928809\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260822T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260822T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692099406\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260822T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260822T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682951645\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260822T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260822T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708410177\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260823T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260823T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543414313\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260823T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260823T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692102479\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260823T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260823T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682952670\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260823T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260823T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708412226\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260824\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:MD/MSPA – First day of clerkships for Period 3.\r\nUID:tag:localist.com\\,2008:EventInstance_49463993824167\r\nURL:https://events.stanford.edu/event/mdmspa-first-day-of-clerkships-for-pe\r\n riod-3-3637\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260825\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Grades due (11:59 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49463998832558\r\nURL:https://events.stanford.edu/event/grades-due-1159-pm-7406\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit grades for the quarter.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260825\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Grades Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472529987007\r\nURL:https://events.stanford.edu/event/summer-quarter-grades-due-7757\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260825T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260825T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491669957\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260826T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260826T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105045652\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs.\r\nDTEND:20260827T191500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260827T190000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534762219846\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursdays\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Join a 15-minute spotlight exploring one object in the Anderson\r\n  Collection.\\n\\nNew works are featured each week! Meet at the top of the st\r\n airs\r\nDTEND:20260827T194500Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260827T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Spotlight Tours Thursdays | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534794540846\r\nURL:https://events.stanford.edu/event/spotlight-tours-thursday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Other\r\nDESCRIPTION:Need a little help using a Stanford Sites? \\n\\nStanford Web Ser\r\n vices hosts office hours by appointment. During these half-hour appointment\r\n s\\, we can assist you with editing existing content\\, creating new content\\\r\n , editing or adjusting site-wide options\\, and more!\r\nDTEND:20260827T220000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260827T200000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Stanford Sites Office Hours\r\nUID:tag:localist.com\\,2008:EventInstance_50817491670982\r\nURL:https://events.stanford.edu/event/stanford-sites-office-hours\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260828\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Late application deadline for Summer Quarter degree conferral ($50 \r\n fee) (5 p.m.).\r\nUID:tag:localist.com\\,2008:EventInstance_49464009280307\r\nURL:https://events.stanford.edu/event/late-application-deadline-for-summer-\r\n quarter-degree-conferral-50-fee-5-pm-2886\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (5 p.m.) to submit a late application to g\r\n raduate at the end summer quarter. ($50 fee)\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260828\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Late Application Deadline for Degree Conferral\r\nUID:tag:localist.com\\,2008:EventInstance_50472530231761\r\nURL:https://events.stanford.edu/event/summer-quarter-late-application-deadl\r\n ine-for-degree-conferral\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day to submit your university thesis\\, DMA fin\r\n al project\\, or PhD dissertation.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260828\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: University Thesis/Dissertation Deadline\r\nUID:tag:localist.com\\,2008:EventInstance_50472530100679\r\nURL:https://events.stanford.edu/event/summer-quarter-university-thesisdisse\r\n rtation-deadline\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260828\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:University thesis\\, D.M.A. final project\\, or Ph.D. dissertation\\, \r\n last day to submit (noon).\r\nUID:tag:localist.com\\,2008:EventInstance_49464004399347\r\nURL:https://events.stanford.edu/event/university-thesis-dma-final-project-o\r\n r-phd-dissertation-last-day-to-submit-noon-6025\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260828T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260828T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699929834\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260828T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260828T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682954719\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260829T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260829T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078599118\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260829T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260829T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699931883\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260829T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260829T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692104528\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260829T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260829T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682955744\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260829T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260829T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708414275\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260830T203000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260830T193000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534692106577\r\nURL:https://events.stanford.edu/event/highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260830T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260830T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682956769\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Come by the Anderson Collection for a free guided tour of our c\r\n ollection! No pre-registration required\\, meet guide at the top of the stai\r\n rs.\r\nDTEND:20260830T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260830T213000Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\r\nSEQUENCE:0\r\nSUMMARY:Highlights Tour | Anderson Collection\r\nUID:tag:localist.com\\,2008:EventInstance_50534708416324\r\nURL:https://events.stanford.edu/event/anderson-highlight-tour\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260902T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260902T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105046677\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:The Stanford Synthetic Biology Expo is a 1-day long event desig\r\n ned primarily for graduate students and early-career researchers to learn a\r\n bout and present work related to the field of synthetic biology. This event\r\n  aims to bring together diverse students and faculty across multiple discip\r\n lines to learn from one another and spark new collaborations. The full day \r\n event will consist of lightning talks from synthetic biology faculty around\r\n  campus\\, poster sessions\\, and a happy hour.\r\nDTEND:20260903T010000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260902T190000Z\r\nGEO:37.430043;-122.171561\r\nLOCATION:CoDA W450\\, Simonyi Center\\, W450 Simonyi Center\r\nSEQUENCE:0\r\nSUMMARY:2026 Synthetic Biology Expo\r\nUID:tag:localist.com\\,2008:EventInstance_52189712055403\r\nURL:https://events.stanford.edu/event/2026-synthetic-biology-expo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260904\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Final Recommending Lists due (5 p.m.)\r\nUID:tag:localist.com\\,2008:EventInstance_49464013419488\r\nURL:https://events.stanford.edu/event/final-recommending-lists-due-5-pm-336\r\n 8\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This is the last day (at noon) to submit the final recommending\r\n  lists.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260904\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Final Recommending Lists Due\r\nUID:tag:localist.com\\,2008:EventInstance_50472530358746\r\nURL:https://events.stanford.edu/event/summer-quarter-final-recommending-lis\r\n ts-due-7027\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260904T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260904T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699933932\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260904T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260904T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682958818\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260905T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260905T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078600143\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260905T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260905T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699934957\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260905T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260905T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682959843\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260906T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260906T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682960868\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20260906T223000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260906T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740374545\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:The university is closed to recognize an official holiday on th\r\n is date\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260907\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Labor Day\r\nUID:tag:localist.com\\,2008:EventInstance_51754630470893\r\nURL:https://events.stanford.edu/event/copy-of-independence-day-6662\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, September 8\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\\r\n , or Zoom for a presentation by Raymond Deshaies\\, PhD\\, former senior vice\r\n  president of global research and distinguished fellow at Amgen. \\n\\nThe ev\r\n ent is open to Stanford Cancer Institute members\\, postdocs\\, fellows\\, and\r\n  students\\, as well as Stanford University and Stanford Medicine faculty\\, \r\n trainees\\, and staff interested in basic\\, translational\\, clinical\\, and p\r\n opulation-based cancer research.\\n\\nRegistration is encouraged.\r\nDTEND:20260909T000000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260908T230000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: Any Target\\, Eve\r\n ry Time: How Multispecific Drugs are Transforming Pharmacotherapy\r\nUID:tag:localist.com\\,2008:EventInstance_51288589353433\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-any-target-every-time-how-multispecific-drugs-are-transforming\r\n -pharmacotherapy\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260909T190000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260909T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105047702\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260910\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Conferral of degrees\\, Summer Quarter. Graduates will have access t\r\n o official degree certifications and transcripts the day after degrees are \r\n posted.\r\nUID:tag:localist.com\\,2008:EventInstance_49464017788169\r\nURL:https://events.stanford.edu/event/conferral-of-degrees-summer-quarter-g\r\n raduates-will-have-access-to-official-degree-certifications-and-transcripts\r\n -the-day-after-degrees-are-posted-7510\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Academic Dates\r\nDESCRIPTION:This day\\, the university confers degrees for the most recent s\r\n ummer quarter.\r\nDTSTAMP:20260308T083915Z\r\nDTSTART;VALUE=DATE:20260910\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Summer Quarter: Conferral of Degrees\r\nUID:tag:localist.com\\,2008:EventInstance_50472530480612\r\nURL:https://events.stanford.edu/event/summer-quarter-conferral-of-degrees-9\r\n 70\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260911T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260911T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699937006\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260911T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260911T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682962917\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThis activity is a 4-day course for practicing Radiolog\r\n ists and Magnetic Resonance technologists. The conference will focus on new\r\n  strategies to correctly interpret common MRI exams\\, recognize image quali\r\n ty issues\\, and execute strategies to correct them. In addition\\, this cour\r\n se will review the underlying principles of MR physics and image protocol d\r\n ecisions with colleagues to improve team efficiency.\\n\\nRegistration\\nRegis\r\n tration fees includes course materials\\, certificate of participation\\, wel\r\n come reception\\, daily breakfast and lunch.\\n\\nYou can register to attend a\r\n ll 4 days\\, the weekend only (Saturday and Sunday)\\, or the weekday only (M\r\n onday and Tuesday).\\n\\nEarly Bird Rates -  until April 15\\, 2026:\\n\\nPhysic\r\n ians \\n\\nPhysicians Early - ALL 4 Days - $1\\,045.00\\n\\nPhysicians Early - W\r\n eekend ONLY - $545.00\\n\\nPhysicians Early - Weekday ONLY - $545.00\\n\\nRadio\r\n logy Technologists\\n\\nRadiology Technologists Early - ALL 4 Days - $845.00\\\r\n n\\nRadiology Technologists Early - Weekend ONLY - $445.00\\n\\nRadiology Tech\r\n nologists Early - Weekday ONLY - $445.00\\n\\nStudents\\n\\nResidents/Fellows/P\r\n ostdocs/Graduate Students Early - ALL 4 Days - $545.00\\n\\nResidents/Fellows\r\n /Postdocs/Graduate Students Early - Weekend ONLY - $245.00\\n\\nResidents/Fel\r\n lows/Postdocs/Graduate Students Early - Weekday ONLY - $245.00\\n\\nStudent R\r\n adiology Technologist Early - ALL 4 Days - $445.00\\n\\nStudent Radiology Tec\r\n hnologist Early - Weekend ONLY - $195.00\\n\\nStudent Radiology Technologist \r\n Early - Weekday ONLY - $195.00\\n\\nRates as of 4/15/2026\\n\\nPhysicians\\n\\nPh\r\n ysicians - ALL 4 Days - $1\\,095.00\\n\\nPhysicians - Weekend ONLY - $595.00\\n\r\n \\nPhysicians - Weekday ONLY - $595.00\\n\\nRadiology Technologists \\n\\nRadiol\r\n ogy Technologists - ALL 4 Days - $895.00\\n\\nRadiology Technologists - Weeke\r\n nd ONLY - $495.00\\n\\nRadiology Technologists - Weekday ONLY - $495.00\\n\\nSt\r\n udents \\n\\nResidents/Fellows/Postdocs/Graduate Students - ALL 4 Days - $595\r\n .00\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekend ONLY - $295.0\r\n 0\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekday ONLY - $295.00\\\r\n n\\nStudent Radiology Technologist - ALL 4 Days - $495.00\\n\\nStudent Radiolo\r\n gy Technologist - Weekend ONLY - $245.00\\n\\nStudent Radiology Technologist \r\n - Weekday ONLY - $245.00\\n\\nLimited space for students. Please contact Aman\r\n da Harrison at amanda.harrison@stanford.edu if spaces are booked and you wo\r\n uld like to be added to a waitlist.\\n\\nOptional Hands-On Scanning Workshops\r\n :\\n\\nLimited number of participants. Each workshop will review the content \r\n discussed during that day's scheduled sessions. If the workshop is full and\r\n  you would like to be added to a waitlist\\, please email amanda.harrison@st\r\n anford.edu\\n\\nSunday: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nMond\r\n ay: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nTuesday: Hands-On Scan\r\n ning Workshop (NON-CME) - $50.00\\n\\nTuition may be paid by Visa or MasterCa\r\n rd. Your email address is used for critical information\\, including registr\r\n ation confirmation\\, evaluation\\, and certificate. Be sure to include an em\r\n ail address that you check frequently.\\n\\nSTAP-eligible employees can use S\r\n TAP funds towards the registration fees for this activity complete the STAP\r\n  Reimbursement Request Form and submit to your department administrator.\\n\\\r\n nCreditsAMA PRA Category 1 Credits™ (22.50 hours)\\, Non-Physician Participa\r\n tion Credit (22.50 hours)\\n \\n\\nTarget AudienceSpecialties - Diagnostic Rad\r\n iology\\, Interventional Radiology and Diagnostic Radiology\\, Medical Physic\r\n s\\, Orthopedics & Sports Medicine\\, Radiation Oncology\\, Radiology\\, Therap\r\n eutic Medical PhysicsProfessions - Fellow/Resident\\, Non-Physician\\, Physic\r\n ian\\, Radiologic Technologist\\, Student \\n\\nObjectivesAt the conclusion of \r\n this activity\\, learners should be able to:\\n1. Discuss the meaning of core\r\n  MRI system component specifications and how they impact sequence parameter\r\n s.\\n2. Differentiate the parts of pulse sequences and their relationships t\r\n o image contrasts\\, SNR\\, and scan time. \\n3. Interpret the meaning of the \r\n resulting images of a diffuse liver disease MRI.\\n4. Develop skills for obt\r\n aining optimal fat suppression.\\n5. Develop strategies for improving diffus\r\n ion-weighted image quality and MR elastography images.\\n\\nAccreditationIn s\r\n upport of improving patient care\\, Stanford Medicine is jointly accredited \r\n by the Accreditation Council for Continuing Medical Education (ACCME)\\, the\r\n  Accreditation Council for Pharmacy Education (ACPE)\\, and the American Nur\r\n ses Credentialing Center (ANCC)\\, to provide continuing education for the h\r\n ealthcare team. \\n \\nCredit Designation \\nAmerican Medical Association (AMA\r\n ) \\nStanford Medicine designates this Live Activity for a maximum of 22.50 \r\n AMA PRA Category 1 CreditsTM.  Physicians should claim only the credit comm\r\n ensurate with the extent of their participation in the activity.\r\nDTEND:20260913T010000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260912T142000Z\r\nGEO:37.430757;-122.16489\r\nLOCATION:The Frances C. Arrillaga Alumni Center\\, Stanford\\, CA \r\nSEQUENCE:0\r\nSUMMARY:MRI: Clinical Updates and Practical Physics\r\nUID:tag:localist.com\\,2008:EventInstance_50852323822972\r\nURL:https://events.stanford.edu/event/mri-clinical-updates-and-practical-ph\r\n ysics-9762\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260912T183000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260912T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078601168\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260912T193000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260912T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699939055\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260912T210000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260912T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682963942\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThis activity is a 4-day course for practicing Radiolog\r\n ists and Magnetic Resonance technologists. The conference will focus on new\r\n  strategies to correctly interpret common MRI exams\\, recognize image quali\r\n ty issues\\, and execute strategies to correct them. In addition\\, this cour\r\n se will review the underlying principles of MR physics and image protocol d\r\n ecisions with colleagues to improve team efficiency.\\n\\nRegistration\\nRegis\r\n tration fees includes course materials\\, certificate of participation\\, wel\r\n come reception\\, daily breakfast and lunch.\\n\\nYou can register to attend a\r\n ll 4 days\\, the weekend only (Saturday and Sunday)\\, or the weekday only (M\r\n onday and Tuesday).\\n\\nEarly Bird Rates -  until April 15\\, 2026:\\n\\nPhysic\r\n ians \\n\\nPhysicians Early - ALL 4 Days - $1\\,045.00\\n\\nPhysicians Early - W\r\n eekend ONLY - $545.00\\n\\nPhysicians Early - Weekday ONLY - $545.00\\n\\nRadio\r\n logy Technologists\\n\\nRadiology Technologists Early - ALL 4 Days - $845.00\\\r\n n\\nRadiology Technologists Early - Weekend ONLY - $445.00\\n\\nRadiology Tech\r\n nologists Early - Weekday ONLY - $445.00\\n\\nStudents\\n\\nResidents/Fellows/P\r\n ostdocs/Graduate Students Early - ALL 4 Days - $545.00\\n\\nResidents/Fellows\r\n /Postdocs/Graduate Students Early - Weekend ONLY - $245.00\\n\\nResidents/Fel\r\n lows/Postdocs/Graduate Students Early - Weekday ONLY - $245.00\\n\\nStudent R\r\n adiology Technologist Early - ALL 4 Days - $445.00\\n\\nStudent Radiology Tec\r\n hnologist Early - Weekend ONLY - $195.00\\n\\nStudent Radiology Technologist \r\n Early - Weekday ONLY - $195.00\\n\\nRates as of 4/15/2026\\n\\nPhysicians\\n\\nPh\r\n ysicians - ALL 4 Days - $1\\,095.00\\n\\nPhysicians - Weekend ONLY - $595.00\\n\r\n \\nPhysicians - Weekday ONLY - $595.00\\n\\nRadiology Technologists \\n\\nRadiol\r\n ogy Technologists - ALL 4 Days - $895.00\\n\\nRadiology Technologists - Weeke\r\n nd ONLY - $495.00\\n\\nRadiology Technologists - Weekday ONLY - $495.00\\n\\nSt\r\n udents \\n\\nResidents/Fellows/Postdocs/Graduate Students - ALL 4 Days - $595\r\n .00\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekend ONLY - $295.0\r\n 0\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekday ONLY - $295.00\\\r\n n\\nStudent Radiology Technologist - ALL 4 Days - $495.00\\n\\nStudent Radiolo\r\n gy Technologist - Weekend ONLY - $245.00\\n\\nStudent Radiology Technologist \r\n - Weekday ONLY - $245.00\\n\\nLimited space for students. Please contact Aman\r\n da Harrison at amanda.harrison@stanford.edu if spaces are booked and you wo\r\n uld like to be added to a waitlist.\\n\\nOptional Hands-On Scanning Workshops\r\n :\\n\\nLimited number of participants. Each workshop will review the content \r\n discussed during that day's scheduled sessions. If the workshop is full and\r\n  you would like to be added to a waitlist\\, please email amanda.harrison@st\r\n anford.edu\\n\\nSunday: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nMond\r\n ay: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nTuesday: Hands-On Scan\r\n ning Workshop (NON-CME) - $50.00\\n\\nTuition may be paid by Visa or MasterCa\r\n rd. Your email address is used for critical information\\, including registr\r\n ation confirmation\\, evaluation\\, and certificate. Be sure to include an em\r\n ail address that you check frequently.\\n\\nSTAP-eligible employees can use S\r\n TAP funds towards the registration fees for this activity complete the STAP\r\n  Reimbursement Request Form and submit to your department administrator.\\n\\\r\n nCreditsAMA PRA Category 1 Credits™ (22.50 hours)\\, Non-Physician Participa\r\n tion Credit (22.50 hours)\\n \\n\\nTarget AudienceSpecialties - Diagnostic Rad\r\n iology\\, Interventional Radiology and Diagnostic Radiology\\, Medical Physic\r\n s\\, Orthopedics & Sports Medicine\\, Radiation Oncology\\, Radiology\\, Therap\r\n eutic Medical PhysicsProfessions - Fellow/Resident\\, Non-Physician\\, Physic\r\n ian\\, Radiologic Technologist\\, Student \\n\\nObjectivesAt the conclusion of \r\n this activity\\, learners should be able to:\\n1. Discuss the meaning of core\r\n  MRI system component specifications and how they impact sequence parameter\r\n s.\\n2. Differentiate the parts of pulse sequences and their relationships t\r\n o image contrasts\\, SNR\\, and scan time. \\n3. Interpret the meaning of the \r\n resulting images of a diffuse liver disease MRI.\\n4. Develop skills for obt\r\n aining optimal fat suppression.\\n5. Develop strategies for improving diffus\r\n ion-weighted image quality and MR elastography images.\\n\\nAccreditationIn s\r\n upport of improving patient care\\, Stanford Medicine is jointly accredited \r\n by the Accreditation Council for Continuing Medical Education (ACCME)\\, the\r\n  Accreditation Council for Pharmacy Education (ACPE)\\, and the American Nur\r\n ses Credentialing Center (ANCC)\\, to provide continuing education for the h\r\n ealthcare team. \\n \\nCredit Designation \\nAmerican Medical Association (AMA\r\n ) \\nStanford Medicine designates this Live Activity for a maximum of 22.50 \r\n AMA PRA Category 1 CreditsTM.  Physicians should claim only the credit comm\r\n ensurate with the extent of their participation in the activity.\r\nDTEND:20260914T003000Z\r\nDTSTAMP:20260308T083915Z\r\nDTSTART:20260913T142000Z\r\nGEO:37.430757;-122.16489\r\nLOCATION:The Frances C. Arrillaga Alumni Center\\, Stanford\\, CA \r\nSEQUENCE:0\r\nSUMMARY:MRI: Clinical Updates and Practical Physics\r\nUID:tag:localist.com\\,2008:EventInstance_50852323823997\r\nURL:https://events.stanford.edu/event/mri-clinical-updates-and-practical-ph\r\n ysics-9762\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260913T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260913T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682965991\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThis activity is a 4-day course for practicing Radiolog\r\n ists and Magnetic Resonance technologists. The conference will focus on new\r\n  strategies to correctly interpret common MRI exams\\, recognize image quali\r\n ty issues\\, and execute strategies to correct them. In addition\\, this cour\r\n se will review the underlying principles of MR physics and image protocol d\r\n ecisions with colleagues to improve team efficiency.\\n\\nRegistration\\nRegis\r\n tration fees includes course materials\\, certificate of participation\\, wel\r\n come reception\\, daily breakfast and lunch.\\n\\nYou can register to attend a\r\n ll 4 days\\, the weekend only (Saturday and Sunday)\\, or the weekday only (M\r\n onday and Tuesday).\\n\\nEarly Bird Rates -  until April 15\\, 2026:\\n\\nPhysic\r\n ians \\n\\nPhysicians Early - ALL 4 Days - $1\\,045.00\\n\\nPhysicians Early - W\r\n eekend ONLY - $545.00\\n\\nPhysicians Early - Weekday ONLY - $545.00\\n\\nRadio\r\n logy Technologists\\n\\nRadiology Technologists Early - ALL 4 Days - $845.00\\\r\n n\\nRadiology Technologists Early - Weekend ONLY - $445.00\\n\\nRadiology Tech\r\n nologists Early - Weekday ONLY - $445.00\\n\\nStudents\\n\\nResidents/Fellows/P\r\n ostdocs/Graduate Students Early - ALL 4 Days - $545.00\\n\\nResidents/Fellows\r\n /Postdocs/Graduate Students Early - Weekend ONLY - $245.00\\n\\nResidents/Fel\r\n lows/Postdocs/Graduate Students Early - Weekday ONLY - $245.00\\n\\nStudent R\r\n adiology Technologist Early - ALL 4 Days - $445.00\\n\\nStudent Radiology Tec\r\n hnologist Early - Weekend ONLY - $195.00\\n\\nStudent Radiology Technologist \r\n Early - Weekday ONLY - $195.00\\n\\nRates as of 4/15/2026\\n\\nPhysicians\\n\\nPh\r\n ysicians - ALL 4 Days - $1\\,095.00\\n\\nPhysicians - Weekend ONLY - $595.00\\n\r\n \\nPhysicians - Weekday ONLY - $595.00\\n\\nRadiology Technologists \\n\\nRadiol\r\n ogy Technologists - ALL 4 Days - $895.00\\n\\nRadiology Technologists - Weeke\r\n nd ONLY - $495.00\\n\\nRadiology Technologists - Weekday ONLY - $495.00\\n\\nSt\r\n udents \\n\\nResidents/Fellows/Postdocs/Graduate Students - ALL 4 Days - $595\r\n .00\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekend ONLY - $295.0\r\n 0\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekday ONLY - $295.00\\\r\n n\\nStudent Radiology Technologist - ALL 4 Days - $495.00\\n\\nStudent Radiolo\r\n gy Technologist - Weekend ONLY - $245.00\\n\\nStudent Radiology Technologist \r\n - Weekday ONLY - $245.00\\n\\nLimited space for students. Please contact Aman\r\n da Harrison at amanda.harrison@stanford.edu if spaces are booked and you wo\r\n uld like to be added to a waitlist.\\n\\nOptional Hands-On Scanning Workshops\r\n :\\n\\nLimited number of participants. Each workshop will review the content \r\n discussed during that day's scheduled sessions. If the workshop is full and\r\n  you would like to be added to a waitlist\\, please email amanda.harrison@st\r\n anford.edu\\n\\nSunday: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nMond\r\n ay: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nTuesday: Hands-On Scan\r\n ning Workshop (NON-CME) - $50.00\\n\\nTuition may be paid by Visa or MasterCa\r\n rd. Your email address is used for critical information\\, including registr\r\n ation confirmation\\, evaluation\\, and certificate. Be sure to include an em\r\n ail address that you check frequently.\\n\\nSTAP-eligible employees can use S\r\n TAP funds towards the registration fees for this activity complete the STAP\r\n  Reimbursement Request Form and submit to your department administrator.\\n\\\r\n nCreditsAMA PRA Category 1 Credits™ (22.50 hours)\\, Non-Physician Participa\r\n tion Credit (22.50 hours)\\n \\n\\nTarget AudienceSpecialties - Diagnostic Rad\r\n iology\\, Interventional Radiology and Diagnostic Radiology\\, Medical Physic\r\n s\\, Orthopedics & Sports Medicine\\, Radiation Oncology\\, Radiology\\, Therap\r\n eutic Medical PhysicsProfessions - Fellow/Resident\\, Non-Physician\\, Physic\r\n ian\\, Radiologic Technologist\\, Student \\n\\nObjectivesAt the conclusion of \r\n this activity\\, learners should be able to:\\n1. Discuss the meaning of core\r\n  MRI system component specifications and how they impact sequence parameter\r\n s.\\n2. Differentiate the parts of pulse sequences and their relationships t\r\n o image contrasts\\, SNR\\, and scan time. \\n3. Interpret the meaning of the \r\n resulting images of a diffuse liver disease MRI.\\n4. Develop skills for obt\r\n aining optimal fat suppression.\\n5. Develop strategies for improving diffus\r\n ion-weighted image quality and MR elastography images.\\n\\nAccreditationIn s\r\n upport of improving patient care\\, Stanford Medicine is jointly accredited \r\n by the Accreditation Council for Continuing Medical Education (ACCME)\\, the\r\n  Accreditation Council for Pharmacy Education (ACPE)\\, and the American Nur\r\n ses Credentialing Center (ANCC)\\, to provide continuing education for the h\r\n ealthcare team. \\n \\nCredit Designation \\nAmerican Medical Association (AMA\r\n ) \\nStanford Medicine designates this Live Activity for a maximum of 22.50 \r\n AMA PRA Category 1 CreditsTM.  Physicians should claim only the credit comm\r\n ensurate with the extent of their participation in the activity.\r\nDTEND:20260915T002000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260914T142000Z\r\nGEO:37.430757;-122.16489\r\nLOCATION:The Frances C. Arrillaga Alumni Center\\, Stanford\\, CA \r\nSEQUENCE:0\r\nSUMMARY:MRI: Clinical Updates and Practical Physics\r\nUID:tag:localist.com\\,2008:EventInstance_50852323825022\r\nURL:https://events.stanford.edu/event/mri-clinical-updates-and-practical-ph\r\n ysics-9762\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Conference/Symposium\r\nDESCRIPTION:OverviewThis activity is a 4-day course for practicing Radiolog\r\n ists and Magnetic Resonance technologists. The conference will focus on new\r\n  strategies to correctly interpret common MRI exams\\, recognize image quali\r\n ty issues\\, and execute strategies to correct them. In addition\\, this cour\r\n se will review the underlying principles of MR physics and image protocol d\r\n ecisions with colleagues to improve team efficiency.\\n\\nRegistration\\nRegis\r\n tration fees includes course materials\\, certificate of participation\\, wel\r\n come reception\\, daily breakfast and lunch.\\n\\nYou can register to attend a\r\n ll 4 days\\, the weekend only (Saturday and Sunday)\\, or the weekday only (M\r\n onday and Tuesday).\\n\\nEarly Bird Rates -  until April 15\\, 2026:\\n\\nPhysic\r\n ians \\n\\nPhysicians Early - ALL 4 Days - $1\\,045.00\\n\\nPhysicians Early - W\r\n eekend ONLY - $545.00\\n\\nPhysicians Early - Weekday ONLY - $545.00\\n\\nRadio\r\n logy Technologists\\n\\nRadiology Technologists Early - ALL 4 Days - $845.00\\\r\n n\\nRadiology Technologists Early - Weekend ONLY - $445.00\\n\\nRadiology Tech\r\n nologists Early - Weekday ONLY - $445.00\\n\\nStudents\\n\\nResidents/Fellows/P\r\n ostdocs/Graduate Students Early - ALL 4 Days - $545.00\\n\\nResidents/Fellows\r\n /Postdocs/Graduate Students Early - Weekend ONLY - $245.00\\n\\nResidents/Fel\r\n lows/Postdocs/Graduate Students Early - Weekday ONLY - $245.00\\n\\nStudent R\r\n adiology Technologist Early - ALL 4 Days - $445.00\\n\\nStudent Radiology Tec\r\n hnologist Early - Weekend ONLY - $195.00\\n\\nStudent Radiology Technologist \r\n Early - Weekday ONLY - $195.00\\n\\nRates as of 4/15/2026\\n\\nPhysicians\\n\\nPh\r\n ysicians - ALL 4 Days - $1\\,095.00\\n\\nPhysicians - Weekend ONLY - $595.00\\n\r\n \\nPhysicians - Weekday ONLY - $595.00\\n\\nRadiology Technologists \\n\\nRadiol\r\n ogy Technologists - ALL 4 Days - $895.00\\n\\nRadiology Technologists - Weeke\r\n nd ONLY - $495.00\\n\\nRadiology Technologists - Weekday ONLY - $495.00\\n\\nSt\r\n udents \\n\\nResidents/Fellows/Postdocs/Graduate Students - ALL 4 Days - $595\r\n .00\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekend ONLY - $295.0\r\n 0\\n\\nResidents/Fellows/Postdocs/Graduate Students - Weekday ONLY - $295.00\\\r\n n\\nStudent Radiology Technologist - ALL 4 Days - $495.00\\n\\nStudent Radiolo\r\n gy Technologist - Weekend ONLY - $245.00\\n\\nStudent Radiology Technologist \r\n - Weekday ONLY - $245.00\\n\\nLimited space for students. Please contact Aman\r\n da Harrison at amanda.harrison@stanford.edu if spaces are booked and you wo\r\n uld like to be added to a waitlist.\\n\\nOptional Hands-On Scanning Workshops\r\n :\\n\\nLimited number of participants. Each workshop will review the content \r\n discussed during that day's scheduled sessions. If the workshop is full and\r\n  you would like to be added to a waitlist\\, please email amanda.harrison@st\r\n anford.edu\\n\\nSunday: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nMond\r\n ay: Hands-On Scanning Workshop (NON-CME) - $50.00\\n\\nTuesday: Hands-On Scan\r\n ning Workshop (NON-CME) - $50.00\\n\\nTuition may be paid by Visa or MasterCa\r\n rd. Your email address is used for critical information\\, including registr\r\n ation confirmation\\, evaluation\\, and certificate. Be sure to include an em\r\n ail address that you check frequently.\\n\\nSTAP-eligible employees can use S\r\n TAP funds towards the registration fees for this activity complete the STAP\r\n  Reimbursement Request Form and submit to your department administrator.\\n\\\r\n nCreditsAMA PRA Category 1 Credits™ (22.50 hours)\\, Non-Physician Participa\r\n tion Credit (22.50 hours)\\n \\n\\nTarget AudienceSpecialties - Diagnostic Rad\r\n iology\\, Interventional Radiology and Diagnostic Radiology\\, Medical Physic\r\n s\\, Orthopedics & Sports Medicine\\, Radiation Oncology\\, Radiology\\, Therap\r\n eutic Medical PhysicsProfessions - Fellow/Resident\\, Non-Physician\\, Physic\r\n ian\\, Radiologic Technologist\\, Student \\n\\nObjectivesAt the conclusion of \r\n this activity\\, learners should be able to:\\n1. Discuss the meaning of core\r\n  MRI system component specifications and how they impact sequence parameter\r\n s.\\n2. Differentiate the parts of pulse sequences and their relationships t\r\n o image contrasts\\, SNR\\, and scan time. \\n3. Interpret the meaning of the \r\n resulting images of a diffuse liver disease MRI.\\n4. Develop skills for obt\r\n aining optimal fat suppression.\\n5. Develop strategies for improving diffus\r\n ion-weighted image quality and MR elastography images.\\n\\nAccreditationIn s\r\n upport of improving patient care\\, Stanford Medicine is jointly accredited \r\n by the Accreditation Council for Continuing Medical Education (ACCME)\\, the\r\n  Accreditation Council for Pharmacy Education (ACPE)\\, and the American Nur\r\n ses Credentialing Center (ANCC)\\, to provide continuing education for the h\r\n ealthcare team. \\n \\nCredit Designation \\nAmerican Medical Association (AMA\r\n ) \\nStanford Medicine designates this Live Activity for a maximum of 22.50 \r\n AMA PRA Category 1 CreditsTM.  Physicians should claim only the credit comm\r\n ensurate with the extent of their participation in the activity.\r\nDTEND:20260915T225000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260915T142000Z\r\nGEO:37.430757;-122.16489\r\nLOCATION:The Frances C. Arrillaga Alumni Center\\, Stanford\\, CA \r\nSEQUENCE:0\r\nSUMMARY:MRI: Clinical Updates and Practical Physics\r\nUID:tag:localist.com\\,2008:EventInstance_50852323827071\r\nURL:https://events.stanford.edu/event/mri-clinical-updates-and-practical-ph\r\n ysics-9762\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260916T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260916T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105047703\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDTEND:20260917T170000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260917T160000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Faculty Professional Development Overview\r\nUID:tag:localist.com\\,2008:EventInstance_51314722343349\r\nURL:https://events.stanford.edu/event/faculty-professional-development-over\r\n view\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260918T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260918T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699941104\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260918T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260918T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682967016\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260919T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260919T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078603217\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260919T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260919T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699943153\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260919T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260919T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682969065\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260920T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260920T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682971114\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260920T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260920T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766135369\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20260921T191500Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260921T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314079363\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260923T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260923T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105048728\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260925T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260925T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699944178\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260925T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260925T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682973163\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260926T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260926T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078604242\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20260926T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260926T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699946227\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260926T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260926T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682974188\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20260927T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260927T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543416362\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20260927T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260927T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682976237\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20260930T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20260930T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105049753\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261002T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261002T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699948276\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261002T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261002T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682978286\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Lecture/Presentation/Talk,Other\r\nDESCRIPTION:In this in-person session\\, an admission officer provides an ov\r\n erview of Knight-Hennessy Scholars\\, the admission process\\, and the applic\r\n ation. The session includes a presentation\\, and Knight-Hennessy scholar(s)\r\n  may join to share their experience. \\n\\nAbout Knight-Hennessy Scholars\\n\\n\r\n Knight-Hennessy Scholars is a multidisciplinary\\, multicultural graduate sc\r\n holarship program. Each Knight-Hennessy scholar receives up to three years \r\n of financial support to pursue graduate studies at Stanford while participa\r\n ting in engaging experiences that prepare scholars to be visionary\\, courag\r\n eous\\, and collaborative leaders who address complex challenges facing the \r\n world.\\n\\nEligibility\\n\\nYou are eligible to apply to the 2027 cohort of Kn\r\n ight-Hennessy Scholars if you earned (or will earn) your bachelor's degree \r\n in 2020 or later. For military (active or veteran) applicants\\, you are eli\r\n gible if you earned your bachelor's degree in 2018 or later. Additionally\\,\r\n  current Stanford PhD students in the first year of enrollment may apply if\r\n  starting at KHS in the second year of PhD enrollment.\\n\\nDeadline\\n\\nThe K\r\n HS application to join the 2026 cohort is now closed. The KHS application t\r\n o join the 2027 cohort will open in summer 2026. \\n\\nParking\\n\\nParking at \r\n Stanford University is free after 4:00 pm Monday-Friday. We recommend you u\r\n se the Tressider Lot or street parking. Please visit Stanford Transportatio\r\n n for more information.\\n\\nYou will receive details on how to join the even\r\n t by email following registration.\r\nDTEND:20261003T000000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261002T230000Z\r\nGEO:37.423558;-122.173774\r\nLOCATION:Denning House\r\nSEQUENCE:0\r\nSUMMARY:Info session for Knight-Hennessy Scholars\r\nUID:tag:localist.com\\,2008:EventInstance_51934621373606\r\nURL:https://events.stanford.edu/event/copy-of-info-session-for-knight-henne\r\n ssy-scholars-633\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261003T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261003T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078605267\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261003T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261003T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699950325\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261003T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261003T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682980335\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261004T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261004T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682981360\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20261004T223000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261004T210000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740376594\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261007T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261007T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105050778\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261009T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261009T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699952374\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261009T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261009T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682983409\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261010T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261010T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078606292\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261010T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261010T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699954423\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261010T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261010T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682985458\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261011T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261011T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682987507\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261014T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261014T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105051803\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:\r\nDESCRIPTION:Save the date for the annual Wu Tsai Neurosciences Symposium! \\\r\n n\\nConfirmed speakers:Uri Hasson\\, Princeton UniversityMargaret Livingstone\r\n \\, Harvard UniversityLiqun Luo\\, Stanford UniversityRebecca Saxe\\, MITDebra\r\n  Silver\\, Duke University \\n\\nMore details will be announced.\r\nDTEND:20261016T010000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261015T153000Z\r\nLOCATION:Li Ka Shing Center (LKSC)\\, Stanford University\r\nSEQUENCE:0\r\nSUMMARY:Wu Tsai Neurosciences Institute Symposium 2026\r\nUID:tag:localist.com\\,2008:EventInstance_52246796657850\r\nURL:https://events.stanford.edu/event/wu-tsai-neurosciences-institute-sympo\r\n sium-2026\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261016T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261016T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699956472\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261016T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261016T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682989556\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Reunion Homecoming and Annual Reception\\n\\nEach fall\\, undergra\r\n duate and graduate alumni of the Physics Department are invited to attend a\r\n  special physics alumni reunion reception on the Stanford campus during Reu\r\n nion Homecoming Weekend. The 2026 reception will be held on Friday\\, Octobe\r\n r 16\\, 2026 from 5:30-6:30 PM in the Varian Physics lobby & outdoor patio. \r\n If you are planning to attend\\, we ask that you please RSVP with this form \r\n no later than October 9th to aid with logistic. RSVPs are not required\\, bu\r\n t highly encouraged!\r\nDTEND:20261017T013000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261017T003000Z\r\nGEO:37.428689;-122.172615\r\nLOCATION:Varian\r\nSEQUENCE:0\r\nSUMMARY:Physics Alumni Reunion Homecoming\r\nUID:tag:localist.com\\,2008:EventInstance_51958293298574\r\nURL:https://events.stanford.edu/event/physics-alumni-reunion-homecoming\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261017T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261017T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078607317\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261017T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261017T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699958521\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261017T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261017T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682990581\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261018T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261018T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682992630\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261018T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261018T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766137418\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20261019T191500Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261019T181500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314079364\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261021T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261021T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105052828\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261023T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261023T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699960570\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261023T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261023T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682994679\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261024T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261024T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078608342\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261024T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261024T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699961595\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261024T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261024T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682996728\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Created on-site at Stanford by artists from Papua New Guinea\\, \r\n the garden contains wood and stone carvings of people\\, animals\\, and magic\r\n al beings that illustrate clan stories and creation myths. Meet on the corn\r\n er of Santa Teresa and Lomita Drive.\\n\\nPublic Tours: Fourth Sunday of each\r\n  month at 11:30am\\, rain or shine. \\n\\nAdmission Info\\n\\nTours do not requi\r\n re a reservation and are free of charge.\r\nDTEND:20261025T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261025T183000Z\r\nLOCATION:Meet at the Papua New Guinea Sculpture Garden\\, at the corner of S\r\n anta Teresa & Lomita Drive.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Papua New Guinea Sculpture Walk\r\nUID:tag:localist.com\\,2008:EventInstance_48358543418411\r\nURL:https://events.stanford.edu/event/public_tour_papua_new_guinea_sculptur\r\n e_walk_1489\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261025T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261025T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375682998777\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261028T190000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261028T160000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105053853\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261030T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261030T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699963644\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261030T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261030T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683000826\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261031T183000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261031T163000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078609367\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261031T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261031T183000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699965693\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261031T210000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261031T200000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683001851\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261101T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261101T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683003900\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Explore the Stanford campus and its distinguished collection of\r\n  outdoor sculpture. This docent tour explores the extensive collection of 2\r\n 0th century outdoor sculpture in Stanford’s Quad and south campus. Meet at \r\n the top of the Oval near the benches.\\n\\nFirst come\\, first served. Tours d\r\n o not require a reservation and are free of charge. \\n\\nTours may be subjec\r\n t to change\\, we appreciate your understanding. \\n\\n1st Sunday of each mont\r\n h from 2 pm – 3:30 pm\\, rain or shine.\r\nDTEND:20261101T233000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261101T220000Z\r\nLOCATION:Meet at the top of the Oval near the benches.\r\nSEQUENCE:0\r\nSUMMARY:Public Tour: Outdoor Sculpture Walk\\, Campus\r\nUID:tag:localist.com\\,2008:EventInstance_51375740377619\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-outdoor-sculpture\r\n -walk-campus\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261104T200000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261104T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105054878\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261106T203000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261106T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699967742\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261106T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261106T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683005949\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261107T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261107T173000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078610392\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261107T203000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261107T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699969791\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261107T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261107T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683007998\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261108T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261108T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683010047\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Class/Seminar\r\nDESCRIPTION:The Stanford Cancer Institute Breakthroughs in Cancer seminar s\r\n eries is one of the highest-profile seminar series for translational and cl\r\n inical scientists in oncology. The series brings national leaders in cancer\r\n  research to Stanford’s campus and highlights innovations across the spectr\r\n um of basic\\, translational\\, clinical\\, and population science. \\n\\nJoin u\r\n s Tuesday\\, November 10\\, 4-5 p.m.\\, at Munzer Auditorium\\, Beckman Center\\\r\n , or Zoom for a presentation by Maria Landi\\, MD\\, PhD\\, senior advisor for\r\n  genomic epidemiology\\, NIH / NCI.\\n\\nThe event is open to Stanford Cancer \r\n Institute members\\, postdocs\\, fellows\\, and students\\, as well as Stanford\r\n  University and Stanford Medicine faculty\\, trainees\\, and staff interested\r\n  in basic\\, translational\\, clinical\\, and population-based cancer research\r\n .\\n\\nRegistration is encouraged.\r\nDTEND:20261111T010000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261111T000000Z\r\nGEO:37.431924;-122.1767\r\nLOCATION:Beckman Center\\, Munzer Auditorium\r\nSEQUENCE:0\r\nSUMMARY:Stanford Cancer Institute Breakthroughs in Cancer: Rethinking Lung \r\n Cancer: What We’re Learning from Never Smokers\r\nUID:tag:localist.com\\,2008:EventInstance_51288621937120\r\nURL:https://events.stanford.edu/event/stanford-cancer-institute-breakthroug\r\n hs-in-cancer-rethinking-lung-cancer-what-were-learning-from-never-smokers\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261111T200000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261111T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105055903\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Meeting\r\nDTEND:20261112T180000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261112T170000Z\r\nLOCATION:\r\nSEQUENCE:0\r\nSUMMARY:Retirements & Recalls\r\nUID:tag:localist.com\\,2008:EventInstance_51314745689931\r\nURL:https://events.stanford.edu/event/retirements-recalls\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261113T203000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261113T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699970816\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261113T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261113T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683012096\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261114T193000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261114T173000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm\r\nUID:tag:localist.com\\,2008:EventInstance_51288078611417\r\nURL:https://events.stanford.edu/event/copy-of-volunteering-at-the-stanford-\r\n educational-farm\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:This exhibition celebrates Auguste Rodin’s relentless pursuit t\r\n o convey complex emotions\\, diverse psychological states\\, and pure sensual\r\n ity through the nude. A century after his death\\, Auguste Rodin continues t\r\n o be recognized for making figurative sculpture modern by redefining the ex\r\n pressive capacity of the human form. IMAGE: Auguste Rodin (France\\, 1840–19\r\n 17)\\, The Age of Bronze (L’Âge d’airain)\\, 1875-1876. Bronze\\, cast c. 1920\r\n . Gift of the B. Gerald Cantor Collection\\, 1983.300\\n\\nPublic Tours: Frida\r\n ys and Saturdays at 11:30am\\n\\nAdmission Info\\n\\nTours do not require a res\r\n ervation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261114T203000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261114T193000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour |  Auguste Rodin\r\nUID:tag:localist.com\\,2008:EventInstance_48217699972865\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-auguste-rodin\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261114T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261114T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683015169\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Public Tours: Cantor Highlights\\n\\nExplore the highlights of th\r\n e Cantor's permanent collection on a public tour that leads you through a s\r\n election of works spanning varied cultures and time periods. \\n\\nAdmission \r\n Info\\n\\nPlease confirm all tours with our Visitor Services staff when you c\r\n heck in at the information desk. Tours may be subject to change or cancella\r\n tion.\\n\\nScheduled Public Tours are first come\\, first served. They do not \r\n require separate advance registration.Scheduled Public Tours are between fo\r\n rty-five minutes and one hour long\\, free of charge\\, and meet in the lobby\r\n  unless otherwise noted.\r\nDTEND:20261115T220000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261115T210000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Cantor Highlights: 1 PM\r\nUID:tag:localist.com\\,2008:EventInstance_51375683018242\r\nURL:https://events.stanford.edu/event/copy-of-public-tour-cantor-highlights\r\n -1-pm-4356\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Tour\r\nDESCRIPTION:Learn from a trained docent as you walk among the diverse colle\r\n ction of outdoor sculpture surrounding the Cantor Art Center. Meet at the e\r\n ntrance to the museum.\\n\\nPublic Tours: 3rd Sunday of each month 2 pm\\; mee\r\n t in front of museum\\, rain or shine\\n\\nAdmission Info\\n\\nTours do not requ\r\n ire a reservation and are free of charge.\\n\\nFirst come\\, first served!\r\nDTEND:20261115T230000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261115T220000Z\r\nGEO:37.432981;-122.170494\r\nLOCATION:Cantor Arts Center\r\nSEQUENCE:0\r\nSUMMARY:Public Tour | Outdoor Sculpture Walk\\, Museum\r\nUID:tag:localist.com\\,2008:EventInstance_51756766138443\r\nURL:https://events.stanford.edu/event/public_tour_outdoor_sculpture_walk_mu\r\n seum\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception\r\nDESCRIPTION:Museum Minis is a welcoming monthly storytime at the Anderson C\r\n ollection for children ages 0–5 and their caregivers. Each session features\r\n  two engaging\\, age-appropriate books inspired by the essential elements of\r\n  art—line\\, color\\, shape\\, and texture—introducing young children to these\r\n  ideas and connecting them to artworks in the museum’s collection. Together\r\n \\, families are invited to look closely\\, notice details\\, and experience t\r\n he museum environment in an accessible\\, joyful way. The Anderson Collectio\r\n n is home to works by artists such as Jackson Pollock\\, Mark Rothko\\, Joan \r\n Mitchell\\, and Nick Cave. The morning concludes with a light snack and time\r\n  to connect.\\n\\n\\n\\nMaria Raimundo is a Visitor Experience Assistant and Mu\r\n seum Engagement Guide at the Anderson Collection. She brings a deep love of\r\n  art\\, storytelling\\, and community to her work\\, and believes that every a\r\n rtwork — and every person — holds a story worth sharing. Outside the museum\r\n \\, she enjoys prioritizing wellness and slowing down with a good cup of tea\r\n .\\n\\nNo RSVP necessary\\, walk-ins welcome!\r\nDTEND:20261116T201500Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261116T191500Z\r\nGEO:37.433768;-122.170791\r\nLOCATION:Anderson Collection\\, The Denning Resource Center \r\nSEQUENCE:0\r\nSUMMARY:Museum Minis: Storytime with Maria Raimundo\r\nUID:tag:localist.com\\,2008:EventInstance_52137314081413\r\nURL:https://events.stanford.edu/event/museum-minis-storytime-with-maria-rai\r\n mundo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nCATEGORIES:Social Event/Reception,Other\r\nDESCRIPTION:Volunteers help keep the farm running. Volunteer tasks vary fro\r\n m week to week. Farm tasks may include keeping our fields free of weeds and\r\n  rocks\\, planting new crop rotations\\, deadheading flowers\\, teaming up on \r\n irrigation\\, composting\\, mulching\\, and having a great time getting dirty.\r\n  We ask that volunteers come prepared with close-toed shoes and clothes you\r\n  don't mind getting dirty! We have gloves and tools for all.\\n\\nWe welcome \r\n volunteers 10 years old and older. Those between 10 and 14 years old are re\r\n quired to have a guardian actively volunteering alongside them for the dura\r\n tion of the volunteer session.\\n\\nWe reserve the right to cancel volunteer \r\n sessions up to two hours in advance. Possible reasons for cancelation are a\r\n  change in COVID-19 guidelines as outlined by the University or County Offi\r\n cials\\, excessive heat (90 degree and above)\\, poor air quality\\, rain or o\r\n ther inclement weather.\\n\\nWe encourage all volunteers to carpool\\, bike\\, \r\n ride public transportation\\; there is a charge for parking on all Stanford \r\n property. The farm is not responsible for any tickets incurred while volunt\r\n eering.\\n\\nUPON ARRIVAL: ALL VOLUNTEERS MUST COMPLETE A SAFETY WAIVER \\n\\nW\r\n HEN YOU ARRIVE AT THE FARM: Complete Waiver Form\r\nDTEND:20261118T200000Z\r\nDTSTAMP:20260308T083916Z\r\nDTSTART:20261118T170000Z\r\nGEO:37.426059;-122.183261\r\nLOCATION:O'Donohue Educational Farm\r\nSEQUENCE:0\r\nSUMMARY:Volunteering at Stanford Educational Farm - Weekday\r\nUID:tag:localist.com\\,2008:EventInstance_51888105056928\r\nURL:https://events.stanford.edu/event/volunteering-at-stanford-educational-\r\n farm-weekday\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
  },
  {
    "path": "packages/fixtures/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/fixtures\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"types\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\",\n    \"sync\": \"bun run src/scripts/sync-fixtures.ts\",\n    \"verify\": \"bun run src/scripts/verify-fixtures.ts\"\n  },\n  \"dependencies\": {\n    \"arktype\": \"^2.2.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/fixtures/src/cache.ts",
    "content": "import type { FixtureManifest, FixtureSource } from \"./schema\";\n\nconst DEFAULT_FIXTURE_DIRECTORY_SEGMENT = \"ics\";\n\ninterface FixtureDirectoryOptions {\n  fixtureDirectory?: string;\n}\n\ninterface SyncFixtureFilesOptions extends FixtureDirectoryOptions {\n  fetchImplementation?: typeof fetch;\n  forceRefresh?: boolean;\n  includeDisabled?: boolean;\n}\n\ninterface SyncedFixture {\n  downloaded: boolean;\n  id: string;\n  path: string;\n}\n\ninterface MissingFixture {\n  id: string;\n  path: string;\n}\n\nconst getFixturesPackageDirectory = (): string =>\n  decodeURIComponent(new URL(\"..\", import.meta.url).pathname);\n\nconst getDefaultFixtureDirectory = (): string =>\n  `${getFixturesPackageDirectory()}/${DEFAULT_FIXTURE_DIRECTORY_SEGMENT}`;\n\nconst getFixtureDirectory = (options: FixtureDirectoryOptions = {}): string =>\n  options.fixtureDirectory\n  ?? process.env.KEEPER_ICS_FIXTURE_DIR\n  ?? getDefaultFixtureDirectory();\n\nconst getFixtureFileName = (fixtureSource: FixtureSource): string =>\n  fixtureSource.fileName;\n\nconst getFixturePath = (\n  fixtureSource: FixtureSource,\n  options: FixtureDirectoryOptions = {},\n): string => `${getFixtureDirectory(options)}/${getFixtureFileName(fixtureSource)}`;\n\nconst pathExists = (path: string): Promise<boolean> => Bun.file(path).exists();\n\nconst getEnabledFixtures = (manifest: FixtureManifest, includeDisabled?: boolean): FixtureManifest => {\n  if (includeDisabled) {\n    return manifest;\n  }\n  return manifest.filter((fixtureSource) => fixtureSource.enabled !== false);\n};\n\nconst syncFixtureFiles = async (\n  fixtureManifest: FixtureManifest,\n  options: SyncFixtureFilesOptions = {},\n): Promise<SyncedFixture[]> => {\n  const fixtureDirectory = getFixtureDirectory({ fixtureDirectory: options.fixtureDirectory });\n  await Bun.$`mkdir -p ${fixtureDirectory}`;\n\n  const fetchImplementation = options.fetchImplementation ?? fetch;\n  const enabledFixtures = getEnabledFixtures(fixtureManifest, options.includeDisabled);\n\n  const syncedFixtures: SyncedFixture[] = [];\n\n  for (const fixtureSource of enabledFixtures) {\n    const fixturePath = getFixturePath(fixtureSource, { fixtureDirectory });\n    const fixtureExists = await pathExists(fixturePath);\n    const shouldDownload = options.forceRefresh === true || !fixtureExists;\n\n    if (!shouldDownload) {\n      syncedFixtures.push({\n        downloaded: false,\n        id: fixtureSource.id,\n        path: fixturePath,\n      });\n      continue;\n    }\n\n    if (!fixtureSource.sourceUrl) {\n      throw new Error(\n        `Fixture ${fixtureSource.id} is missing sourceUrl and cannot be downloaded`,\n      );\n    }\n\n    const response = await fetchImplementation(fixtureSource.sourceUrl);\n    if (!response.ok) {\n      throw new Error(\n        `Failed to download fixture ${fixtureSource.id}: ${response.status} ${response.statusText}`,\n      );\n    }\n\n    const fixtureContent = await response.text();\n    await Bun.write(fixturePath, fixtureContent);\n\n    syncedFixtures.push({\n      downloaded: true,\n      id: fixtureSource.id,\n      path: fixturePath,\n    });\n  }\n\n  return syncedFixtures;\n};\n\nconst findMissingFixtures = async (\n  fixtureManifest: FixtureManifest,\n  options: FixtureDirectoryOptions = {},\n): Promise<MissingFixture[]> => {\n  const fixtureDirectory = getFixtureDirectory({ fixtureDirectory: options.fixtureDirectory });\n  const missingFixtures: MissingFixture[] = [];\n\n  for (const fixtureSource of fixtureManifest) {\n    if (fixtureSource.enabled === false) {\n      continue;\n    }\n\n    const fixturePath = getFixturePath(fixtureSource, { fixtureDirectory });\n    const fixtureExists = await pathExists(fixturePath);\n    if (!fixtureExists) {\n      missingFixtures.push({\n        id: fixtureSource.id,\n        path: fixturePath,\n      });\n    }\n  }\n\n  return missingFixtures;\n};\n\nexport {\n  findMissingFixtures,\n  getDefaultFixtureDirectory,\n  getFixtureDirectory,\n  getFixtureFileName,\n  getFixturePath,\n  syncFixtureFiles,\n};\nexport type {\n  FixtureDirectoryOptions,\n  MissingFixture,\n  SyncFixtureFilesOptions,\n  SyncedFixture,\n};\n"
  },
  {
    "path": "packages/fixtures/src/index.ts",
    "content": "export { fixtureManifest } from \"./manifest\";\nexport {\n  findMissingFixtures,\n  getDefaultFixtureDirectory,\n  getFixtureDirectory,\n  getFixtureFileName,\n  getFixturePath,\n  syncFixtureFiles,\n} from \"./cache\";\nexport {\n  fixtureExpectationSchema,\n  fixtureSourceSchema,\n  fixtureManifestSchema,\n} from \"./schema\";\nexport type {\n  FixtureDirectoryOptions,\n  MissingFixture,\n  SyncFixtureFilesOptions,\n  SyncedFixture,\n} from \"./cache\";\nexport type {\n  FixtureExpectation,\n  FixtureSource,\n  FixtureManifest,\n} from \"./schema\";\n"
  },
  {
    "path": "packages/fixtures/src/manifest.ts",
    "content": "import { fixtureManifestSchema } from \"./schema\";\nimport type { FixtureManifest } from \"./schema\";\n\nconst fixtureManifest: FixtureManifest = fixtureManifestSchema.assert([\n  {\n    description: \"Google public US holidays feed with broad all-day event coverage\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: false,\n    },\n    fileName: \"google-us-holidays.ics\",\n    id: \"google-us-holidays\",\n    sourceUrl: \"https://calendar.google.com/calendar/ical/en.usa%23holiday%40group.v.calendar.google.com/public/basic.ics\",\n    tags: [\"all_day\", \"holidays\", \"google\"],\n  },\n  {\n    description: \"Google public Canada holidays feed for locale variation\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: false,\n    },\n    fileName: \"google-canada-holidays.ics\",\n    id: \"google-canada-holidays\",\n    sourceUrl: \"https://calendar.google.com/calendar/ical/en.canadian%23holiday%40group.v.calendar.google.com/public/basic.ics\",\n    tags: [\"all_day\", \"holidays\", \"google\", \"locale_variant\"],\n  },\n  {\n    description: \"Official UK government bank holidays ICS (England and Wales)\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: false,\n    },\n    fileName: \"govuk-bank-holidays-england-wales.ics\",\n    id: \"govuk-bank-holidays-england-wales\",\n    sourceUrl: \"https://www.gov.uk/bank-holidays/england-and-wales.ics\",\n    tags: [\"all_day\", \"holidays\", \"government\"],\n  },\n  {\n    description: \"CalendarLabs US holidays feed as alternate provider format\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: false,\n    },\n    fileName: \"calendarlabs-us-holidays.ics\",\n    id: \"calendarlabs-us-holidays\",\n    sourceUrl: \"https://www.calendarlabs.com/ical-calendar/ics/76/US_Holidays.ics\",\n    tags: [\"all_day\", \"holidays\", \"third_party\"],\n  },\n  {\n    description: \"Hebcal geo-based feed with mixed all-day/timed events and TZID usage\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: true,\n    },\n    fileName: \"hebcal-geoname-3448439.ics\",\n    id: \"hebcal-geoname-3448439\",\n    sourceUrl: \"https://www.hebcal.com/hebcal?v=1&cfg=ics&maj=on&min=on&mod=on&nx=on&year=now&month=x&ss=on&mf=on&c=on&geo=geoname&geonameid=3448439&M=on&s=on\",\n    tags: [\"mixed\", \"religious\", \"tzid\", \"time_zone\"],\n  },\n  {\n    description: \"UC Berkeley seminar feed with timed events and organizer/url fields\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: false,\n    },\n    fileName: \"berkeley-ib-seminars.ics\",\n    id: \"berkeley-ib-seminars\",\n    sourceUrl: \"https://ib.berkeley.edu/seminars/ib_seminars.ics\",\n    tags: [\"timed\", \"organizer\", \"url\", \"academic\"],\n  },\n  {\n    description: \"Meetup NY Tech feed with VTIMEZONE and timezone RRULE blocks\",\n    expected: {\n      containsRecurrence: true,\n      containsTimeZone: true,\n    },\n    fileName: \"meetup-ny-tech.ics\",\n    id: \"meetup-ny-tech\",\n    sourceUrl: \"https://www.meetup.com/ny-tech/events/ical/\",\n    tags: [\"timed\", \"meetup\", \"vtimezone\", \"rrule\"],\n  },\n  {\n    description: \"Meetup TorontoJS feed with VTIMEZONE and timezone RRULE blocks\",\n    expected: {\n      containsRecurrence: true,\n      containsTimeZone: true,\n    },\n    fileName: \"meetup-torontojs.ics\",\n    id: \"meetup-torontojs\",\n    sourceUrl: \"https://www.meetup.com/TorontoJS/events/ical/\",\n    tags: [\"timed\", \"meetup\", \"vtimezone\", \"rrule\"],\n  },\n  {\n    description: \"Large Stanford featured-events feed for parser and memory stress testing\",\n    expected: {\n      containsRecurrence: false,\n      containsTimeZone: false,\n    },\n    fileName: \"stanford-featured-events.ics\",\n    id: \"stanford-featured-events\",\n    sourceUrl: \"https://events.stanford.edu/calendar/featured-events.ics\",\n    tags: [\"large_feed\", \"timed\", \"all_day\", \"stress_test\"],\n  },\n  {\n    description: \"Microsoft Exchange/Outlook ICS export with Windows timezone IDs instead of IANA\",\n    expected: {\n      containsRecurrence: true,\n      containsTimeZone: true,\n    },\n    fileName: \"outlook-exchange-windows-timezones.ics\",\n    id: \"outlook-exchange-windows-timezones\",\n    tags: [\"timed\", \"outlook\", \"windows_timezone\", \"rrule\", \"vtimezone\"],\n  },\n]);\n\nexport { fixtureManifest };\n"
  },
  {
    "path": "packages/fixtures/src/schema.ts",
    "content": "import { type } from \"arktype\";\n\nconst fixtureExpectationSchema = type({\n  \"containsExceptions?\": \"boolean\",\n  \"containsRecurrence?\": \"boolean\",\n  \"containsTimeZone?\": \"boolean\",\n  \"+\": \"reject\",\n});\ntype FixtureExpectation = typeof fixtureExpectationSchema.infer;\n\nconst fixtureSourceSchema = type({\n  fileName: \"string\",\n  id: \"string\",\n  \"description?\": \"string\",\n  \"enabled?\": \"boolean\",\n  \"expected?\": fixtureExpectationSchema,\n  \"sourceUrl?\": \"string.url\",\n  \"tags?\": \"string[]\",\n  \"+\": \"reject\",\n});\ntype FixtureSource = typeof fixtureSourceSchema.infer;\n\nconst fixtureManifestSchema = fixtureSourceSchema.array();\ntype FixtureManifest = typeof fixtureManifestSchema.infer;\n\nexport { fixtureExpectationSchema, fixtureSourceSchema, fixtureManifestSchema };\nexport type { FixtureExpectation, FixtureSource, FixtureManifest };\n"
  },
  {
    "path": "packages/fixtures/src/scripts/sync-fixtures.ts",
    "content": "import { fixtureManifest } from \"../manifest\";\nimport { syncFixtureFiles } from \"../cache\";\n\nconst FORCE_REFRESH_FLAG = \"--refresh\";\nconst INCLUDE_DISABLED_FLAG = \"--include-disabled\";\n\nconst hasFlag = (flag: string): boolean => process.argv.includes(flag);\n\nconst run = async (): Promise<void> => {\n  await syncFixtureFiles(fixtureManifest, {\n    forceRefresh: hasFlag(FORCE_REFRESH_FLAG),\n    includeDisabled: hasFlag(INCLUDE_DISABLED_FLAG),\n  });\n};\n\nawait run();\n"
  },
  {
    "path": "packages/fixtures/src/scripts/verify-fixtures.ts",
    "content": "import { fixtureManifest } from \"../manifest\";\nimport { findMissingFixtures } from \"../cache\";\n\nconst run = async (): Promise<void> => {\n  const missingFixtures = await findMissingFixtures(fixtureManifest);\n\n  if (missingFixtures.length > 0) {\n    throw new Error(`Missing ${missingFixtures.length} fixture file(s).`);\n  }\n};\n\nawait run();\n"
  },
  {
    "path": "packages/fixtures/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/otelemetry/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/otelemetry\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"bin\": {\n    \"keeper-otelemetry\": \"src/index.ts\"\n  },\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@opentelemetry/api-logs\": \"^0.213.0\",\n    \"@opentelemetry/exporter-logs-otlp-http\": \"^0.213.0\",\n    \"@opentelemetry/resources\": \"^2.6.0\",\n    \"@opentelemetry/sdk-logs\": \"^0.213.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/otelemetry/src/index.ts",
    "content": "#!/usr/bin/env bun\n\nimport { createInterface } from \"node:readline\";\nimport { SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { BatchLogRecordProcessor, LoggerProvider } from \"@opentelemetry/sdk-logs\";\nimport { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport {\n  detectResources,\n  envDetector,\n  hostDetector,\n  osDetector,\n  processDetector,\n  resourceFromAttributes,\n} from \"@opentelemetry/resources\";\n\nconst PINO_SEVERITY: Record<number, SeverityNumber> = {\n  10: SeverityNumber.TRACE,\n  20: SeverityNumber.DEBUG,\n  30: SeverityNumber.INFO,\n  40: SeverityNumber.WARN,\n  50: SeverityNumber.ERROR,\n  60: SeverityNumber.FATAL,\n};\n\nconst PINO_SEVERITY_TEXT: Record<number, string> = {\n  10: \"TRACE\",\n  20: \"DEBUG\",\n  30: \"INFO\",\n  40: \"WARN\",\n  50: \"ERROR\",\n  60: \"FATAL\",\n};\n\nconst parseLogLine = (line: string) => {\n  const { msg: message, level, time, service, ...attributes } = JSON.parse(line);\n  return { message, level, time, service, attributes };\n};\n\nconst forwardToCollector = (\n  logger: ReturnType<LoggerProvider[\"getLogger\"]>,\n  line: string,\n  { message, level, time, attributes }: ReturnType<typeof parseLogLine>,\n) => {\n  logger.emit({\n    body: message ?? line,\n    severityNumber: PINO_SEVERITY[level] ?? SeverityNumber.INFO,\n    severityText: PINO_SEVERITY_TEXT[level] ?? \"INFO\",\n    ...(time && { timestamp: new Date(time) }),\n    attributes,\n  });\n};\n\nif (process.env.OTEL_EXPORTER_OTLP_ENDPOINT) {\n  const lineReader = createInterface({ input: process.stdin });\n  const lineIterator = lineReader[Symbol.asyncIterator]();\n\n  const firstResult = await lineIterator.next();\n\n  if (firstResult.done) {\n    process.exit(0);\n  }\n\n  process.stdout.write(`${firstResult.value}\\n`);\n\n  const firstLogEntry = parseLogLine(firstResult.value);\n  const serviceName = firstLogEntry.service ?? \"unknown\";\n\n  const resource = detectResources({\n    detectors: [envDetector, hostDetector, osDetector, processDetector],\n  }).merge(\n    resourceFromAttributes({\n      \"service.name\": serviceName,\n      \"deployment.environment\": process.env.ENV ?? \"production\",\n    }),\n  );\n\n  const provider = new LoggerProvider({\n    resource,\n    processors: [new BatchLogRecordProcessor(new OTLPLogExporter())],\n  });\n\n  const logger = provider.getLogger(serviceName);\n\n  forwardToCollector(logger, firstResult.value, firstLogEntry);\n\n  for await (const line of lineIterator) {\n    process.stdout.write(`${line}\\n`);\n    try {\n      forwardToCollector(logger, line, parseLogLine(line));\n    } catch {\n      // Non-JSON line, pass through only\n    }\n  }\n\n  await provider.shutdown();\n} else {\n  process.stdin.pipe(process.stdout);\n}\n"
  },
  {
    "path": "packages/otelemetry/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/premium/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/premium\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"types\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./constants\": \"./src/constants.ts\"\n  },\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"drizzle-orm\": \"^0.45.1\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/premium/src/constants.ts",
    "content": "const FREE_ACCOUNT_LIMIT = 2;\nconst PRO_ACCOUNT_LIMIT = Infinity;\n\nconst FREE_MAPPING_LIMIT = 3;\nconst PRO_MAPPING_LIMIT = Infinity;\n\nexport { FREE_ACCOUNT_LIMIT, PRO_ACCOUNT_LIMIT, FREE_MAPPING_LIMIT, PRO_MAPPING_LIMIT };\n"
  },
  {
    "path": "packages/premium/src/index.ts",
    "content": "export * from \"./constants\";\nexport * from \"./subscription\";\n"
  },
  {
    "path": "packages/premium/src/subscription.ts",
    "content": "import { userSubscriptionsTable } from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport {\n  FREE_ACCOUNT_LIMIT,\n  FREE_MAPPING_LIMIT,\n  PRO_ACCOUNT_LIMIT,\n  PRO_MAPPING_LIMIT,\n} from \"./constants\";\nimport { planSchema } from \"@keeper.sh/data-schemas\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\n\nconst FIRST_RESULT_LIMIT = 1;\n\ninterface PremiumConfig {\n  database: BunSQLDatabase;\n  commercialMode: boolean;\n}\n\ninterface UserSubscription {\n  plan: Plan;\n}\n\ninterface PremiumService {\n  getUserPlan: (userId: string) => Promise<Plan>;\n  getUserSubscription: (userId: string) => Promise<UserSubscription>;\n  getAccountLimit: (plan: Plan) => number;\n  getMappingLimit: (plan: Plan) => number;\n  canAddAccount: (userId: string, currentCount: number) => Promise<boolean>;\n  canAddMapping: (userId: string, currentCount: number) => Promise<boolean>;\n  canUseEventFilters: (userId: string) => Promise<boolean>;\n  canCustomizeIcalFeed: (userId: string) => Promise<boolean>;\n}\n\nconst createPremiumService = (config: PremiumConfig): PremiumService => {\n  const { database, commercialMode } = config;\n\n  const fetchUserSubscription = async (userId: string): Promise<UserSubscription> => {\n    const [subscription] = await database\n      .select({\n        plan: userSubscriptionsTable.plan,\n      })\n      .from(userSubscriptionsTable)\n      .where(eq(userSubscriptionsTable.userId, userId))\n      .limit(FIRST_RESULT_LIMIT);\n\n    return {\n      plan: planSchema.assert(subscription?.plan ?? \"free\"),\n    };\n  };\n\n  const getUserSubscription = (userId: string): Promise<UserSubscription> => {\n    if (!commercialMode) {\n      return Promise.resolve({ plan: \"pro\" });\n    }\n    return fetchUserSubscription(userId);\n  };\n\n  const getUserPlan = async (userId: string): Promise<Plan> => {\n    const subscription = await getUserSubscription(userId);\n    return subscription.plan;\n  };\n\n  const getAccountLimit = (plan: Plan): number => {\n    if (plan === \"pro\") {\n      return PRO_ACCOUNT_LIMIT;\n    }\n    return FREE_ACCOUNT_LIMIT;\n  };\n\n  const getMappingLimit = (plan: Plan): number => {\n    if (plan === \"pro\") {\n      return PRO_MAPPING_LIMIT;\n    }\n    return FREE_MAPPING_LIMIT;\n  };\n\n  const canAddAccount = async (userId: string, currentCount: number): Promise<boolean> => {\n    const subscription = await getUserSubscription(userId);\n    const limit = getAccountLimit(subscription.plan);\n    return currentCount < limit;\n  };\n\n  const canAddMapping = async (userId: string, currentCount: number): Promise<boolean> => {\n    const subscription = await getUserSubscription(userId);\n    const limit = getMappingLimit(subscription.plan);\n    return currentCount < limit;\n  };\n\n  const canUseEventFilters = async (userId: string): Promise<boolean> => {\n    const subscription = await getUserSubscription(userId);\n    return subscription.plan === \"pro\";\n  };\n\n  const canCustomizeIcalFeed = async (userId: string): Promise<boolean> => {\n    const subscription = await getUserSubscription(userId);\n    return subscription.plan === \"pro\";\n  };\n\n  return {\n    canAddAccount,\n    canAddMapping,\n    canCustomizeIcalFeed,\n    canUseEventFilters,\n    getAccountLimit,\n    getMappingLimit,\n    getUserPlan,\n    getUserSubscription,\n  };\n};\n\nexport { createPremiumService };\nexport type { PremiumConfig, PremiumService };\n"
  },
  {
    "path": "packages/premium/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/queue/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/queue\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"bullmq\": \"^5.44.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/queue/src/index.ts",
    "content": "import { Queue } from \"bullmq\";\nimport type { ConnectionOptions } from \"bullmq\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\n\nconst PUSH_SYNC_QUEUE_NAME = \"push-sync\";\nconst USER_TIMEOUT_MS = 300_000;\n\ninterface PushSyncJobPayload {\n  userId: string;\n  plan: Plan;\n  correlationId: string;\n}\n\ninterface PushSyncJobResult {\n  added: number;\n  addFailed: number;\n  removed: number;\n  removeFailed: number;\n  errors: string[];\n}\n\nconst createPushSyncQueue = (connection: ConnectionOptions): Queue<PushSyncJobPayload, PushSyncJobResult> =>\n  new Queue(PUSH_SYNC_QUEUE_NAME, {\n    connection,\n    defaultJobOptions: {\n      attempts: 1,\n    },\n  });\n\nexport { PUSH_SYNC_QUEUE_NAME, USER_TIMEOUT_MS, createPushSyncQueue };\nexport type { PushSyncJobPayload, PushSyncJobResult };\n"
  },
  {
    "path": "packages/queue/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/sync/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/sync\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"types\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\",\n    \"test\": \"bun x --bun vitest run\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/calendar\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"drizzle-orm\": \"^0.45.1\",\n    \"ioredis\": \"^5.6.1\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "packages/sync/src/destination-errors.ts",
    "content": "/**\n * Patterns that indicate a destination calendar is fundamentally\n * broken and should be backed off with exponential delay.\n *\n * Add new patterns here as they are observed in production logs.\n */\nconst BACKOFF_ERROR_PATTERNS: string[] = [\n  \"Invalid credentials\",\n  \"404 Not Found\",\n  \"cannot find homeUrl\",\n];\n\nconst getErrorMessage = (error: unknown): string => {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return String(error);\n};\n\nconst isBackoffEligibleError = (error: unknown): boolean => {\n  const message = getErrorMessage(error);\n\n  for (const pattern of BACKOFF_ERROR_PATTERNS) {\n    if (message.includes(pattern)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nexport { getErrorMessage, isBackoffEligibleError, BACKOFF_ERROR_PATTERNS };\n"
  },
  {
    "path": "packages/sync/src/index.ts",
    "content": "export { syncDestinationsForUser } from \"./sync-user\";\nexport { invalidateCalendar, isCalendarInvalidated } from \"./sync-lock\";\nexport type { InvalidationRedis } from \"./sync-lock\";\nexport type { SyncConfig, SyncDestinationsResult } from \"./sync-user\";\nexport type { OAuthConfig } from \"./resolve-provider\";\n"
  },
  {
    "path": "packages/sync/src/resolve-provider.ts",
    "content": "import type { CalendarSyncProvider, RefreshLockStore } from \"@keeper.sh/calendar\";\nimport type { RedisRateLimiter } from \"@keeper.sh/calendar\";\nimport {\n  createGoogleTokenRefresher,\n  createMicrosoftTokenRefresher,\n  createCoordinatedRefresher,\n} from \"@keeper.sh/calendar\";\nimport { createGoogleSyncProvider } from \"@keeper.sh/calendar/google\";\nimport { createOutlookSyncProvider } from \"@keeper.sh/calendar/outlook\";\nimport { createCalDAVSyncProvider } from \"@keeper.sh/calendar/caldav\";\nimport { resolveAuthMethod } from \"@keeper.sh/calendar/digest-fetch\";\nimport { decryptPassword } from \"@keeper.sh/database\";\nimport {\n  calendarAccountsTable,\n  calendarsTable,\n  caldavCredentialsTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\nconst OAUTH_PROVIDERS = new Set([\"google\", \"outlook\"]);\nconst CALDAV_PROVIDERS = new Set([\"caldav\", \"fastmail\", \"icloud\"]);\n\ninterface OAuthConfig {\n  googleClientId?: string;\n  googleClientSecret?: string;\n  microsoftClientId?: string;\n  microsoftClientSecret?: string;\n}\n\nconst resolveOAuthProvider = async (\n  database: BunSQLDatabase,\n  provider: string,\n  calendarId: string,\n  userId: string,\n  accountId: string,\n  oauthConfig: OAuthConfig,\n  refreshLockStore: RefreshLockStore | null,\n  rateLimiter?: RedisRateLimiter,\n  signal?: AbortSignal,\n): Promise<CalendarSyncProvider | null> => {\n  const [oauthCred] = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      refreshToken: oauthCredentialsTable.refreshToken,\n      expiresAt: oauthCredentialsTable.expiresAt,\n      externalCalendarId: calendarsTable.externalCalendarId,\n      oauthCredentialId: oauthCredentialsTable.id,\n    })\n    .from(oauthCredentialsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id))\n    .innerJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(eq(calendarsTable.id, calendarId))\n    .limit(1);\n\n  if (!oauthCred) {\n    return null;\n  }\n\n  if (provider === \"google\" && oauthConfig.googleClientId && oauthConfig.googleClientSecret) {\n    if (!oauthCred.externalCalendarId) {\n      return null;\n    }\n    const refreshGoogleToken = createGoogleTokenRefresher({\n      clientId: oauthConfig.googleClientId,\n      clientSecret: oauthConfig.googleClientSecret,\n    });\n    return createGoogleSyncProvider({\n      accessToken: oauthCred.accessToken,\n      refreshToken: oauthCred.refreshToken,\n      accessTokenExpiresAt: oauthCred.expiresAt,\n      externalCalendarId: oauthCred.externalCalendarId,\n      calendarId,\n      userId,\n      refreshAccessToken: createCoordinatedRefresher({\n        database,\n        oauthCredentialId: oauthCred.oauthCredentialId,\n        calendarAccountId: accountId,\n        refreshLockStore,\n        rawRefresh: (refreshToken) => refreshGoogleToken(refreshToken),\n      }),\n      rateLimiter,\n      signal,\n    });\n  }\n\n  if (provider === \"outlook\" && oauthConfig.microsoftClientId && oauthConfig.microsoftClientSecret) {\n    if (!oauthCred.externalCalendarId) {\n      return null;\n    }\n    const refreshMicrosoftToken = createMicrosoftTokenRefresher({\n      clientId: oauthConfig.microsoftClientId,\n      clientSecret: oauthConfig.microsoftClientSecret,\n    });\n    return createOutlookSyncProvider({\n      accessToken: oauthCred.accessToken,\n      refreshToken: oauthCred.refreshToken,\n      accessTokenExpiresAt: oauthCred.expiresAt,\n      externalCalendarId: oauthCred.externalCalendarId,\n      calendarId,\n      userId,\n      refreshAccessToken: createCoordinatedRefresher({\n        database,\n        oauthCredentialId: oauthCred.oauthCredentialId,\n        calendarAccountId: accountId,\n        refreshLockStore,\n        rawRefresh: (refreshToken) => refreshMicrosoftToken(refreshToken),\n      }),\n    });\n  }\n\n  return null;\n};\n\nconst resolveCalDAVProvider = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n  encryptionKey: string,\n): Promise<CalendarSyncProvider | null> => {\n  const [caldavCred] = await database\n    .select({\n      authMethod: caldavCredentialsTable.authMethod,\n      username: caldavCredentialsTable.username,\n      encryptedPassword: caldavCredentialsTable.encryptedPassword,\n      serverUrl: caldavCredentialsTable.serverUrl,\n      calendarUrl: calendarsTable.calendarUrl,\n    })\n    .from(caldavCredentialsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id))\n    .innerJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(eq(calendarsTable.id, calendarId))\n    .limit(1);\n\n  if (!caldavCred) {\n    return null;\n  }\n\n  const password = decryptPassword(caldavCred.encryptedPassword, encryptionKey);\n\n  return createCalDAVSyncProvider({\n    authMethod: resolveAuthMethod(caldavCred.authMethod),\n    calendarUrl: caldavCred.calendarUrl ?? caldavCred.serverUrl,\n    serverUrl: caldavCred.serverUrl,\n    username: caldavCred.username,\n    password,\n  });\n};\n\ninterface ResolveProviderOptions {\n  database: BunSQLDatabase;\n  provider: string;\n  calendarId: string;\n  userId: string;\n  accountId: string;\n  oauthConfig: OAuthConfig;\n  encryptionKey?: string;\n  refreshLockStore?: RefreshLockStore | null;\n  rateLimiter?: RedisRateLimiter;\n  signal?: AbortSignal;\n}\n\nconst resolveSyncProvider = (options: ResolveProviderOptions): Promise<CalendarSyncProvider | null> => {\n  if (OAUTH_PROVIDERS.has(options.provider)) {\n    return resolveOAuthProvider(\n      options.database,\n      options.provider,\n      options.calendarId,\n      options.userId,\n      options.accountId,\n      options.oauthConfig,\n      options.refreshLockStore ?? null,\n      options.rateLimiter,\n      options.signal,\n    );\n  }\n\n  if (CALDAV_PROVIDERS.has(options.provider) && options.encryptionKey) {\n    return resolveCalDAVProvider(\n      options.database,\n      options.calendarId,\n      options.encryptionKey,\n    );\n  }\n\n  return Promise.resolve(null);\n};\n\nexport { resolveSyncProvider };\nexport type { OAuthConfig };\n"
  },
  {
    "path": "packages/sync/src/sync-lock.ts",
    "content": "const LOCK_PREFIX = \"sync:lock:\";\nconst SIGNAL_PREFIX = \"sync:signal:\";\nconst INVALIDATION_PREFIX = \"sync:invalidated:\";\nconst LOCK_TTL_SECONDS = 120;\nconst INVALIDATION_TTL_SECONDS = 300;\nconst POLL_INTERVAL_MS = 250;\nconst POLL_TIMEOUT_MS = (LOCK_TTL_SECONDS * 1000) + 10_000;\n\ninterface SyncLockRedis {\n  get: (key: string) => Promise<string | null>;\n  eval: (script: string, keyCount: number, ...args: string[]) => Promise<unknown>;\n}\n\ninterface InvalidationRedis {\n  set: (...args: [string, string, string, number]) => Promise<unknown>;\n}\n\ninterface SyncLockHandle {\n  isCurrent: () => Promise<boolean>;\n  release: () => Promise<void>;\n}\n\ninterface AcquireSyncLockResult {\n  acquired: true;\n  handle: SyncLockHandle;\n}\n\ninterface SyncLockSkippedResult {\n  acquired: false;\n}\n\n/**\n * Lua script to atomically acquire or signal the sync lock.\n *\n * KEYS[1] = lock key\n * KEYS[2] = signal key\n * ARGV[1] = holder ID\n * ARGV[2] = lock TTL in seconds\n *\n * Returns:\n *   \"acquired\"  — lock was free, caller now holds it\n *   \"queued\"    — lock was held, caller is now the pending waiter\n *   \"replaced\"  — lock was held and there was already a waiter; old waiter replaced\n */\nconst ACQUIRE_OR_SIGNAL_SCRIPT = `\n  local lock = redis.call('GET', KEYS[1])\n  if not lock then\n    redis.call('SET', KEYS[1], ARGV[1], 'EX', ARGV[2])\n    redis.call('DEL', KEYS[2])\n    return 'acquired'\n  end\n\n  local existing = redis.call('GET', KEYS[2])\n  redis.call('SET', KEYS[2], ARGV[1], 'EX', ARGV[2])\n\n  if existing then\n    return 'replaced'\n  end\n  return 'queued'\n`;\n\n/**\n * Lua script to release the lock only if we still hold it.\n *\n * KEYS[1] = lock key\n * ARGV[1] = holder ID\n */\nconst RELEASE_SCRIPT = `\n  local holder = redis.call('GET', KEYS[1])\n  if holder == ARGV[1] then\n    redis.call('DEL', KEYS[1])\n    return 1\n  end\n  return 0\n`;\n\nconst createLockHandle = (\n  redis: SyncLockRedis,\n  lockKey: string,\n  signalKey: string,\n  invalidationKey: string,\n  holderId: string,\n): SyncLockHandle => {\n  const isCurrent = async (): Promise<boolean> => {\n    const [pendingWaiter, invalidated] = await Promise.all([\n      redis.get(signalKey),\n      redis.get(invalidationKey),\n    ]);\n\n    if (invalidated !== null) {\n      return false;\n    }\n\n    return pendingWaiter === null;\n  };\n\n  const release = async (): Promise<void> => {\n    await redis.eval(RELEASE_SCRIPT, 1, lockKey, holderId);\n  };\n\n  return { isCurrent, release };\n};\n\nconst createSyncLock = (redis: SyncLockRedis) => {\n  const acquire = async (\n    calendarId: string,\n    abortSignal?: AbortSignal,\n  ): Promise<AcquireSyncLockResult | SyncLockSkippedResult> => {\n    const lockKey = `${LOCK_PREFIX}${calendarId}`;\n    const signalKey = `${SIGNAL_PREFIX}${calendarId}`;\n    const invalidationKey = `${INVALIDATION_PREFIX}${calendarId}`;\n    const holderId = crypto.randomUUID();\n\n    const result = await redis.eval(\n      ACQUIRE_OR_SIGNAL_SCRIPT,\n      2,\n      lockKey,\n      signalKey,\n      holderId,\n      String(LOCK_TTL_SECONDS),\n    );\n\n    if (result === \"acquired\") {\n      const handle = createLockHandle(redis, lockKey, signalKey, invalidationKey, holderId);\n      return { acquired: true, handle };\n    }\n\n    const pollDeadline = Date.now() + POLL_TIMEOUT_MS;\n\n    while (Date.now() < pollDeadline) {\n      if (abortSignal?.aborted) {\n        return { acquired: false };\n      }\n\n      const currentWaiter = await redis.get(signalKey);\n      if (currentWaiter !== holderId) {\n        return { acquired: false };\n      }\n\n      const lockHolder = await redis.get(lockKey);\n      if (!lockHolder) {\n        const retryResult = await redis.eval(\n          ACQUIRE_OR_SIGNAL_SCRIPT,\n          2,\n          lockKey,\n          signalKey,\n          holderId,\n          String(LOCK_TTL_SECONDS),\n        );\n\n        if (retryResult === \"acquired\") {\n          const handle = createLockHandle(redis, lockKey, signalKey, invalidationKey, holderId);\n          return { acquired: true, handle };\n        }\n      }\n\n      await Bun.sleep(POLL_INTERVAL_MS);\n    }\n\n    return { acquired: false };\n  };\n\n  return { acquire };\n};\n\nconst invalidateCalendar = async (redis: InvalidationRedis, calendarId: string): Promise<void> => {\n  const key = `${INVALIDATION_PREFIX}${calendarId}`;\n  await redis.set(key, \"1\", \"EX\", INVALIDATION_TTL_SECONDS);\n};\n\nconst isCalendarInvalidated = async (redis: SyncLockRedis, calendarId: string): Promise<boolean> => {\n  const key = `${INVALIDATION_PREFIX}${calendarId}`;\n  const value = await redis.get(key);\n  return value !== null;\n};\n\nexport { createSyncLock, invalidateCalendar, isCalendarInvalidated, LOCK_PREFIX, SIGNAL_PREFIX, INVALIDATION_PREFIX, LOCK_TTL_SECONDS, INVALIDATION_TTL_SECONDS, POLL_INTERVAL_MS };\nexport type { SyncLockHandle, SyncLockRedis, InvalidationRedis, AcquireSyncLockResult, SyncLockSkippedResult };\n"
  },
  {
    "path": "packages/sync/src/sync-user.ts",
    "content": "import {\n  syncCalendar,\n  getEventsForDestination,\n  getEventMappingsForDestination,\n  createDatabaseFlush,\n  createRedisRateLimiter,\n} from \"@keeper.sh/calendar\";\nimport type { SyncProgressUpdate, RefreshLockStore } from \"@keeper.sh/calendar\";\nimport {\n  calendarAccountsTable,\n  calendarsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type Redis from \"ioredis\";\nimport { getErrorMessage, isBackoffEligibleError } from \"./destination-errors\";\nimport { resolveSyncProvider } from \"./resolve-provider\";\nimport type { OAuthConfig } from \"./resolve-provider\";\nimport { createSyncLock, isCalendarInvalidated } from \"./sync-lock\";\n\nconst GOOGLE_REQUESTS_PER_MINUTE = 500;\n\nconst resetDestinationBackoff = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n): Promise<void> => {\n  await database\n    .update(calendarsTable)\n    .set({ failureCount: 0, lastFailureAt: null, nextAttemptAt: null })\n    .where(eq(calendarsTable.id, calendarId));\n};\n\nconst applyDestinationBackoff = async (\n  database: BunSQLDatabase,\n  calendarId: string,\n  currentFailureCount: number,\n): Promise<void> => {\n  await database\n    .update(calendarsTable)\n    .set({\n      failureCount: currentFailureCount + 1,\n      lastFailureAt: new Date(),\n    })\n    .where(eq(calendarsTable.id, calendarId));\n};\n\nconst extractNumericField = (event: Record<string, unknown> | undefined, key: string): number => {\n  if (!event) {\n    return 0;\n  }\n  const value = event[key];\n  if (typeof value === \"number\") {\n    return value;\n  }\n  return 0;\n};\n\ninterface SyncConfig {\n  database: BunSQLDatabase;\n  redis: Redis;\n  encryptionKey?: string;\n  oauthConfig: OAuthConfig;\n  refreshLockStore?: RefreshLockStore | null;\n  deadlineMs?: number;\n  abortSignal?: AbortSignal;\n}\n\ninterface SyncDestinationsResult {\n  added: number;\n  addFailed: number;\n  removed: number;\n  removeFailed: number;\n  errors: string[];\n  syncEvents: Record<string, unknown>[];\n}\n\nconst EMPTY_RESULT: SyncDestinationsResult = {\n  added: 0,\n  addFailed: 0,\n  removed: 0,\n  removeFailed: 0,\n  errors: [],\n  syncEvents: [],\n};\n\ninterface CalendarSyncCompletion {\n  provider: string;\n  accountId: string;\n  calendarId: string;\n  userId: string;\n  added: number;\n  addFailed: number;\n  removed: number;\n  removeFailed: number;\n  conflictsResolved: number;\n  errors: string[];\n  durationMs: number;\n}\n\ninterface SyncCallbacks {\n  onSyncEvent?: (event: Record<string, unknown>) => void;\n  onProgress?: (update: SyncProgressUpdate) => void;\n  onCalendarComplete?: (completion: CalendarSyncCompletion) => void;\n}\n\nconst syncDestinationsForUser = async (\n  userId: string,\n  config: SyncConfig,\n  callbacks?: SyncCallbacks,\n): Promise<SyncDestinationsResult> => {\n  const { database, redis } = config;\n\n  const destinations = await database\n    .select({\n      calendarId: calendarsTable.id,\n      provider: calendarAccountsTable.provider,\n      userId: calendarsTable.userId,\n      accountId: calendarsTable.accountId,\n      failureCount: calendarsTable.failureCount,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.disabled, false),\n        arrayContains(calendarsTable.capabilities, [\"push\"]),\n        eq(calendarAccountsTable.needsReauthentication, false),\n      ),\n    );\n\n  if (destinations.length === 0) {\n    return EMPTY_RESULT;\n  }\n\n  const flush = createDatabaseFlush(database);\n  const syncLock = createSyncLock(redis);\n\n  let added = 0;\n  let addFailed = 0;\n  let removed = 0;\n  let removeFailed = 0;\n  const errors: string[] = [];\n  const syncEvents: Record<string, unknown>[] = [];\n\n  const rateLimiter = createRedisRateLimiter(\n    redis,\n    `ratelimit:${userId}:google`,\n    { requestsPerMinute: GOOGLE_REQUESTS_PER_MINUTE },\n  );\n\n  for (const destination of destinations) {\n    if (config.abortSignal?.aborted) {\n      break;\n    }\n\n    const lockResult = await syncLock.acquire(destination.calendarId);\n    if (!lockResult.acquired) {\n      continue;\n    }\n\n    const { handle } = lockResult;\n\n    try {\n      const syncProvider = await resolveSyncProvider({\n        database,\n        provider: destination.provider,\n        calendarId: destination.calendarId,\n        userId: destination.userId,\n        accountId: destination.accountId,\n        oauthConfig: config.oauthConfig,\n        encryptionKey: config.encryptionKey,\n        refreshLockStore: config.refreshLockStore,\n        rateLimiter,\n        signal: config.abortSignal,\n      });\n\n      if (!syncProvider) {\n        continue;\n      }\n\n      const providerRef = syncProvider;\n\n      const result = await syncCalendar({\n        userId: destination.userId,\n        calendarId: destination.calendarId,\n        provider: providerRef,\n        readState: async () => ({\n          localEvents: await getEventsForDestination(database, destination.calendarId),\n          existingMappings: await getEventMappingsForDestination(database, destination.calendarId),\n          remoteEvents: await providerRef.listRemoteEvents(),\n        }),\n        isCurrent: () => {\n          if (config.abortSignal?.aborted) {\n            return Promise.resolve(false);\n          }\n          if (config.deadlineMs && Date.now() >= config.deadlineMs) {\n            return Promise.resolve(false);\n          }\n          return handle.isCurrent();\n        },\n        isInvalidated: () => isCalendarInvalidated(redis, destination.calendarId),\n        flush,\n        onProgress: callbacks?.onProgress,\n        onSyncEvent: (event) => {\n          const enrichedEvent = {\n            ...event,\n            \"destination.provider\": destination.provider,\n            \"user.id\": destination.userId,\n          };\n          syncEvents.push(enrichedEvent);\n          if (callbacks?.onSyncEvent) {\n            callbacks.onSyncEvent(enrichedEvent);\n          }\n        },\n      });\n\n      const invalidated = await isCalendarInvalidated(redis, destination.calendarId);\n      if (invalidated) {\n        continue;\n      }\n\n      if (destination.failureCount > 0) {\n        await resetDestinationBackoff(database, destination.calendarId);\n      }\n\n      added += result.added;\n      addFailed += result.addFailed;\n      removed += result.removed;\n      removeFailed += result.removeFailed;\n      errors.push(...result.errors);\n\n      if (callbacks?.onCalendarComplete) {\n        const syncEvent = syncEvents.at(-1);\n        const durationMs = extractNumericField(syncEvent, \"duration_ms\");\n\n        callbacks.onCalendarComplete({\n          provider: destination.provider,\n          accountId: destination.accountId,\n          calendarId: destination.calendarId,\n          userId: destination.userId,\n          added: result.added,\n          addFailed: result.addFailed,\n          removed: result.removed,\n          removeFailed: result.removeFailed,\n          conflictsResolved: result.conflictsResolved,\n          errors: result.errors,\n          durationMs,\n        });\n      }\n    } catch (error) {\n      if (!isBackoffEligibleError(error)) {\n        throw error;\n      }\n\n      await applyDestinationBackoff(database, destination.calendarId, destination.failureCount);\n      errors.push(getErrorMessage(error));\n    } finally {\n      await handle.release();\n    }\n  }\n\n  return { added, addFailed, removed, removeFailed, errors, syncEvents };\n};\n\nexport { syncDestinationsForUser };\nexport type { CalendarSyncCompletion, SyncConfig, SyncDestinationsResult };\n"
  },
  {
    "path": "packages/sync/tests/destination-errors.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { isBackoffEligibleError } from \"../src/destination-errors\";\n\ndescribe(\"isBackoffEligibleError\", () => {\n  it(\"matches invalid credentials\", () => {\n    expect(isBackoffEligibleError(new Error(\"Invalid credentials\"))).toBe(true);\n  });\n\n  it(\"matches 404 not found from collection query\", () => {\n    const message = \"Collection query failed: 404 Not Found. Raw response: The requested resource could not be found.\";\n    expect(isBackoffEligibleError(new Error(message))).toBe(true);\n  });\n\n  it(\"matches cannot find homeUrl\", () => {\n    expect(isBackoffEligibleError(new Error(\"cannot find homeUrl\"))).toBe(true);\n  });\n\n  it(\"does not match transient 500 errors\", () => {\n    const message = \"Collection query failed: 500 Internal Server Error. Raw response: <html>500</html>\";\n    expect(isBackoffEligibleError(new Error(message))).toBe(false);\n  });\n\n  it(\"does not match JSON parse errors\", () => {\n    expect(isBackoffEligibleError(new SyntaxError(\"Failed to parse JSON\"))).toBe(false);\n  });\n\n  it(\"does not match unknown errors\", () => {\n    expect(isBackoffEligibleError(new Error(\"something unexpected\"))).toBe(false);\n  });\n\n  it(\"handles non-Error values\", () => {\n    expect(isBackoffEligibleError(\"Invalid credentials\")).toBe(true);\n    expect(isBackoffEligibleError(\"random string\")).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/sync/tests/sync-lock.test.ts",
    "content": "import { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { createSyncLock, LOCK_PREFIX, SIGNAL_PREFIX, POLL_INTERVAL_MS } from \"../src/sync-lock\";\n\nconst createMockRedis = () => {\n  const store = new Map<string, { value: string; expiresAt: number | null }>();\n\n  const isExpired = (key: string): boolean => {\n    const entry = store.get(key);\n    if (!entry) {\n      return true;\n    }\n    if (entry.expiresAt !== null && Date.now() >= entry.expiresAt) {\n      store.delete(key);\n      return true;\n    }\n    return false;\n  };\n\n  const get = (key: string): Promise<string | null> => {\n    if (isExpired(key)) {\n      return Promise.resolve(null);\n    }\n    return Promise.resolve(store.get(key)?.value ?? null);\n  };\n\n  const set = (\n    key: string,\n    value: string,\n    _exMode?: string,\n    exValue?: number,\n  ): void => {\n    let expiresAt: number | null = null;\n    if (exValue) {\n      expiresAt = Date.now() + exValue * 1000;\n    }\n    store.set(key, { value, expiresAt });\n  };\n\n  const del = (key: string): void => {\n    store.delete(key);\n  };\n\n  const readValue = (key: string): string | null => {\n    if (isExpired(key)) {\n      return null;\n    }\n    return store.get(key)?.value ?? null;\n  };\n\n  const evalImpl = (\n    script: string,\n    _keyCount: number,\n    ...args: string[]\n  ): Promise<unknown> => {\n    const lockKey = args[0] ?? \"\";\n\n    // ACQUIRE_OR_SIGNAL_SCRIPT (has two keys)\n    if (script.includes(\"KEYS[2]\") && script.includes(\"return 'acquired'\")) {\n      const signalKey = args[1] ?? \"\";\n      const holderId = args[2] ?? \"\";\n      const ttlSeconds = Number(args[3]);\n\n      const lockValue = readValue(lockKey);\n      if (lockValue === null) {\n        set(lockKey, holderId, \"EX\", ttlSeconds);\n        del(signalKey);\n        return Promise.resolve(\"acquired\");\n      }\n\n      const existing = readValue(signalKey);\n      set(signalKey, holderId, \"EX\", ttlSeconds);\n\n      if (existing !== null) {\n        return Promise.resolve(\"replaced\");\n      }\n      return Promise.resolve(\"queued\");\n    }\n\n    // RELEASE_SCRIPT (has one key)\n    const holderId = args[1] ?? \"\";\n    const holder = readValue(lockKey);\n    if (holder === holderId) {\n      del(lockKey);\n      return Promise.resolve(1);\n    }\n    return Promise.resolve(0);\n  };\n\n  return { get, set, del, eval: evalImpl };\n};\n\nconst flushAsync = async (): Promise<void> => {\n  for (let tick = 0; tick < 10; tick++) {\n    await Promise.resolve();\n  }\n};\n\ndescribe(\"createSyncLock\", () => {\n  const makeSyncLock = () => {\n    const redis = createMockRedis();\n    const syncLock = createSyncLock(redis);\n    return { redis, syncLock };\n  };\n\n  beforeEach(() => {\n    vi.useFakeTimers();\n  });\n\n  afterEach(() => {\n    vi.useRealTimers();\n  });\n\n  it(\"acquires the lock immediately when no one holds it\", async () => {\n    const { syncLock } = makeSyncLock();\n\n    const result = await syncLock.acquire(\"cal-1\");\n\n    expect(result.acquired).toBe(true);\n  });\n\n  it(\"sets the lock key in Redis when acquired\", async () => {\n    const { redis, syncLock } = makeSyncLock();\n\n    await syncLock.acquire(\"cal-1\");\n\n    const lockValue = await redis.get(`${LOCK_PREFIX}cal-1`);\n    expect(lockValue).not.toBeNull();\n  });\n\n  it(\"clears any stale signal key when acquiring a free lock\", async () => {\n    const { redis, syncLock } = makeSyncLock();\n\n    redis.set(`${SIGNAL_PREFIX}cal-1`, \"old-waiter\");\n\n    await syncLock.acquire(\"cal-1\");\n\n    const signalValue = await redis.get(`${SIGNAL_PREFIX}cal-1`);\n    expect(signalValue).toBeNull();\n  });\n\n  describe(\"isCurrent\", () => {\n    it(\"returns true when no one is waiting\", async () => {\n      const { syncLock } = makeSyncLock();\n      const result = await syncLock.acquire(\"cal-1\");\n\n      if (!result.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      const current = await result.handle.isCurrent();\n      expect(current).toBe(true);\n    });\n\n    it(\"returns false when a waiter signals\", async () => {\n      const { redis, syncLock } = makeSyncLock();\n      const firstResult = await syncLock.acquire(\"cal-1\");\n\n      if (!firstResult.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      // Simulate a second caller setting the signal key\n      redis.set(`${SIGNAL_PREFIX}cal-1`, \"waiter-id\");\n\n      const current = await firstResult.handle.isCurrent();\n      expect(current).toBe(false);\n    });\n  });\n\n  describe(\"release\", () => {\n    it(\"removes the lock key from Redis\", async () => {\n      const { redis, syncLock } = makeSyncLock();\n      const result = await syncLock.acquire(\"cal-1\");\n\n      if (!result.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      await result.handle.release();\n\n      const lockValue = await redis.get(`${LOCK_PREFIX}cal-1`);\n      expect(lockValue).toBeNull();\n    });\n\n    it(\"does not remove the lock if another holder took over\", async () => {\n      const { redis, syncLock } = makeSyncLock();\n      const result = await syncLock.acquire(\"cal-1\");\n\n      if (!result.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      // Simulate another holder taking over\n      redis.set(`${LOCK_PREFIX}cal-1`, \"different-holder\");\n\n      await result.handle.release();\n\n      const lockValue = await redis.get(`${LOCK_PREFIX}cal-1`);\n      expect(lockValue).toBe(\"different-holder\");\n    });\n  });\n\n  describe(\"waiter behavior\", () => {\n    it(\"second caller sets the signal key and waits then acquires after release\", async () => {\n      const { redis, syncLock } = makeSyncLock();\n\n      const firstResult = await syncLock.acquire(\"cal-1\");\n      if (!firstResult.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      const secondPromise = syncLock.acquire(\"cal-1\");\n      await flushAsync();\n\n      // Signal key should be set\n      const signalValue = await redis.get(`${SIGNAL_PREFIX}cal-1`);\n      expect(signalValue).not.toBeNull();\n\n      // First holder sees it is no longer current\n      const current = await firstResult.handle.isCurrent();\n      expect(current).toBe(false);\n\n      // Release the lock so the waiter can acquire\n      await firstResult.handle.release();\n\n      vi.advanceTimersByTime(POLL_INTERVAL_MS);\n      await flushAsync();\n\n      const secondResult = await secondPromise;\n      expect(secondResult.acquired).toBe(true);\n    });\n\n    it(\"third caller replaces the second waiter\", async () => {\n      const { redis, syncLock } = makeSyncLock();\n\n      const firstResult = await syncLock.acquire(\"cal-1\");\n      if (!firstResult.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      // Start second caller — will wait\n      const secondPromise = syncLock.acquire(\"cal-1\");\n      await flushAsync();\n\n      const secondSignal = await redis.get(`${SIGNAL_PREFIX}cal-1`);\n\n      // Start third caller — should replace second\n      const thirdPromise = syncLock.acquire(\"cal-1\");\n      await flushAsync();\n\n      const thirdSignal = await redis.get(`${SIGNAL_PREFIX}cal-1`);\n      expect(thirdSignal).not.toBe(secondSignal);\n\n      // Advance so second detects replacement on next poll\n      vi.advanceTimersByTime(POLL_INTERVAL_MS);\n      await flushAsync();\n\n      const secondResult = await secondPromise;\n      expect(secondResult.acquired).toBe(false);\n\n      // Release lock so third can acquire\n      await firstResult.handle.release();\n\n      vi.advanceTimersByTime(POLL_INTERVAL_MS);\n      await flushAsync();\n\n      const thirdResult = await thirdPromise;\n      expect(thirdResult.acquired).toBe(true);\n    });\n\n    it(\"waiter returns acquired false when abort signal is triggered\", async () => {\n      const { syncLock } = makeSyncLock();\n\n      const firstResult = await syncLock.acquire(\"cal-1\");\n      if (!firstResult.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      const abortController = new AbortController();\n\n      const secondPromise = syncLock.acquire(\"cal-1\", abortController.signal);\n      await flushAsync();\n\n      abortController.abort();\n\n      vi.advanceTimersByTime(POLL_INTERVAL_MS);\n      await flushAsync();\n\n      const secondResult = await secondPromise;\n      expect(secondResult.acquired).toBe(false);\n\n      await firstResult.handle.release();\n    });\n  });\n\n  describe(\"different calendars\", () => {\n    it(\"locks are independent per calendar\", async () => {\n      const { syncLock } = makeSyncLock();\n\n      const resultA = await syncLock.acquire(\"cal-1\");\n      const resultB = await syncLock.acquire(\"cal-2\");\n\n      expect(resultA.acquired).toBe(true);\n      expect(resultB.acquired).toBe(true);\n    });\n\n    it(\"signaling one calendar does not affect another\", async () => {\n      const { redis, syncLock } = makeSyncLock();\n\n      const resultA = await syncLock.acquire(\"cal-1\");\n      if (!resultA.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      // Signal only cal-1\n      redis.set(`${SIGNAL_PREFIX}cal-1`, \"waiter\");\n\n      // Cal-1 should be superseded\n      expect(await resultA.handle.isCurrent()).toBe(false);\n\n      // Cal-2 should be unaffected\n      const resultB = await syncLock.acquire(\"cal-2\");\n      if (!resultB.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n      expect(await resultB.handle.isCurrent()).toBe(true);\n    });\n  });\n\n  describe(\"full sync lifecycle\", () => {\n    it(\"simulates toggle-toggle-toggle: first finishes, second is replaced, third runs\", async () => {\n      const { syncLock } = makeSyncLock();\n      const executionOrder: string[] = [];\n\n      // Toggle 1: acquires immediately\n      const first = await syncLock.acquire(\"cal-1\");\n      if (!first.acquired) {\n        throw new Error(\"expected acquired\");\n      }\n\n      executionOrder.push(\"first:acquired\");\n\n      // Toggle 2: signals first, waits\n      const secondPromise = syncLock.acquire(\"cal-1\");\n      await flushAsync();\n      executionOrder.push(\"second:waiting\");\n\n      // Toggle 3: replaces second, waits\n      const thirdPromise = syncLock.acquire(\"cal-1\");\n      await flushAsync();\n      executionOrder.push(\"third:waiting\");\n\n      // Advance so second detects replacement\n      vi.advanceTimersByTime(POLL_INTERVAL_MS);\n      await flushAsync();\n\n      const secondResult = await secondPromise;\n      expect(secondResult.acquired).toBe(false);\n      executionOrder.push(\"second:replaced\");\n\n      // First detects supersession, does its work, flushes, releases\n      expect(await first.handle.isCurrent()).toBe(false);\n      executionOrder.push(\"first:superseded\");\n      executionOrder.push(\"first:flushed\");\n      await first.handle.release();\n      executionOrder.push(\"first:released\");\n\n      // Advance so third can acquire\n      vi.advanceTimersByTime(POLL_INTERVAL_MS);\n      await flushAsync();\n\n      const thirdResult = await thirdPromise;\n      expect(thirdResult.acquired).toBe(true);\n      executionOrder.push(\"third:acquired\");\n\n      if (thirdResult.acquired) {\n        // Third runs with fresh state, no one signals it\n        expect(await thirdResult.handle.isCurrent()).toBe(true);\n        executionOrder.push(\"third:completed\");\n        await thirdResult.handle.release();\n        executionOrder.push(\"third:released\");\n      }\n\n      expect(executionOrder).toEqual([\n        \"first:acquired\",\n        \"second:waiting\",\n        \"third:waiting\",\n        \"second:replaced\",\n        \"first:superseded\",\n        \"first:flushed\",\n        \"first:released\",\n        \"third:acquired\",\n        \"third:completed\",\n        \"third:released\",\n      ]);\n    });\n  });\n});\n"
  },
  {
    "path": "packages/sync/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/sync/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/typescript-config/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/typescript-config\",\n  \"exports\": {\n    \".\": \"./tsconfig.json\",\n    \"./tsconfig.json\": \"./tsconfig.json\"\n  },\n  \"devDependencies\": {\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/typescript-config/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noImplicitOverride\": true,\n    \"noEmit\": true,\n    \"module\": \"Preserve\",\n    \"moduleResolution\": \"bundler\",\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"sourceMap\": true,\n    \"target\": \"ESNext\",\n    \"lib\": [\"ESNext\"],\n    \"types\": [\"bun\"],\n    \"jsx\": \"react-jsx\",\n    \"skipLibCheck\": true\n  }\n}\n"
  },
  {
    "path": "scripts/bun-test.ts",
    "content": "console.error(\n  \"\\x1b[31mDon't use `bun test` directly. Run `bun run test` instead.\\x1b[0m\",\n);\n\nprocess.exit(1);\n"
  },
  {
    "path": "services/api/Dockerfile",
    "content": "FROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/api --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd services/api build\n\nFROM base AS runtime\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\nCOPY --from=build /app/services/api/dist ./services/api/dist\nCOPY --from=prune /app/out/full/packages/otelemetry ./packages/otelemetry\nRUN bun link --cwd packages/otelemetry\nCOPY --from=build /app/packages/database/src ./packages/database/src\nCOPY --from=source /app/packages/database/scripts ./packages/database/scripts\nCOPY --from=source /app/packages/database/drizzle ./packages/database/drizzle\nCOPY --from=source /app/services/api/entrypoint.sh ./services/api/entrypoint.sh\nRUN chmod +x ./services/api/entrypoint.sh\n\nENV DEV=production\nEXPOSE 3001\n\nENTRYPOINT [\"./services/api/entrypoint.sh\"]\n"
  },
  {
    "path": "services/api/entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\nbun /app/packages/database/scripts/migrate.ts\n\nexec bun services/api/dist/index.js 2>&1 | keeper-otelemetry\n"
  },
  {
    "path": "services/api/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/api\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"scripts\": {\n    \"dev\": \"bun run --hot src/index.ts\",\n    \"build\": \"bun scripts/build\",\n    \"start\": \"bun run dist/index.js\",\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"bun x --bun vitest run\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/auth\": \"workspace:*\",\n    \"@keeper.sh/broadcast\": \"workspace:*\",\n    \"@keeper.sh/calendar\": \"workspace:*\",\n    \"@keeper.sh/constants\": \"workspace:*\",\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"@keeper.sh/otelemetry\": \"workspace:*\",\n    \"@keeper.sh/premium\": \"workspace:*\",\n    \"@keeper.sh/queue\": \"workspace:*\",\n    \"@polar-sh/sdk\": \"^0.42.1\",\n    \"arkenv\": \"^0.11.0\",\n    \"arktype\": \"^2.2.0\",\n    \"drizzle-orm\": \"0.45.1\",\n    \"entrykit\": \"^0.1.3\",\n    \"ioredis\": \"^5.10.0\",\n    \"resend\": \"^6.9.3\",\n    \"ts-ics\": \"2.4.0\",\n    \"tsdav\": \"^2.1.8\",\n    \"widelogger\": \"^0.7.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "services/api/scripts/build.ts",
    "content": "import { Glob, build } from \"bun\";\n\nconst entrypoints = [\n  ...new Glob(\"src/routes/**/*.ts\")\n    .scanSync()\n    .filter((filePath) => !/\\.(test|spec)\\.ts$/.test(filePath)),\n  ...new Glob(\"src/index.ts\").scanSync(),\n];\n\nawait build({\n  entrypoints,\n  outdir: \"./dist\",\n  root: \"src\",\n  splitting: true,\n  target: \"bun\",\n  external: [\"msgpackr-extract\", \"pino-opentelemetry-transport\"],\n});\n"
  },
  {
    "path": "services/api/src/context.ts",
    "content": "import { Resend } from \"resend\";\nimport env from \"./env\";\nimport { createDatabase } from \"@keeper.sh/database\";\nimport { syncStatusTable } from \"@keeper.sh/database/schema\";\nimport Redis from \"ioredis\";\nimport { createAuth } from \"@keeper.sh/auth\";\nimport { createBroadcastService } from \"@keeper.sh/broadcast\";\nimport { createPremiumService } from \"@keeper.sh/premium\";\nimport {\n  createOAuthProviders,\n  buildOAuthConfigs,\n  createSyncAggregateRuntime,\n} from \"@keeper.sh/calendar\";\nimport type { OAuthStateStore, RefreshLockStore, DestinationSyncResult } from \"@keeper.sh/calendar\";\n\nconst MIN_TRUSTED_ORIGINS_COUNT = 0;\n\nconst database = await createDatabase(env.DATABASE_URL);\nconst redis = new Redis(env.REDIS_URL, {\n  commandTimeout: 10_000,\n  maxRetriesPerRequest: 3,\n});\n\nconst createRedisStateStore = (redisClient: Redis): OAuthStateStore => ({\n  async set(key, value, ttlSeconds) {\n    await redisClient.set(key, value);\n    await redisClient.expire(key, ttlSeconds);\n  },\n  async consume(key) {\n    const value = await redisClient.get(key);\n    if (!value) {\n      return null;\n    }\n    const deleted = await redisClient.del(key);\n    if (!deleted) {\n      return null;\n    }\n    return value;\n  },\n});\n\nconst oauthStateStore = createRedisStateStore(redis);\n\nconst createRedisRefreshLockStore = (redisClient: Redis): RefreshLockStore => ({\n  async tryAcquire(key, ttlSeconds) {\n    const result = await redisClient.set(key, \"1\", \"EX\", ttlSeconds, \"NX\");\n    return result !== null;\n  },\n  async release(key) {\n    await redisClient.del(key);\n  },\n});\nconst refreshLockStore = createRedisRefreshLockStore(redis);\n\nconst parseTrustedOrigins = (origins?: string): string[] => {\n  if (!origins) {\n    return [];\n  }\n  return origins.split(\",\").map((origin): string => origin.trim());\n};\n\nconst trustedOrigins = parseTrustedOrigins(env.TRUSTED_ORIGINS);\n\nconst { auth, capabilities: authCapabilities } = createAuth({\n  database,\n  secret: env.BETTER_AUTH_SECRET,\n  baseUrl: env.BETTER_AUTH_URL,\n  commercialMode: env.COMMERCIAL_MODE ?? false,\n  polarAccessToken: env.POLAR_ACCESS_TOKEN,\n  polarMode: env.POLAR_MODE,\n  googleClientId: env.GOOGLE_CLIENT_ID,\n  googleClientSecret: env.GOOGLE_CLIENT_SECRET,\n  microsoftClientId: env.MICROSOFT_CLIENT_ID,\n  microsoftClientSecret: env.MICROSOFT_CLIENT_SECRET,\n  resendApiKey: env.RESEND_API_KEY,\n  passkeyRpId: env.PASSKEY_RP_ID,\n  passkeyRpName: env.PASSKEY_RP_NAME,\n  passkeyOrigin: env.PASSKEY_ORIGIN,\n  mcpResourceUrl: env.MCP_PUBLIC_URL,\n  ...(trustedOrigins.length > MIN_TRUSTED_ORIGINS_COUNT && { trustedOrigins }),\n});\n\nconst broadcastService = createBroadcastService({ redis });\n\nconst premiumService = createPremiumService({\n  commercialMode: env.COMMERCIAL_MODE ?? false,\n  database,\n});\n\nconst oauthConfigs = buildOAuthConfigs(env);\nconst oauthProviders = createOAuthProviders(oauthConfigs, oauthStateStore);\n\nconst persistSyncStatus = async (\n  result: DestinationSyncResult,\n  syncedAt: Date,\n): Promise<void> => {\n  await database\n    .insert(syncStatusTable)\n    .values({\n      calendarId: result.calendarId,\n      lastSyncedAt: syncedAt,\n      localEventCount: result.localEventCount,\n      remoteEventCount: result.remoteEventCount,\n    })\n    .onConflictDoUpdate({\n      set: {\n        lastSyncedAt: syncedAt,\n        localEventCount: result.localEventCount,\n        remoteEventCount: result.remoteEventCount,\n      },\n      target: [syncStatusTable.calendarId],\n    });\n};\n\nconst syncAggregateRuntime = createSyncAggregateRuntime({\n  broadcast: (userId, eventName, payload): void => {\n    broadcastService.emit(userId, eventName, payload);\n  },\n  persistSyncStatus,\n  redis,\n});\n\nconst getCurrentSyncAggregate = (\n  userId: string,\n  fallback: {\n    progressPercent: number;\n    syncEventsProcessed: number;\n    syncEventsRemaining: number;\n    syncEventsTotal: number;\n    lastSyncedAt: string | null;\n  },\n) => syncAggregateRuntime.getCurrentSyncAggregate(userId, fallback);\n\nconst getCachedSyncAggregate = (userId: string) =>\n  syncAggregateRuntime.getCachedSyncAggregate(userId);\n\nconst createResendClient = (): Resend | null => {\n  if (!env.RESEND_API_KEY) {\n    return null;\n  }\n\n  return new Resend(env.RESEND_API_KEY);\n};\n\nconst resend = createResendClient();\nconst feedbackEmail = env.FEEDBACK_EMAIL ?? null;\n\nconst baseUrl = env.BETTER_AUTH_URL;\nconst encryptionKey = env.ENCRYPTION_KEY;\n\nexport {\n  database,\n  redis,\n  env,\n  trustedOrigins,\n  auth,\n  authCapabilities,\n  broadcastService,\n  premiumService,\n  oauthProviders,\n  refreshLockStore,\n  resend,\n  feedbackEmail,\n  baseUrl,\n  encryptionKey,\n  getCurrentSyncAggregate,\n  getCachedSyncAggregate,\n};\n"
  },
  {
    "path": "services/api/src/env.ts",
    "content": "import arkenv from \"arkenv\";\n\nconst schema = {\n  API_PORT: \"number\",\n  BETTER_AUTH_SECRET: \"string\",\n  BETTER_AUTH_URL: \"string.url\",\n  COMMERCIAL_MODE: \"boolean?\",\n  DATABASE_URL: \"string.url\",\n  ENCRYPTION_KEY: \"string?\",\n  FEEDBACK_EMAIL: \"string?\",\n  GOOGLE_CLIENT_ID: \"string?\",\n  GOOGLE_CLIENT_SECRET: \"string?\",\n  MICROSOFT_CLIENT_ID: \"string?\",\n  MICROSOFT_CLIENT_SECRET: \"string?\",\n  MCP_PUBLIC_URL: \"string.url?\",\n  PASSKEY_ORIGIN: \"string?\",\n  PASSKEY_RP_ID: \"string?\",\n  PASSKEY_RP_NAME: \"string?\",\n  POLAR_ACCESS_TOKEN: \"string?\",\n  POLAR_MODE: \"'sandbox' | 'production' | undefined?\",\n  POLAR_WEBHOOK_SECRET: \"string?\",\n  REDIS_URL: \"string.url\",\n  RESEND_API_KEY: \"string?\",\n  PRIVATE_RESOLUTION_WHITELIST: \"string?\",\n  BLOCK_PRIVATE_RESOLUTION: \"boolean?\",\n  TRUSTED_ORIGINS: \"string?\",\n  WEBSOCKET_URL: \"string.url?\",\n} as const;\n\nexport { schema };\nexport default arkenv(schema);\n"
  },
  {
    "path": "services/api/src/handlers/auth-oauth-resource.ts",
    "content": "interface PrepareOAuthTokenRequestInput {\n  mcpPublicUrl?: string;\n  pathname: string;\n  request: Request;\n}\n\ntype PreparedOAuthTokenRequest =\n  | {\n    mcpResourceInjected: true;\n    mcpResourceUrl: string;\n    request: Request;\n  }\n  | {\n    mcpResourceInjected: false;\n    request: Request;\n  };\n\nconst TOKEN_ENDPOINT_PATH = \"/api/auth/oauth2/token\";\nconst FORM_URLENCODED_MEDIA_TYPE = \"application/x-www-form-urlencoded\";\nconst TOKEN_GRANT_TYPES = new Set([\"authorization_code\", \"refresh_token\"]);\n\nconst isTokenEndpointRequest = (pathname: string, request: Request): boolean =>\n  pathname === TOKEN_ENDPOINT_PATH && request.method === \"POST\";\n\nconst isFormRequest = (request: Request): boolean => {\n  const contentType = request.headers.get(\"content-type\");\n  if (!contentType) {\n    return false;\n  }\n\n  return contentType.toLowerCase().includes(FORM_URLENCODED_MEDIA_TYPE);\n};\n\nconst prepareOAuthTokenRequest = async ({\n  mcpPublicUrl,\n  pathname,\n  request,\n}: PrepareOAuthTokenRequestInput): Promise<PreparedOAuthTokenRequest> => {\n  if (!mcpPublicUrl) {\n    return {\n      mcpResourceInjected: false,\n      request,\n    };\n  }\n\n  if (!isTokenEndpointRequest(pathname, request)) {\n    return {\n      mcpResourceInjected: false,\n      request,\n    };\n  }\n\n  if (!isFormRequest(request)) {\n    return {\n      mcpResourceInjected: false,\n      request,\n    };\n  }\n\n  const body = await request.clone().text();\n\n  if (body.length === 0) {\n    return {\n      mcpResourceInjected: false,\n      request,\n    };\n  }\n\n  const searchParams = new URLSearchParams(body);\n\n  if (searchParams.has(\"resource\")) {\n    return {\n      mcpResourceInjected: false,\n      request,\n    };\n  }\n\n  const grantType = searchParams.get(\"grant_type\");\n\n  if (!grantType || !TOKEN_GRANT_TYPES.has(grantType)) {\n    return {\n      mcpResourceInjected: false,\n      request,\n    };\n  }\n\n  searchParams.set(\"resource\", mcpPublicUrl);\n\n  const headers = new Headers(request.headers);\n  headers.delete(\"content-length\");\n\n  const requestInit: RequestInit = {\n    headers,\n    method: request.method,\n  };\n\n  if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n    requestInit.body = searchParams.toString();\n  }\n\n  return {\n    mcpResourceInjected: true,\n    mcpResourceUrl: mcpPublicUrl,\n    request: new Request(request.url, requestInit),\n  };\n};\n\nexport { prepareOAuthTokenRequest };\n"
  },
  {
    "path": "services/api/src/handlers/auth.ts",
    "content": "import { hasOAuthProviderApi } from \"@keeper.sh/auth\";\nimport { auth, authCapabilities, env } from \"@/context\";\nimport { prepareOAuthTokenRequest } from \"./auth-oauth-resource\";\nimport { context, widelog } from \"@/utils/logging\";\nimport { resolveOutcome } from \"@/utils/middleware\";\n\nconst COMPANION_COOKIE_NAME = \"keeper.has_session\";\nconst COMPANION_COOKIE_SET = `${COMPANION_COOKIE_NAME}=1; Path=/; SameSite=Lax`;\nconst COMPANION_COOKIE_CLEAR = `${COMPANION_COOKIE_NAME}=; Path=/; Max-Age=0; SameSite=Lax`;\n\nconst isNullSession = (body: unknown): body is null | { session: null } => {\n  if (body === null) {\n    return true;\n  }\n  if (typeof body !== \"object\") {\n    return false;\n  }\n  if (!(\"session\" in body)) {\n    return false;\n  }\n  return body.session === null;\n};\n\nconst clearSessionCookies = (response: Response): Response => {\n  const headers = new Headers(response.headers);\n  const expiredCookie = \"Path=/; Max-Age=0; HttpOnly; SameSite=Lax\";\n  headers.append(\"Set-Cookie\", `better-auth.session_token=; ${expiredCookie}`);\n  headers.append(\"Set-Cookie\", `better-auth.session_data=; ${expiredCookie}`);\n  headers.append(\"Set-Cookie\", COMPANION_COOKIE_CLEAR);\n  return new Response(response.body, {\n    headers,\n    status: response.status,\n    statusText: response.statusText,\n  });\n};\n\nconst hasSessionTokenSet = (response: Response): boolean => {\n  const cookies = response.headers.getSetCookie();\n  return cookies.some(\n    (cookie) => cookie.includes(\"better-auth.session_token=\") && !cookie.includes(\"Max-Age=0\"),\n  );\n};\n\nconst hasSessionTokenCleared = (response: Response): boolean => {\n  const cookies = response.headers.getSetCookie();\n  return cookies.some(\n    (cookie) => cookie.includes(\"better-auth.session_token=\") && cookie.includes(\"Max-Age=0\"),\n  );\n};\n\nconst withCompanionCookie = (response: Response, cookie: string): Response => {\n  const headers = new Headers(response.headers);\n  headers.append(\"Set-Cookie\", cookie);\n  return new Response(response.body, {\n    headers,\n    status: response.status,\n    statusText: response.statusText,\n  });\n};\n\nconst processAuthResponse = async (pathname: string, response: Response): Promise<Response> => {\n  if (hasSessionTokenSet(response)) {\n    return withCompanionCookie(response, COMPANION_COOKIE_SET);\n  }\n\n  if (hasSessionTokenCleared(response)) {\n    return withCompanionCookie(response, COMPANION_COOKIE_CLEAR);\n  }\n\n  if (pathname !== \"/api/auth/get-session\") {\n    return response;\n  }\n\n  const body = await response.clone().json();\n\n  if (!isNullSession(body)) {\n    return response;\n  }\n\n  return clearSessionCookies(response);\n};\n\nconst isUnauthenticatedRequest = (request: Request): boolean => {\n  const authorization = request.headers.get(\"authorization\");\n  if (authorization && authorization.trim().length > 0) {\n    return false;\n  }\n\n  const cookie = request.headers.get(\"cookie\");\n  if (cookie && cookie.includes(\"better-auth.session_token=\")) {\n    return false;\n  }\n\n  return true;\n};\n\nconst prepareUnauthenticatedRegisterRequest = async (\n  pathname: string,\n  request: Request,\n): Promise<Request> => {\n  if (pathname !== \"/api/auth/oauth2/register\") {\n    return request;\n  }\n\n  if (request.method !== \"POST\") {\n    return request;\n  }\n\n  if (!isUnauthenticatedRequest(request)) {\n    return request;\n  }\n\n  const body = await request.clone().json().catch(() => null);\n  if (!body || typeof body !== \"object\") {\n    return request;\n  }\n\n  const modified = { ...body, token_endpoint_auth_method: \"none\" };\n  const headers = new Headers(request.headers);\n  headers.delete(\"content-length\");\n\n  return new Request(request.url, {\n    method: request.method,\n    headers,\n    body: JSON.stringify(modified),\n  });\n};\n\nconst processAuth = async (pathname: string, request: Request): Promise<Response> => {\n  if (pathname === \"/api/auth/capabilities\") {\n    return Response.json(authCapabilities);\n  }\n\n  if (hasOAuthProviderApi(auth.api)) {\n    if (pathname === \"/api/auth/.well-known/oauth-authorization-server\") {\n      return Response.json(\n        await auth.api.getOAuthServerConfig({\n          headers: request.headers,\n        }),\n      );\n    }\n\n    if (pathname === \"/api/auth/.well-known/openid-configuration\") {\n      return Response.json(\n        await auth.api.getOpenIdConfig({\n          headers: request.headers,\n        }),\n      );\n    }\n  }\n\n  const preparedRequest = await prepareUnauthenticatedRegisterRequest(pathname, request);\n  const preparedTokenRequest = await prepareOAuthTokenRequest({\n    mcpPublicUrl: env.MCP_PUBLIC_URL,\n    pathname,\n    request: preparedRequest,\n  });\n\n  const response = await auth.handler(preparedTokenRequest.request);\n  return processAuthResponse(pathname, response);\n};\n\nconst handleAuthRequest = (pathname: string, request: Request): Promise<Response> =>\n  context(async () => {\n    const requestId = request.headers.get(\"x-request-id\") ?? crypto.randomUUID();\n\n    widelog.set(\"operation.name\", `${request.method} ${pathname}`);\n    widelog.set(\"operation.type\", \"auth\");\n    widelog.set(\"request.id\", requestId);\n    widelog.set(\"http.method\", request.method);\n    widelog.set(\"http.path\", pathname);\n\n    try {\n      return await widelog.time.measure(\"duration_ms\", async () => {\n        const response = await processAuth(pathname, request);\n        widelog.set(\"status_code\", response.status);\n        widelog.set(\"outcome\", resolveOutcome(response.status));\n        return response;\n      });\n    } catch (error) {\n      widelog.set(\"status_code\", 500);\n      widelog.set(\"outcome\", \"error\");\n      widelog.errorFields(error, { slug: \"auth-request-failed\" });\n      throw error;\n    } finally {\n      widelog.flush();\n    }\n  });\n\nexport { handleAuthRequest };\n"
  },
  {
    "path": "services/api/src/handlers/websocket-initial-status.ts",
    "content": "interface SocketSender {\n  send: (message: string) => unknown;\n}\n\ninterface InitialSyncAggregateFallbackPayload {\n  lastSyncedAt: string | null;\n  progressPercent: number;\n  syncEventsProcessed: number;\n  syncEventsRemaining: number;\n  syncEventsTotal: number;\n}\n\ninterface OutgoingSyncAggregatePayload {\n  lastSyncedAt?: string | null;\n  progressPercent: number;\n  syncEventsProcessed: number;\n  syncEventsRemaining: number;\n  syncEventsTotal: number;\n  syncing: boolean;\n  seq: number;\n}\n\ninterface SendInitialSyncStatusDependencies {\n  selectLatestDestinationSyncedAt: (userId: string) => Promise<Date | null>;\n  resolveSyncAggregatePayload: (\n    userId: string,\n    fallback: InitialSyncAggregateFallbackPayload,\n  ) => Promise<unknown>;\n  isValidSyncAggregate: (value: unknown) => value is OutgoingSyncAggregatePayload;\n}\n\nconst INITIAL_COUNT = 0;\nconst COMPLETE_PERCENT = 100;\n\nconst createInitialFallbackPayload = (\n  lastSyncedAt: string | null,\n): InitialSyncAggregateFallbackPayload => ({\n  lastSyncedAt,\n  progressPercent: COMPLETE_PERCENT,\n  syncEventsProcessed: INITIAL_COUNT,\n  syncEventsRemaining: INITIAL_COUNT,\n  syncEventsTotal: INITIAL_COUNT,\n});\n\nconst runSendInitialSyncStatus = async (\n  userId: string,\n  socket: SocketSender,\n  dependencies: SendInitialSyncStatusDependencies,\n): Promise<void> => {\n  const latestDestinationSyncedAtDate =\n    await dependencies.selectLatestDestinationSyncedAt(userId);\n  const latestDestinationSyncedAt = latestDestinationSyncedAtDate?.toISOString() ?? null;\n\n  const resolvedPayload = await dependencies.resolveSyncAggregatePayload(\n    userId,\n    createInitialFallbackPayload(latestDestinationSyncedAt),\n  );\n\n  if (!dependencies.isValidSyncAggregate(resolvedPayload)) {\n    throw new Error(\"Invalid initial sync aggregate payload\");\n  }\n\n  socket.send(\n    JSON.stringify({\n      data: resolvedPayload,\n      event: \"sync:aggregate\",\n    }),\n  );\n};\n\nexport {\n  runSendInitialSyncStatus,\n  createInitialFallbackPayload,\n};\nexport type {\n  InitialSyncAggregateFallbackPayload,\n  OutgoingSyncAggregatePayload,\n  SendInitialSyncStatusDependencies,\n};\n"
  },
  {
    "path": "services/api/src/handlers/websocket-payload.ts",
    "content": "interface SyncAggregatePayload {\n  progressPercent: number;\n  syncEventsProcessed: number;\n  syncEventsRemaining: number;\n  syncEventsTotal: number;\n  lastSyncedAt?: string | null;\n  syncing: boolean;\n  seq?: number;\n}\n\ntype SyncAggregateFallbackPayload = Omit<SyncAggregatePayload, \"seq\" | \"syncing\"> & {\n  lastSyncedAt: string | null;\n};\n\ninterface ResolveSyncAggregateDependencies {\n  getCurrentSyncAggregate: (\n    userId: string,\n    fallback: SyncAggregateFallbackPayload,\n  ) => SyncAggregatePayload;\n  getCachedSyncAggregate: (userId: string) => Promise<unknown>;\n  isValidSyncAggregate: (value: unknown) => value is SyncAggregatePayload;\n}\n\nconst resolveSyncAggregatePayload = async (\n  userId: string,\n  fallback: SyncAggregateFallbackPayload,\n  dependencies: ResolveSyncAggregateDependencies,\n): Promise<SyncAggregatePayload> => {\n  const cached = await dependencies.getCachedSyncAggregate(userId);\n  if (cached && dependencies.isValidSyncAggregate(cached)) {\n    return {\n      ...cached,\n      ...(!(\"lastSyncedAt\" in cached) && { lastSyncedAt: fallback.lastSyncedAt }),\n    };\n  }\n\n  return dependencies.getCurrentSyncAggregate(userId, fallback);\n};\n\nexport { resolveSyncAggregatePayload };\nexport type { SyncAggregatePayload, SyncAggregateFallbackPayload, ResolveSyncAggregateDependencies };\n"
  },
  {
    "path": "services/api/src/handlers/websocket.ts",
    "content": "import { syncStatusTable, calendarsTable, sourceDestinationMappingsTable } from \"@keeper.sh/database/schema\";\nimport { createWebsocketHandler } from \"@keeper.sh/broadcast\";\nimport type { Socket } from \"@keeper.sh/broadcast\";\nimport { syncAggregateSchema } from \"@keeper.sh/data-schemas\";\nimport { and, eq, inArray, max } from \"drizzle-orm\";\nimport { database, getCachedSyncAggregate, getCurrentSyncAggregate } from \"@/context\";\nimport { resolveSyncAggregatePayload } from \"./websocket-payload\";\nimport { runSendInitialSyncStatus } from \"./websocket-initial-status\";\nimport { context, widelog } from \"@/utils/logging\";\n\nconst selectLatestDestinationSyncedAt = async (userId: string): Promise<Date | null> => {\n  const [aggregate] = await database\n    .select({\n      lastSyncedAt: max(syncStatusTable.lastSyncedAt),\n    })\n    .from(syncStatusTable)\n    .innerJoin(\n      calendarsTable,\n      eq(syncStatusTable.calendarId, calendarsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        inArray(calendarsTable.id,\n          database.selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n            .from(sourceDestinationMappingsTable)\n        ),\n      ),\n    );\n\n  return aggregate?.lastSyncedAt ?? null;\n};\n\nconst sendInitialSyncStatus = (userId: string, socket: Socket): Promise<void> =>\n  runSendInitialSyncStatus(userId, socket, {\n    isValidSyncAggregate: syncAggregateSchema.allows,\n    resolveSyncAggregatePayload: (userIdToResolve, fallback) =>\n      resolveSyncAggregatePayload(userIdToResolve, fallback, {\n        getCachedSyncAggregate,\n        getCurrentSyncAggregate,\n        isValidSyncAggregate: syncAggregateSchema.allows,\n      }),\n    selectLatestDestinationSyncedAt,\n  });\n\nconst baseWebsocketHandler = createWebsocketHandler({\n  onConnect: sendInitialSyncStatus,\n});\n\nconst runWebsocketBoundary = (\n  socket: Socket,\n  operationName: \"websocket:open\" | \"websocket:close\",\n  callback: () => void | Promise<void>,\n): Promise<void> =>\n  context(async () => {\n    widelog.set(\"operation.name\", operationName);\n    widelog.set(\"operation.type\", \"connection\");\n    widelog.set(\"request.id\", crypto.randomUUID());\n    widelog.set(\"user.id\", socket.data.userId);\n\n    try {\n      await widelog.time.measure(\"duration_ms\", () => callback());\n    } catch (error) {\n      widelog.errorFields(error, { slug: \"unclassified\" });\n      throw error;\n    } finally {\n      widelog.flush();\n    }\n  });\n\nconst websocketHandler = {\n  close(socket: Socket) {\n    return runWebsocketBoundary(socket, \"websocket:close\", () => {\n      baseWebsocketHandler.close(socket);\n    });\n  },\n  idleTimeout: baseWebsocketHandler.idleTimeout,\n  message: baseWebsocketHandler.message,\n  open(socket: Socket): Promise<void> {\n    return runWebsocketBoundary(socket, \"websocket:open\", () =>\n      baseWebsocketHandler.open(socket),\n    );\n  },\n};\n\nexport { websocketHandler };\n"
  },
  {
    "path": "services/api/src/index.ts",
    "content": "import type { BroadcastData } from \"@keeper.sh/broadcast\";\nimport { entry } from \"entrykit\";\nimport { join } from \"node:path\";\nimport { withCors } from \"./middleware/cors\";\nimport { handleAuthRequest } from \"./handlers/auth\";\nimport { websocketHandler } from \"./handlers/websocket\";\nimport { validateSocketToken } from \"./utils/state\";\nimport { isHttpMethod, isRouteModule } from \"./utils/route-handler\";\nimport { socketQuerySchema } from \"./utils/request-query\";\nimport { closeDatabase } from \"@keeper.sh/database\";\nimport { broadcastService, database, redis } from \"./context\";\nimport { destroy } from \"./utils/logging\";\nimport env from \"./env\";\n\nconst HTTP_UNAUTHORIZED = 401;\nconst HTTP_NOT_FOUND = 404;\nconst HTTP_METHOD_NOT_ALLOWED = 405;\nconst HTTP_INTERNAL_SERVER_ERROR = 500;\n\nconst router = new Bun.FileSystemRouter({\n  dir: join(import.meta.dirname, \"routes\"),\n  style: \"nextjs\",\n});\n\nawait entry({\n  main: async () => {\n    const server = Bun.serve<BroadcastData>({\n      port: env.API_PORT,\n      websocket: websocketHandler,\n      fetch: withCors(async (request) => {\n        const url = new URL(request.url);\n\n        if (url.pathname.startsWith(\"/api/auth\")) {\n          return handleAuthRequest(url.pathname, request);\n        }\n\n        if (url.pathname === \"/api/socket\") {\n          const token = url.searchParams.get(\"token\");\n          const query = Object.fromEntries(url.searchParams.entries());\n          if (!token || !socketQuerySchema.allows(query)) {\n            return new Response(\"Unauthorized\", { status: HTTP_UNAUTHORIZED });\n          }\n\n          const userId = await validateSocketToken(token);\n\n          if (!userId) {\n            return new Response(\"Unauthorized\", { status: HTTP_UNAUTHORIZED });\n          }\n\n          const upgraded = server.upgrade(request, {\n            data: { userId },\n          });\n\n          if (!upgraded) {\n            return new Response(\"WebSocket upgrade failed\", {\n              status: HTTP_INTERNAL_SERVER_ERROR,\n            });\n          }\n\n          return;\n        }\n\n        const match = router.match(request);\n\n        if (!match) {\n          return new Response(\"Not found\", { status: HTTP_NOT_FOUND });\n        }\n\n        const module: unknown = await import(match.filePath);\n\n        if (!isRouteModule(module)) {\n          return new Response(\"Internal server error\", {\n            status: HTTP_INTERNAL_SERVER_ERROR,\n          });\n        }\n\n        if (!isHttpMethod(request.method)) {\n          return new Response(\"Method not allowed\", { status: HTTP_METHOD_NOT_ALLOWED });\n        }\n\n        const handler = module[request.method];\n\n        if (!handler) {\n          return new Response(\"Method not allowed\", { status: HTTP_METHOD_NOT_ALLOWED });\n        }\n\n        return handler(request, match.params, match.name);\n      }),\n    });\n\n    await broadcastService.startSubscriber();\n\n    return () => {\n      destroy();\n      server.stop();\n      closeDatabase(database);\n      redis.disconnect();\n    };\n  },\n  name: \"api\",\n});\n"
  },
  {
    "path": "services/api/src/middleware/cors.ts",
    "content": "import type { MaybePromise } from \"bun\";\nimport { trustedOrigins, baseUrl } from \"@/context\";\n\nconst CORS_MAX_AGE_SECONDS = 86_400;\nconst HTTP_NO_CONTENT = 204;\nconst HTTP_FORBIDDEN = 403;\nconst EMPTY_ORIGINS_COUNT = 0;\n\ntype FetchHandler = (request: Request) => MaybePromise<Response | undefined>;\n\nconst corsHeaders = (origin: string): Record<string, string> => ({\n  \"Access-Control-Allow-Credentials\": \"true\",\n  \"Access-Control-Allow-Headers\": \"Content-Type, Authorization, X-Requested-With\",\n  \"Access-Control-Allow-Methods\": \"GET, POST, PUT, DELETE, OPTIONS\",\n  \"Access-Control-Allow-Origin\": origin,\n});\n\nconst withCors = (handler: FetchHandler): FetchHandler => {\n  const allowedOrigins = [...trustedOrigins];\n  if (baseUrl) {\n    allowedOrigins.push(baseUrl);\n  }\n\n  const isOriginAllowed = (origin: string | null): boolean => {\n    if (!origin) {\n      return false;\n    }\n    if (allowedOrigins.length === EMPTY_ORIGINS_COUNT) {\n      return false;\n    }\n    return allowedOrigins.includes(origin);\n  };\n\n  return async (request): Promise<Response | undefined> => {\n    const origin = request.headers.get(\"Origin\");\n\n    if (request.method === \"OPTIONS\") {\n      if (!origin) {\n        return new Response(null, { status: HTTP_NO_CONTENT });\n      }\n      if (!isOriginAllowed(origin)) {\n        return new Response(null, { status: HTTP_FORBIDDEN });\n      }\n\n      return new Response(null, {\n        headers: {\n          ...corsHeaders(origin),\n          \"Access-Control-Max-Age\": String(CORS_MAX_AGE_SECONDS),\n        },\n        status: HTTP_NO_CONTENT,\n      });\n    }\n\n    const response = await handler(request);\n\n    if (!response || !origin || !isOriginAllowed(origin)) {\n      return response;\n    }\n\n    const headers = new Headers(response.headers);\n    for (const [key, value] of Object.entries(corsHeaders(origin))) {\n      headers.set(key, value);\n    }\n\n    return new Response(response.body, {\n      headers,\n      status: response.status,\n      statusText: response.statusText,\n    });\n  };\n};\n\nexport { withCors };\n"
  },
  {
    "path": "services/api/src/mutations/index.ts",
    "content": "import { userEventsTable } from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { KeeperDatabase } from \"@/types\";\nimport type {\n  EventInput,\n  EventUpdateInput,\n  EventActionResult,\n  EventCreateResult,\n  PendingInvite,\n  ProviderCredentials,\n  RsvpStatus,\n} from \"@/types\";\nimport { createCoordinatedRefresher } from \"@keeper.sh/calendar\";\nimport type { RefreshLockStore } from \"@keeper.sh/calendar\";\nimport { resolveCredentialsByCalendarId, resolveCredentialsByEventId } from \"./resolve-credentials\";\nimport { getEvent } from \"@/queries/get-event\";\nimport {\n  createGoogleEvent,\n  updateGoogleEvent,\n  deleteGoogleEvent,\n  rsvpGoogleEvent,\n  getPendingGoogleInvites,\n} from \"./providers/google\";\nimport {\n  createOutlookEvent,\n  updateOutlookEvent,\n  deleteOutlookEvent,\n  rsvpOutlookEvent,\n  getPendingOutlookInvites,\n} from \"./providers/outlook\";\nimport {\n  createCalDAVEvent,\n  updateCalDAVEvent,\n  deleteCalDAVEvent,\n  rsvpCalDAVEvent,\n  getPendingCalDAVInvites,\n} from \"./providers/caldav\";\n\ninterface OAuthTokenRefresher {\n  getProvider: (providerId: string) => { refreshAccessToken: (refreshToken: string) => Promise<{ access_token: string; expires_in: number }> } | undefined;\n}\n\ninterface MutationDependencies {\n  database: KeeperDatabase;\n  oauthTokenRefresher?: OAuthTokenRefresher;\n  refreshLockStore?: RefreshLockStore | null;\n  encryptionKey?: string;\n}\n\nconst TOKEN_REFRESH_BUFFER_MS = 60_000;\n\nconst CALDAV_PROVIDERS = new Set([\"caldav\", \"fastmail\", \"icloud\"]);\n\nconst ensureValidAccessToken = async (\n  provider: string,\n  oauth: { credentialId: string; accessToken: string; refreshToken: string; expiresAt: Date },\n  accountId: string,\n  deps: MutationDependencies,\n): Promise<string> => {\n  if (oauth.expiresAt.getTime() > Date.now() + TOKEN_REFRESH_BUFFER_MS) {\n    return oauth.accessToken;\n  }\n\n  if (!deps.oauthTokenRefresher) {\n    return oauth.accessToken;\n  }\n\n  const oauthProvider = deps.oauthTokenRefresher.getProvider(provider);\n  if (!oauthProvider) {\n    return oauth.accessToken;\n  }\n\n  const refresher = createCoordinatedRefresher({\n    database: deps.database,\n    oauthCredentialId: oauth.credentialId,\n    calendarAccountId: accountId,\n    refreshLockStore: deps.refreshLockStore ?? null,\n    rawRefresh: (refreshToken) => oauthProvider.refreshAccessToken(refreshToken),\n  });\n\n  const result = await refresher(oauth.refreshToken);\n  return result.access_token;\n};\n\ninterface CreateProviderFailure {\n  success: false;\n  error: string;\n}\n\ninterface CreateProviderSuccess {\n  success: true;\n  sourceEventUid: string | null;\n}\n\ntype CreateProviderResult = CreateProviderFailure | CreateProviderSuccess;\n\nconst createEventViaOAuth = async (\n  credentials: ProviderCredentials,\n  input: EventInput,\n  deps: MutationDependencies,\n): Promise<CreateProviderResult> => {\n  if (!credentials.oauth) {\n    return { success: false, error: \"No OAuth credentials available.\" };\n  }\n\n  const accessToken = await ensureValidAccessToken(\n    credentials.provider,\n    credentials.oauth,\n    credentials.accountId,\n    deps,\n  );\n\n  if (credentials.provider === \"google\") {\n    const result = await createGoogleEvent(accessToken, credentials.externalCalendarId, input);\n    if (!result.success) {\n      return { success: false, error: result.error ?? \"Google create failed.\" };\n    }\n    return { success: true, sourceEventUid: result.sourceEventUid ?? null };\n  }\n\n  if (credentials.provider === \"outlook\") {\n    const result = await createOutlookEvent(accessToken, input);\n    if (!result.success) {\n      return { success: false, error: result.error ?? \"Outlook create failed.\" };\n    }\n    return { success: true, sourceEventUid: result.sourceEventUid ?? null };\n  }\n\n  return { success: false, error: `Unsupported OAuth provider: ${credentials.provider}` };\n};\n\nconst createEventViaCalDAV = async (\n  credentials: ProviderCredentials,\n  input: EventInput,\n  encryptionKey: string,\n): Promise<CreateProviderResult> => {\n  if (!credentials.caldav || !credentials.calendarUrl) {\n    return { success: false, error: \"Missing CalDAV credentials or calendar URL.\" };\n  }\n\n  const result = await createCalDAVEvent(\n    {\n      serverUrl: credentials.caldav.serverUrl,\n      calendarUrl: credentials.calendarUrl,\n      username: credentials.caldav.username,\n      authMethod: credentials.caldav.authMethod,\n      encryptedPassword: credentials.caldav.encryptedPassword,\n      encryptionKey,\n    },\n    input,\n  );\n\n  if (!result.success) {\n    return { success: false, error: result.error ?? \"CalDAV create failed.\" };\n  }\n\n  return { success: true, sourceEventUid: result.sourceEventUid ?? null };\n};\n\nconst dispatchCreateEvent = (\n  credentials: ProviderCredentials,\n  input: EventInput,\n  deps: MutationDependencies,\n): Promise<CreateProviderResult> => {\n  if (credentials.oauth) {\n    return createEventViaOAuth(credentials, input, deps);\n  }\n\n  if (credentials.caldav && CALDAV_PROVIDERS.has(credentials.provider) && deps.encryptionKey && credentials.calendarUrl) {\n    return createEventViaCalDAV(credentials, input, deps.encryptionKey);\n  }\n\n  return Promise.resolve({ success: false, error: \"Calendar provider not supported for event creation.\" });\n};\n\nconst createEventMutation = async (\n  deps: MutationDependencies,\n  userId: string,\n  input: EventInput,\n): Promise<EventCreateResult> => {\n  const credentials = await resolveCredentialsByCalendarId(deps.database, userId, input.calendarId);\n\n  if (!credentials) {\n    return { success: false, error: \"Calendar not found or requires reauthentication.\" };\n  }\n\n  const providerResult = await dispatchCreateEvent(credentials, input, deps);\n\n  if (!providerResult.success) {\n    return providerResult;\n  }\n\n  const [inserted] = await deps.database\n    .insert(userEventsTable)\n    .values({\n      calendarId: input.calendarId,\n      userId,\n      sourceEventUid: providerResult.sourceEventUid,\n      title: input.title,\n      description: input.description ?? null,\n      location: input.location ?? null,\n      startTime: new Date(input.startTime),\n      endTime: new Date(input.endTime),\n      isAllDay: input.isAllDay ?? false,\n      availability: input.availability ?? \"busy\",\n    })\n    .returning({ id: userEventsTable.id });\n\n  if (!inserted) {\n    return { success: true };\n  }\n\n  const event = await getEvent(deps.database, userId, inserted.id);\n\n  if (event) {\n    return { success: true, event };\n  }\n\n  return { success: true };\n};\n\nconst dispatchUpdateEvent = async (\n  credentials: ProviderCredentials,\n  sourceEventUid: string,\n  updates: EventUpdateInput,\n  deps: MutationDependencies,\n): Promise<EventActionResult> => {\n  if (credentials.oauth) {\n    const accessToken = await ensureValidAccessToken(\n      credentials.provider,\n      credentials.oauth,\n      credentials.accountId,\n      deps,\n    );\n\n    if (credentials.provider === \"google\") {\n      return updateGoogleEvent(accessToken, credentials.externalCalendarId, sourceEventUid, updates);\n    }\n\n    if (credentials.provider === \"outlook\") {\n      return updateOutlookEvent(accessToken, sourceEventUid, updates);\n    }\n\n    return { success: false, error: `Unsupported OAuth provider: ${credentials.provider}` };\n  }\n\n  if (credentials.caldav && CALDAV_PROVIDERS.has(credentials.provider) && deps.encryptionKey && credentials.calendarUrl) {\n    return updateCalDAVEvent(\n      {\n        serverUrl: credentials.caldav.serverUrl,\n        calendarUrl: credentials.calendarUrl,\n        username: credentials.caldav.username,\n        authMethod: credentials.caldav.authMethod,\n        encryptedPassword: credentials.caldav.encryptedPassword,\n        encryptionKey: deps.encryptionKey,\n      },\n      sourceEventUid,\n      updates,\n    );\n  }\n\n  return { success: false, error: \"Calendar provider not supported for event updates.\" };\n};\n\nconst buildDbUpdates = (updates: EventUpdateInput): Record<string, unknown> => {\n  const dbUpdates: Record<string, unknown> = {};\n\n  if (\"title\" in updates) {\n    dbUpdates.title = updates.title;\n  }\n  if (\"description\" in updates) {\n    dbUpdates.description = updates.description;\n  }\n  if (\"location\" in updates) {\n    dbUpdates.location = updates.location;\n  }\n  if (\"startTime\" in updates && updates.startTime) {\n    dbUpdates.startTime = new Date(updates.startTime);\n  }\n  if (\"endTime\" in updates && updates.endTime) {\n    dbUpdates.endTime = new Date(updates.endTime);\n  }\n  if (\"isAllDay\" in updates) {\n    dbUpdates.isAllDay = updates.isAllDay;\n  }\n  if (\"availability\" in updates) {\n    dbUpdates.availability = updates.availability;\n  }\n\n  return dbUpdates;\n};\n\nconst updateEventMutation = async (\n  deps: MutationDependencies,\n  userId: string,\n  eventId: string,\n  updates: EventUpdateInput,\n): Promise<EventActionResult> => {\n  const resolved = await resolveCredentialsByEventId(deps.database, userId, eventId);\n\n  if (!resolved) {\n    return { success: false, error: \"Event not found.\" };\n  }\n\n  if (resolved.eventSource === \"synced\") {\n    return { success: false, error: \"Synced events cannot be updated. Only user-created events can be modified.\" };\n  }\n\n  const { credentials, sourceEventUid } = resolved;\n\n  if (!sourceEventUid) {\n    return { success: false, error: \"Event cannot be updated (no source UID).\" };\n  }\n\n  const providerResult = await dispatchUpdateEvent(credentials, sourceEventUid, updates, deps);\n\n  if (!providerResult.success) {\n    return providerResult;\n  }\n\n  const dbUpdates = buildDbUpdates(updates);\n\n  if (Object.keys(dbUpdates).length > 0) {\n    await deps.database\n      .update(userEventsTable)\n      .set(dbUpdates)\n      .where(eq(userEventsTable.id, eventId));\n  }\n\n  return { success: true };\n};\n\nconst deleteEventMutation = async (\n  deps: MutationDependencies,\n  userId: string,\n  eventId: string,\n): Promise<EventActionResult> => {\n  const resolved = await resolveCredentialsByEventId(deps.database, userId, eventId);\n\n  if (!resolved) {\n    return { success: false, error: \"Event not found.\" };\n  }\n\n  if (resolved.eventSource === \"synced\") {\n    return { success: false, error: \"Synced events cannot be deleted. Only user-created events can be removed.\" };\n  }\n\n  const { credentials, sourceEventUid } = resolved;\n\n  if (sourceEventUid) {\n    if (credentials.oauth) {\n      const accessToken = await ensureValidAccessToken(\n        credentials.provider,\n        credentials.oauth,\n        credentials.accountId,\n        deps,\n      );\n\n      if (credentials.provider === \"google\") {\n        const result = await deleteGoogleEvent(accessToken, credentials.externalCalendarId, sourceEventUid);\n        if (!result.success) {\n          return result;\n        }\n      } else if (credentials.provider === \"outlook\") {\n        const result = await deleteOutlookEvent(accessToken, sourceEventUid);\n        if (!result.success) {\n          return result;\n        }\n      }\n    } else if (credentials.caldav && CALDAV_PROVIDERS.has(credentials.provider) && deps.encryptionKey && credentials.calendarUrl) {\n      const result = await deleteCalDAVEvent(\n        {\n          serverUrl: credentials.caldav.serverUrl,\n          calendarUrl: credentials.calendarUrl,\n          username: credentials.caldav.username,\n          authMethod: credentials.caldav.authMethod,\n          encryptedPassword: credentials.caldav.encryptedPassword,\n          encryptionKey: deps.encryptionKey,\n        },\n        sourceEventUid,\n      );\n      if (!result.success) {\n        return result;\n      }\n    }\n  }\n\n  await deps.database\n    .delete(userEventsTable)\n    .where(eq(userEventsTable.id, eventId));\n\n  return { success: true };\n};\n\nconst rsvpEventMutation = async (\n  deps: MutationDependencies,\n  userId: string,\n  eventId: string,\n  status: RsvpStatus,\n): Promise<EventActionResult> => {\n  const resolved = await resolveCredentialsByEventId(deps.database, userId, eventId);\n\n  if (!resolved) {\n    return { success: false, error: \"Event not found.\" };\n  }\n\n  const { credentials, sourceEventUid } = resolved;\n\n  if (!sourceEventUid) {\n    return { success: false, error: \"Event cannot be responded to (no source UID).\" };\n  }\n\n  if (!credentials.email) {\n    return { success: false, error: \"No email associated with this calendar account.\" };\n  }\n\n  if (credentials.oauth) {\n    const accessToken = await ensureValidAccessToken(\n      credentials.provider,\n      credentials.oauth,\n      credentials.accountId,\n      deps,\n    );\n\n    if (credentials.provider === \"google\") {\n      return rsvpGoogleEvent(accessToken, credentials.externalCalendarId, sourceEventUid, status, credentials.email);\n    }\n\n    if (credentials.provider === \"outlook\") {\n      return rsvpOutlookEvent(accessToken, sourceEventUid, status);\n    }\n\n    return { success: false, error: `RSVP not supported for provider: ${credentials.provider}` };\n  }\n\n  if (credentials.caldav && CALDAV_PROVIDERS.has(credentials.provider) && deps.encryptionKey && credentials.calendarUrl) {\n    return rsvpCalDAVEvent(\n      {\n        serverUrl: credentials.caldav.serverUrl,\n        calendarUrl: credentials.calendarUrl,\n        username: credentials.caldav.username,\n        authMethod: credentials.caldav.authMethod,\n        encryptedPassword: credentials.caldav.encryptedPassword,\n        encryptionKey: deps.encryptionKey,\n      },\n      sourceEventUid,\n      status,\n      credentials.email,\n    );\n  }\n\n  return { success: false, error: \"RSVP not supported for this calendar provider.\" };\n};\n\nconst fetchOAuthPendingInvites = async (\n  credentials: ProviderCredentials,\n  from: string,\n  to: string,\n  deps: MutationDependencies,\n): Promise<PendingInvite[]> => {\n  if (!credentials.oauth) {\n    return [];\n  }\n\n  const accessToken = await ensureValidAccessToken(\n    credentials.provider,\n    credentials.oauth,\n    credentials.accountId,\n    deps,\n  );\n\n  if (credentials.provider === \"google\") {\n    const providerInvites = await getPendingGoogleInvites(accessToken, credentials.externalCalendarId, from, to);\n    return providerInvites.map((invite) => ({\n      ...invite,\n      calendarId: credentials.calendarId,\n      provider: credentials.provider,\n    }));\n  }\n\n  if (credentials.provider === \"outlook\") {\n    const providerInvites = await getPendingOutlookInvites(accessToken, from, to);\n    return providerInvites.map((invite) => ({\n      ...invite,\n      calendarId: credentials.calendarId,\n      provider: credentials.provider,\n    }));\n  }\n\n  return [];\n};\n\nconst fetchCalDAVPendingInvites = async (\n  credentials: ProviderCredentials,\n  from: string,\n  to: string,\n  encryptionKey: string,\n): Promise<PendingInvite[]> => {\n  if (!credentials.caldav || !credentials.calendarUrl || !credentials.email) {\n    return [];\n  }\n\n  if (!CALDAV_PROVIDERS.has(credentials.provider)) {\n    return [];\n  }\n\n  const providerInvites = await getPendingCalDAVInvites(\n    {\n      serverUrl: credentials.caldav.serverUrl,\n      calendarUrl: credentials.calendarUrl,\n      username: credentials.caldav.username,\n      authMethod: credentials.caldav.authMethod,\n      encryptedPassword: credentials.caldav.encryptedPassword,\n      encryptionKey,\n    },\n    from,\n    to,\n    credentials.email,\n  );\n\n  return providerInvites.map((invite) => ({\n    ...invite,\n    calendarId: credentials.calendarId,\n    provider: credentials.provider,\n  }));\n};\n\nconst fetchPendingInvitesForCalendar = (\n  credentials: ProviderCredentials,\n  from: string,\n  to: string,\n  deps: MutationDependencies,\n): Promise<PendingInvite[]> => {\n  if (credentials.oauth) {\n    return fetchOAuthPendingInvites(credentials, from, to, deps);\n  }\n\n  if (credentials.caldav && deps.encryptionKey) {\n    return fetchCalDAVPendingInvites(credentials, from, to, deps.encryptionKey);\n  }\n\n  return Promise.resolve([]);\n};\n\nconst getPendingInvitesMutation = async (\n  deps: MutationDependencies,\n  userId: string,\n  calendarId: string,\n  from: string,\n  to: string,\n): Promise<PendingInvite[]> => {\n  const credentials = await resolveCredentialsByCalendarId(deps.database, userId, calendarId);\n\n  if (!credentials) {\n    return [];\n  }\n\n  const invites = await fetchPendingInvitesForCalendar(credentials, from, to, deps);\n\n  invites.sort((left, right) =>\n    new Date(left.startTime).getTime() - new Date(right.startTime).getTime(),\n  );\n\n  return invites;\n};\n\nexport { createEventMutation, updateEventMutation, deleteEventMutation, rsvpEventMutation, getPendingInvitesMutation };\nexport type { MutationDependencies, OAuthTokenRefresher };\n"
  },
  {
    "path": "services/api/src/mutations/providers/caldav.ts",
    "content": "import { convertIcsCalendar, generateIcsCalendar } from \"ts-ics\";\nimport type { IcsCalendar, IcsEvent } from \"ts-ics\";\nimport { HTTP_STATUS, KEEPER_USER_EVENT_SUFFIX } from \"@keeper.sh/constants\";\nimport { decryptPassword } from \"@keeper.sh/database\";\nimport { createSafeFetch } from \"@keeper.sh/calendar/safe-fetch\";\nimport { createDigestAwareFetch, resolveAuthMethod } from \"@keeper.sh/calendar/digest-fetch\";\nimport { createDAVClient } from \"tsdav\";\nimport { safeFetchOptions } from \"@/utils/safe-fetch-options\";\nimport type { EventInput, EventUpdateInput, EventActionResult, RsvpStatus } from \"@/types\";\n\ninterface CalDAVCredentials {\n  serverUrl: string;\n  calendarUrl: string;\n  username: string;\n  encryptedPassword: string;\n  encryptionKey: string;\n  authMethod: string;\n}\n\nconst getClient = (credentials: CalDAVCredentials) => {\n  const password = decryptPassword(credentials.encryptedPassword, credentials.encryptionKey);\n  const safeFetch = createSafeFetch(safeFetchOptions);\n  const knownAuthMethod = resolveAuthMethod(credentials.authMethod);\n  const { fetch: digestAwareFetch } = createDigestAwareFetch({\n    credentials: { username: credentials.username, password },\n    baseFetch: safeFetch,\n    knownAuthMethod,\n  });\n  return createDAVClient({\n    authMethod: \"Custom\",\n    authFunction: () => Promise.resolve({}),\n    credentials: { username: credentials.username, password },\n    defaultAccountType: \"caldav\",\n    fetch: digestAwareFetch,\n    serverUrl: credentials.serverUrl,\n  });\n};\n\nconst generateUid = (): string => `${crypto.randomUUID()}${KEEPER_USER_EVENT_SUFFIX}`;\n\nconst ensureTrailingSlash = (url: string): string => {\n  if (url.endsWith(\"/\")) {\n    return url;\n  }\n  return `${url}/`;\n};\n\nconst resolveIsAllDay = (input: { isAllDay?: boolean }): boolean => {\n  if (input.isAllDay === true) {\n    return true;\n  }\n  return false;\n};\n\nconst buildIcsEvent = (uid: string, input: EventInput): IcsEvent => {\n  const isAllDay = resolveIsAllDay(input);\n\n  const event: IcsEvent = {\n    uid,\n    summary: input.title,\n    description: input.description,\n    location: input.location,\n    start: {\n      date: new Date(input.startTime),\n      ...(isAllDay && { type: \"DATE\" as const }),\n    },\n    end: {\n      date: new Date(input.endTime),\n      ...(isAllDay && { type: \"DATE\" as const }),\n    },\n    stamp: { date: new Date() },\n  };\n\n  if (input.availability === \"free\") {\n    event.timeTransparent = \"TRANSPARENT\";\n  }\n\n  return event;\n};\n\nconst buildIcsCalendar = (events: IcsEvent[]): IcsCalendar => ({\n  events,\n  prodId: \"-//Keeper//Keeper Calendar//EN\",\n  version: \"2.0\",\n});\n\ninterface CalDAVEventResult {\n  sourceEventUid: string;\n}\n\nconst extractErrorMessage = (error: unknown, fallback: string): string => {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return fallback;\n};\n\nconst createCalDAVEvent = async (\n  credentials: CalDAVCredentials,\n  input: EventInput,\n): Promise<EventActionResult & Partial<CalDAVEventResult>> => {\n  try {\n    const client = await getClient(credentials);\n    const uid = generateUid();\n    const event = buildIcsEvent(uid, input);\n    const icsString = generateIcsCalendar(buildIcsCalendar([event]));\n\n    await client.createCalendarObject({\n      calendar: { url: credentials.calendarUrl },\n      filename: `${uid}.ics`,\n      iCalString: icsString,\n    });\n\n    return { success: true, sourceEventUid: uid };\n  } catch (error) {\n    return { success: false, error: extractErrorMessage(error, \"CalDAV create failed.\") };\n  }\n};\n\nconst fetchCalendarObject = async (\n  client: Awaited<ReturnType<typeof createDAVClient>>,\n  calendarUrl: string,\n  sourceEventUid: string,\n): Promise<{ url: string; data: string } | null> => {\n  const objectUrl = `${ensureTrailingSlash(calendarUrl)}${sourceEventUid}.ics`;\n\n  try {\n    const objects = await client.fetchCalendarObjects({\n      calendar: { url: calendarUrl },\n      objectUrls: [objectUrl],\n    });\n\n    const [object] = objects;\n    if (object?.data) {\n      return { url: object.url, data: object.data };\n    }\n  } catch {\n    // Object may not exist at that URL\n  }\n\n  return null;\n};\n\n// eslint-disable-next-line no-undefined -- convertIcsCalendar requires undefined as first arg for no schema\nconst parseIcsString = (icsString: string): IcsCalendar => convertIcsCalendar(undefined, icsString);\n\nconst resolveEventIsAllDay = (updates: EventUpdateInput, event: IcsEvent): boolean => {\n  if (updates.isAllDay === true || updates.isAllDay === false) {\n    return updates.isAllDay;\n  }\n  return event.start?.type === \"DATE\";\n};\n\nconst resolveTransparency = (availability: string): \"TRANSPARENT\" | \"OPAQUE\" => {\n  if (availability === \"free\") {\n    return \"TRANSPARENT\";\n  }\n  return \"OPAQUE\";\n};\n\nconst applyUpdatesToEvent = (event: IcsEvent, updates: EventUpdateInput): IcsEvent => {\n  const updated = { ...event };\n\n  if (\"title\" in updates && typeof updates.title === \"string\") {\n    updated.summary = updates.title;\n  }\n  if (\"description\" in updates) {\n    updated.description = updates.description;\n  }\n  if (\"location\" in updates) {\n    updated.location = updates.location;\n  }\n  if (\"startTime\" in updates && typeof updates.startTime === \"string\") {\n    const isAllDay = resolveEventIsAllDay(updates, event);\n    updated.start = {\n      date: new Date(updates.startTime),\n      ...(isAllDay && { type: \"DATE\" as const }),\n    };\n  }\n  if (\"endTime\" in updates && typeof updates.endTime === \"string\") {\n    const isAllDay = resolveEventIsAllDay(updates, event);\n    updated.end = {\n      date: new Date(updates.endTime),\n      ...(isAllDay && { type: \"DATE\" as const }),\n    };\n  }\n  if (\"availability\" in updates && typeof updates.availability === \"string\") {\n    updated.timeTransparent = resolveTransparency(updates.availability);\n  }\n\n  updated.stamp = { date: new Date() };\n\n  return updated;\n};\n\nconst updateCalDAVEvent = async (\n  credentials: CalDAVCredentials,\n  sourceEventUid: string,\n  updates: EventUpdateInput,\n): Promise<EventActionResult> => {\n  try {\n    const client = await getClient(credentials);\n    const existing = await fetchCalendarObject(client, credentials.calendarUrl, sourceEventUid);\n\n    if (!existing) {\n      return { success: false, error: \"Event not found on CalDAV server.\" };\n    }\n\n    const calendar = parseIcsString(existing.data);\n    const [event] = calendar.events ?? [];\n\n    if (!event) {\n      return { success: false, error: \"Could not parse event from CalDAV server.\" };\n    }\n\n    const updatedEvent = applyUpdatesToEvent(event, updates);\n    const updatedCalendar = buildIcsCalendar([updatedEvent]);\n    const icsString = generateIcsCalendar(updatedCalendar);\n\n    await client.updateCalendarObject({\n      calendarObject: {\n        url: existing.url,\n        data: icsString,\n      },\n    });\n\n    return { success: true };\n  } catch (error) {\n    return { success: false, error: extractErrorMessage(error, \"CalDAV update failed.\") };\n  }\n};\n\nconst deleteCalDAVEvent = async (\n  credentials: CalDAVCredentials,\n  sourceEventUid: string,\n): Promise<EventActionResult> => {\n  try {\n    const client = await getClient(credentials);\n    const objectUrl = `${ensureTrailingSlash(credentials.calendarUrl)}${sourceEventUid}.ics`;\n\n    try {\n      await client.deleteCalendarObject({\n        calendarObject: { url: objectUrl },\n      });\n    } catch (error) {\n      if (error instanceof Error && \"status\" in error) {\n        const { status } = error;\n        if (status !== HTTP_STATUS.NOT_FOUND) {\n          throw error;\n        }\n      }\n\n      throw error;\n    }\n\n    return { success: true };\n  } catch (error) {\n    return { success: false, error: extractErrorMessage(error, \"CalDAV delete failed.\") };\n  }\n};\n\nconst PARTSTAT_MAP: Record<RsvpStatus, \"ACCEPTED\" | \"DECLINED\" | \"TENTATIVE\"> = {\n  accepted: \"ACCEPTED\",\n  declined: \"DECLINED\",\n  tentative: \"TENTATIVE\",\n};\n\nconst rsvpCalDAVEvent = async (\n  credentials: CalDAVCredentials,\n  sourceEventUid: string,\n  status: RsvpStatus,\n  userEmail: string,\n): Promise<EventActionResult> => {\n  try {\n    const client = await getClient(credentials);\n    const existing = await fetchCalendarObject(client, credentials.calendarUrl, sourceEventUid);\n\n    if (!existing) {\n      return { success: false, error: \"Event not found on CalDAV server.\" };\n    }\n\n    const calendar = parseIcsString(existing.data);\n    const [event] = calendar.events ?? [];\n\n    if (!event) {\n      return { success: false, error: \"Could not parse event from CalDAV server.\" };\n    }\n\n    const partstat = PARTSTAT_MAP[status];\n    const normalizedEmail = userEmail.toLowerCase();\n    const attendees = event.attendees ?? [];\n    let foundAttendee = false;\n\n    const updatedAttendees = attendees.map((attendee) => {\n      if (attendee.email.toLowerCase() === normalizedEmail) {\n        foundAttendee = true;\n        return { ...attendee, partstat };\n      }\n      return attendee;\n    });\n\n    if (!foundAttendee) {\n      updatedAttendees.push({\n        email: userEmail,\n        partstat,\n      });\n    }\n\n    const updatedEvent: IcsEvent = {\n      ...event,\n      attendees: updatedAttendees,\n      stamp: { date: new Date() },\n    };\n\n    const updatedCalendar = buildIcsCalendar([updatedEvent]);\n    const icsString = generateIcsCalendar(updatedCalendar);\n\n    await client.updateCalendarObject({\n      calendarObject: {\n        url: existing.url,\n        data: icsString,\n      },\n    });\n\n    return { success: true };\n  } catch (error) {\n    return { success: false, error: extractErrorMessage(error, \"CalDAV RSVP failed.\") };\n  }\n};\n\nconst getPendingCalDAVInvites = async (\n  credentials: CalDAVCredentials,\n  from: string,\n  to: string,\n  userEmail: string,\n): Promise<{\n  sourceEventUid: string;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  startTime: string;\n  endTime: string;\n  isAllDay: boolean;\n  organizer: string | null;\n}[]> => {\n  try {\n    const client = await getClient(credentials);\n    const objects = await client.fetchCalendarObjects({\n      calendar: { url: credentials.calendarUrl },\n      timeRange: { start: from, end: to },\n    });\n\n    const pendingEvents: {\n      sourceEventUid: string;\n      title: string | null;\n      description: string | null;\n      location: string | null;\n      startTime: string;\n      endTime: string;\n      isAllDay: boolean;\n      organizer: string | null;\n    }[] = [];\n\n    const normalizedEmail = userEmail.toLowerCase();\n\n    for (const object of objects) {\n      if (!object.data) {\n        continue;\n      }\n\n      const calendar = parseIcsString(object.data);\n      const [event] = calendar.events ?? [];\n\n      if (!event) {\n        continue;\n      }\n\n      const attendees = event.attendees ?? [];\n      const userAttendee = attendees.find(\n        (attendee) => attendee.email.toLowerCase() === normalizedEmail,\n      );\n\n      if (!userAttendee) {\n        continue;\n      }\n\n      if (userAttendee.partstat !== \"NEEDS-ACTION\") {\n        continue;\n      }\n\n      const isAllDay = event.start?.type === \"DATE\";\n      const organizerEmail = event.organizer?.email ?? null;\n      const endTime = event.end?.date?.toISOString() ?? event.start.date.toISOString();\n\n      pendingEvents.push({\n        sourceEventUid: event.uid,\n        title: event.summary ?? null,\n        description: event.description ?? null,\n        location: event.location ?? null,\n        startTime: event.start.date.toISOString(),\n        endTime,\n        isAllDay,\n        organizer: organizerEmail,\n      });\n    }\n\n    return pendingEvents;\n  } catch {\n    return [];\n  }\n};\n\nexport { createCalDAVEvent, updateCalDAVEvent, deleteCalDAVEvent, rsvpCalDAVEvent, getPendingCalDAVInvites };\n"
  },
  {
    "path": "services/api/src/mutations/providers/google.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { googleApiErrorSchema, googleEventSchema, googleEventWithAttendeesListSchema } from \"@keeper.sh/data-schemas\";\nimport type { GoogleAttendee, GoogleEvent, GoogleEventWithAttendees } from \"@keeper.sh/data-schemas\";\nimport type { EventInput, EventUpdateInput, EventActionResult, RsvpStatus } from \"@/types\";\n\nconst GOOGLE_CALENDAR_API = \"https://www.googleapis.com/calendar/v3/\";\n\nconst buildHeaders = (accessToken: string): Record<string, string> => ({\n  \"Authorization\": `Bearer ${accessToken}`,\n  \"Content-Type\": \"application/json\",\n});\n\nconst getCalendarId = (externalCalendarId: string | null): string =>\n  externalCalendarId ?? \"primary\";\n\nconst handleErrorResponse = async (response: Response): Promise<string> => {\n  const body = await response.json();\n  const { error } = googleApiErrorSchema.assert(body);\n  return error?.message ?? response.statusText;\n};\n\ninterface GoogleEventResult {\n  sourceEventUid: string;\n}\n\nconst createGoogleEvent = async (\n  accessToken: string,\n  externalCalendarId: string | null,\n  input: EventInput,\n): Promise<EventActionResult & Partial<GoogleEventResult>> => {\n  const calendarId = getCalendarId(externalCalendarId);\n  const url = new URL(`calendars/${encodeURIComponent(calendarId)}/events`, GOOGLE_CALENDAR_API);\n\n  const isAllDay = input.isAllDay ?? false;\n  const resource: GoogleEvent = {\n    summary: input.title,\n    description: input.description,\n    location: input.location,\n  };\n\n  if (isAllDay) {\n    resource.start = { date: input.startTime.slice(0, 10) };\n    resource.end = { date: input.endTime.slice(0, 10) };\n  } else {\n    resource.start = { dateTime: input.startTime };\n    resource.end = { dateTime: input.endTime };\n  }\n\n  if (input.availability === \"free\") {\n    resource.transparency = \"transparent\";\n  }\n\n  const response = await fetch(url, {\n    body: JSON.stringify(resource),\n    headers: buildHeaders(accessToken),\n    method: \"POST\",\n  });\n\n  if (!response.ok) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  const created = googleEventSchema.assert(await response.json());\n  return { success: true, sourceEventUid: created.iCalUID };\n};\n\nconst findGoogleEventByUid = async (\n  accessToken: string,\n  externalCalendarId: string | null,\n  sourceEventUid: string,\n): Promise<GoogleEventWithAttendees | null> => {\n  const calendarId = getCalendarId(externalCalendarId);\n  const url = new URL(`calendars/${encodeURIComponent(calendarId)}/events`, GOOGLE_CALENDAR_API);\n  url.searchParams.set(\"iCalUID\", sourceEventUid);\n\n  const response = await fetch(url, {\n    headers: buildHeaders(accessToken),\n    method: \"GET\",\n  });\n\n  if (!response.ok) {\n    return null;\n  }\n\n  const body = googleEventWithAttendeesListSchema.assert(await response.json());\n  const [item] = body.items ?? [];\n  return item ?? null;\n};\n\nconst buildGoogleDateField = (\n  dateTime: string,\n  isAllDay: boolean,\n): { date: string } | { dateTime: string } => {\n  if (isAllDay) {\n    return { date: dateTime.slice(0, 10) };\n  }\n\n  return { dateTime };\n};\n\nconst resolveGoogleTransparency = (availability: string): string => {\n  if (availability === \"free\") {\n    return \"transparent\";\n  }\n\n  return \"opaque\";\n};\n\nconst updateGoogleEvent = async (\n  accessToken: string,\n  externalCalendarId: string | null,\n  sourceEventUid: string,\n  updates: EventUpdateInput,\n): Promise<EventActionResult> => {\n  const existing = await findGoogleEventByUid(accessToken, externalCalendarId, sourceEventUid);\n\n  if (!existing?.id) {\n    return { success: false, error: \"Event not found on Google Calendar.\" };\n  }\n\n  const calendarId = getCalendarId(externalCalendarId);\n  const url = new URL(\n    `calendars/${encodeURIComponent(calendarId)}/events/${encodeURIComponent(existing.id)}`,\n    GOOGLE_CALENDAR_API,\n  );\n\n  const patch: Record<string, unknown> = {};\n  if (\"title\" in updates) {\n    patch.summary = updates.title;\n  }\n  if (\"description\" in updates) {\n    patch.description = updates.description;\n  }\n  if (\"location\" in updates) {\n    patch.location = updates.location;\n  }\n\n  const hasExistingDateStart = existing.start && \"date\" in existing.start;\n  const isAllDay = updates.isAllDay ?? (hasExistingDateStart === true);\n  if (\"startTime\" in updates && updates.startTime) {\n    patch.start = buildGoogleDateField(updates.startTime, isAllDay);\n  }\n  if (\"endTime\" in updates && updates.endTime) {\n    patch.end = buildGoogleDateField(updates.endTime, isAllDay);\n  }\n  if (\"availability\" in updates && updates.availability) {\n    patch.transparency = resolveGoogleTransparency(updates.availability);\n  }\n\n  const response = await fetch(url, {\n    body: JSON.stringify(patch),\n    headers: buildHeaders(accessToken),\n    method: \"PATCH\",\n  });\n\n  if (!response.ok) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  await response.json();\n  return { success: true };\n};\n\nconst deleteGoogleEvent = async (\n  accessToken: string,\n  externalCalendarId: string | null,\n  sourceEventUid: string,\n): Promise<EventActionResult> => {\n  const existing = await findGoogleEventByUid(accessToken, externalCalendarId, sourceEventUid);\n\n  if (!existing?.id) {\n    return { success: true };\n  }\n\n  const calendarId = getCalendarId(externalCalendarId);\n  const url = new URL(\n    `calendars/${encodeURIComponent(calendarId)}/events/${encodeURIComponent(existing.id)}`,\n    GOOGLE_CALENDAR_API,\n  );\n\n  const response = await fetch(url, {\n    headers: buildHeaders(accessToken),\n    method: \"DELETE\",\n  });\n\n  if (!response.ok && response.status !== HTTP_STATUS.NOT_FOUND) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  await response.body?.cancel?.();\n  return { success: true };\n};\n\nconst rsvpGoogleEvent = async (\n  accessToken: string,\n  externalCalendarId: string | null,\n  sourceEventUid: string,\n  status: RsvpStatus,\n  userEmail: string,\n): Promise<EventActionResult> => {\n  const existing = await findGoogleEventByUid(accessToken, externalCalendarId, sourceEventUid);\n\n  if (!existing?.id) {\n    return { success: false, error: \"Event not found on Google Calendar.\" };\n  }\n\n  const calendarId = getCalendarId(externalCalendarId);\n  const url = new URL(\n    `calendars/${encodeURIComponent(calendarId)}/events/${encodeURIComponent(existing.id)}`,\n    GOOGLE_CALENDAR_API,\n  );\n\n  const attendees = existing.attendees ?? [];\n  const normalizedEmail = userEmail.toLowerCase();\n\n  const isMatchingAttendee = (attendee: GoogleAttendee): boolean => {\n    const attendeeEmail = (attendee.email ?? \"\").toLowerCase();\n    return attendeeEmail === normalizedEmail || attendee.self === true;\n  };\n\n  const hasMatch = attendees.some((attendee) => isMatchingAttendee(attendee));\n\n  const updatedAttendees = attendees.map((attendee) => {\n    if (isMatchingAttendee(attendee)) {\n      return { ...attendee, responseStatus: status };\n    }\n    return attendee;\n  });\n\n  if (!hasMatch) {\n    updatedAttendees.push({\n      email: userEmail,\n      responseStatus: status,\n      self: true,\n    });\n  }\n\n  const response = await fetch(url, {\n    body: JSON.stringify({ attendees: updatedAttendees }),\n    headers: buildHeaders(accessToken),\n    method: \"PATCH\",\n  });\n\n  if (!response.ok) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  await response.json();\n  return { success: true };\n};\n\ninterface PendingGoogleEvent {\n  sourceEventUid: string;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  startTime: string;\n  endTime: string;\n  isAllDay: boolean;\n  organizer: string | null;\n}\n\nconst parseGooglePendingEvent = (event: GoogleEventWithAttendees): PendingGoogleEvent | null => {\n  const selfAttendee = (event.attendees ?? []).find(\n    (attendee) => attendee.self === true,\n  );\n\n  if (!selfAttendee) {\n    return null;\n  }\n\n  if (selfAttendee.responseStatus !== \"needsAction\") {\n    return null;\n  }\n\n  if (!event.iCalUID) {\n    return null;\n  }\n\n  const startTime = event.start?.dateTime ?? event.start?.date;\n  const endTime = event.end?.dateTime ?? event.end?.date;\n\n  if (!startTime || !endTime) {\n    return null;\n  }\n\n  const isAllDay = Boolean(event.start && \"date\" in event.start);\n\n  return {\n    sourceEventUid: event.iCalUID,\n    title: event.summary ?? null,\n    description: event.description ?? null,\n    location: event.location ?? null,\n    startTime,\n    endTime,\n    isAllDay,\n    organizer: event.organizer?.email ?? null,\n  };\n};\n\nconst fetchGoogleEventsPage = async (\n  accessToken: string,\n  calendarId: string,\n  from: string,\n  to: string,\n  pageToken: string | null,\n): Promise<{ items: GoogleEventWithAttendees[]; nextPageToken: string | null }> => {\n  const url = new URL(`calendars/${encodeURIComponent(calendarId)}/events`, GOOGLE_CALENDAR_API);\n  url.searchParams.set(\"timeMin\", from);\n  url.searchParams.set(\"timeMax\", to);\n  url.searchParams.set(\"singleEvents\", \"true\");\n  url.searchParams.set(\"maxResults\", \"250\");\n  if (pageToken) {\n    url.searchParams.set(\"pageToken\", pageToken);\n  }\n\n  const response = await fetch(url, {\n    headers: buildHeaders(accessToken),\n    method: \"GET\",\n  });\n\n  if (!response.ok) {\n    return { items: [], nextPageToken: null };\n  }\n\n  const body = googleEventWithAttendeesListSchema.assert(await response.json());\n\n  return {\n    items: body.items ?? [],\n    nextPageToken: body.nextPageToken ?? null,\n  };\n};\n\nconst getPendingGoogleInvites = async (\n  accessToken: string,\n  externalCalendarId: string | null,\n  from: string,\n  to: string,\n): Promise<PendingGoogleEvent[]> => {\n  const calendarId = getCalendarId(externalCalendarId);\n  const pendingEvents: PendingGoogleEvent[] = [];\n\n  let pageToken: string | null = null;\n\n  do {\n    const page = await fetchGoogleEventsPage(accessToken, calendarId, from, to, pageToken);\n\n    for (const event of page.items) {\n      const parsed = parseGooglePendingEvent(event);\n      if (parsed) {\n        pendingEvents.push(parsed);\n      }\n    }\n\n    pageToken = page.nextPageToken;\n  } while (pageToken);\n\n  return pendingEvents;\n};\n\nexport { createGoogleEvent, updateGoogleEvent, deleteGoogleEvent, rsvpGoogleEvent, getPendingGoogleInvites };\n"
  },
  {
    "path": "services/api/src/mutations/providers/outlook.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { microsoftApiErrorSchema, outlookCalendarViewListSchema, outlookEventListSchema, outlookEventSchema } from \"@keeper.sh/data-schemas\";\nimport type { OutlookEvent } from \"@keeper.sh/data-schemas\";\nimport type { EventInput, EventUpdateInput, EventActionResult, RsvpStatus } from \"@/types\";\n\nconst MICROSOFT_GRAPH_API = \"https://graph.microsoft.com/v1.0\";\n\nconst buildHeaders = (accessToken: string): Record<string, string> => ({\n  \"Authorization\": `Bearer ${accessToken}`,\n  \"Content-Type\": \"application/json\",\n});\n\nconst handleErrorResponse = async (response: Response): Promise<string> => {\n  const body = await response.json();\n  const { error } = microsoftApiErrorSchema.assert(body);\n  return error?.message ?? response.statusText;\n};\n\ninterface OutlookEventResult {\n  sourceEventUid: string;\n}\n\nconst formatDateTime = (isoString: string, isAllDay: boolean): string => {\n  if (isAllDay) {\n    return isoString.replace(\"Z\", \"\");\n  }\n  return isoString;\n};\n\nconst resolveOutlookShowAs = (availability?: string | null): string => {\n  if (availability === \"free\") {\n    return \"free\";\n  }\n\n  return \"busy\";\n};\n\nconst createOutlookEvent = async (\n  accessToken: string,\n  input: EventInput,\n): Promise<EventActionResult & Partial<OutlookEventResult>> => {\n  const url = new URL(`${MICROSOFT_GRAPH_API}/me/calendar/events`);\n  const isAllDay = input.isAllDay ?? false;\n\n  const resource: Record<string, unknown> = {\n    subject: input.title,\n    start: {\n      dateTime: formatDateTime(input.startTime, isAllDay),\n      timeZone: \"UTC\",\n    },\n    end: {\n      dateTime: formatDateTime(input.endTime, isAllDay),\n      timeZone: \"UTC\",\n    },\n    isAllDay,\n    showAs: resolveOutlookShowAs(input.availability),\n  };\n\n  if (input.description) {\n    resource.body = { content: input.description, contentType: \"text\" };\n  }\n\n  if (input.location) {\n    resource.location = { displayName: input.location };\n  }\n\n  const response = await fetch(url, {\n    body: JSON.stringify(resource),\n    headers: buildHeaders(accessToken),\n    method: \"POST\",\n  });\n\n  if (!response.ok) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  const created = outlookEventSchema.assert(await response.json());\n  return { success: true, sourceEventUid: created.iCalUId ?? created.id };\n};\n\nconst findOutlookEventByUid = async (\n  accessToken: string,\n  sourceEventUid: string,\n): Promise<OutlookEvent | null> => {\n  const url = new URL(`${MICROSOFT_GRAPH_API}/me/events`);\n  url.searchParams.set(\"$filter\", `iCalUId eq '${sourceEventUid}'`);\n  url.searchParams.set(\"$top\", \"1\");\n\n  const response = await fetch(url, {\n    headers: buildHeaders(accessToken),\n    method: \"GET\",\n  });\n\n  if (!response.ok) {\n    return null;\n  }\n\n  const body = outlookEventListSchema.assert(await response.json());\n  const [item] = body.value ?? [];\n  return item ?? null;\n};\n\nconst updateOutlookEvent = async (\n  accessToken: string,\n  sourceEventUid: string,\n  updates: EventUpdateInput,\n): Promise<EventActionResult> => {\n  const existing = await findOutlookEventByUid(accessToken, sourceEventUid);\n\n  if (!existing?.id) {\n    return { success: false, error: \"Event not found on Outlook.\" };\n  }\n\n  const url = new URL(`${MICROSOFT_GRAPH_API}/me/events/${existing.id}`);\n\n  const patch: Record<string, unknown> = {};\n  if (\"title\" in updates) {\n    patch.subject = updates.title;\n  }\n  if (\"description\" in updates) {\n    patch.body = { content: updates.description, contentType: \"text\" };\n  }\n  if (\"location\" in updates) {\n    patch.location = { displayName: updates.location };\n  }\n\n  const isAllDay = updates.isAllDay ?? existing.isAllDay ?? false;\n  if (\"startTime\" in updates && updates.startTime) {\n    patch.start = {\n      dateTime: formatDateTime(updates.startTime, isAllDay),\n      timeZone: \"UTC\",\n    };\n  }\n  if (\"endTime\" in updates && updates.endTime) {\n    patch.end = {\n      dateTime: formatDateTime(updates.endTime, isAllDay),\n      timeZone: \"UTC\",\n    };\n  }\n  if (\"isAllDay\" in updates) {\n    patch.isAllDay = updates.isAllDay;\n  }\n  if (\"availability\" in updates) {\n    patch.showAs = resolveOutlookShowAs(updates.availability);\n  }\n\n  const response = await fetch(url, {\n    body: JSON.stringify(patch),\n    headers: buildHeaders(accessToken),\n    method: \"PATCH\",\n  });\n\n  if (!response.ok) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  await response.json();\n  return { success: true };\n};\n\nconst deleteOutlookEvent = async (\n  accessToken: string,\n  sourceEventUid: string,\n): Promise<EventActionResult> => {\n  const existing = await findOutlookEventByUid(accessToken, sourceEventUid);\n\n  if (!existing?.id) {\n    return { success: true };\n  }\n\n  const url = new URL(`${MICROSOFT_GRAPH_API}/me/events/${existing.id}`);\n\n  const response = await fetch(url, {\n    headers: buildHeaders(accessToken),\n    method: \"DELETE\",\n  });\n\n  if (!response.ok && response.status !== HTTP_STATUS.NOT_FOUND) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  await response.body?.cancel?.();\n  return { success: true };\n};\n\nconst RSVP_ACTION_MAP: Record<RsvpStatus, string> = {\n  accepted: \"accept\",\n  declined: \"decline\",\n  tentative: \"tentativelyAccept\",\n};\n\nconst rsvpOutlookEvent = async (\n  accessToken: string,\n  sourceEventUid: string,\n  status: RsvpStatus,\n): Promise<EventActionResult> => {\n  const existing = await findOutlookEventByUid(accessToken, sourceEventUid);\n\n  if (!existing?.id) {\n    return { success: false, error: \"Event not found on Outlook.\" };\n  }\n\n  const action = RSVP_ACTION_MAP[status];\n  const url = new URL(`${MICROSOFT_GRAPH_API}/me/events/${existing.id}/${action}`);\n\n  const response = await fetch(url, {\n    body: JSON.stringify({ sendResponse: true }),\n    headers: buildHeaders(accessToken),\n    method: \"POST\",\n  });\n\n  if (!response.ok) {\n    const errorMessage = await handleErrorResponse(response);\n    return { success: false, error: errorMessage };\n  }\n\n  await response.body?.cancel?.();\n  return { success: true };\n};\n\nconst buildCalendarViewUrl = (from: string, to: string, nextLink: string | null): URL => {\n  if (nextLink) {\n    return new URL(nextLink);\n  }\n\n  const url = new URL(`${MICROSOFT_GRAPH_API}/me/calendarview`);\n  url.searchParams.set(\"startdatetime\", from);\n  url.searchParams.set(\"enddatetime\", to);\n  url.searchParams.set(\"$top\", \"100\");\n  url.searchParams.set(\"$select\", \"id,iCalUId,subject,bodyPreview,location,start,end,isAllDay,responseStatus,organizer\");\n  url.searchParams.set(\"$filter\", \"responseStatus/response eq 'notResponded'\");\n  return url;\n};\n\nconst getPendingOutlookInvites = async (\n  accessToken: string,\n  from: string,\n  to: string,\n): Promise<{\n  sourceEventUid: string;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  startTime: string;\n  endTime: string;\n  isAllDay: boolean;\n  organizer: string | null;\n}[]> => {\n  const pendingEvents: {\n    sourceEventUid: string;\n    title: string | null;\n    description: string | null;\n    location: string | null;\n    startTime: string;\n    endTime: string;\n    isAllDay: boolean;\n    organizer: string | null;\n  }[] = [];\n\n  let nextLink: string | null = null;\n\n  do {\n    const url = buildCalendarViewUrl(from, to, nextLink);\n\n    const response = await fetch(url, {\n      headers: buildHeaders(accessToken),\n      method: \"GET\",\n    });\n\n    if (!response.ok) {\n      break;\n    }\n\n    const body = outlookCalendarViewListSchema.assert(await response.json());\n\n    for (const event of body.value ?? []) {\n      if (!event.iCalUId) {\n        continue;\n      }\n\n      if (!event.start?.dateTime || !event.end?.dateTime) {\n        continue;\n      }\n\n      pendingEvents.push({\n        sourceEventUid: event.iCalUId,\n        title: event.subject ?? null,\n        description: event.bodyPreview ?? null,\n        location: event.location?.displayName ?? null,\n        startTime: event.start.dateTime,\n        endTime: event.end.dateTime,\n        isAllDay: event.isAllDay ?? false,\n        organizer: event.organizer?.emailAddress?.address ?? null,\n      });\n    }\n\n    nextLink = body[\"@odata.nextLink\"] ?? null;\n  } while (nextLink);\n\n  return pendingEvents;\n};\n\nexport { createOutlookEvent, updateOutlookEvent, deleteOutlookEvent, rsvpOutlookEvent, getPendingOutlookInvites };\n"
  },
  {
    "path": "services/api/src/mutations/resolve-credentials.ts",
    "content": "import {\n  calendarAccountsTable,\n  caldavCredentialsTable,\n  calendarsTable,\n  eventStatesTable,\n  oauthCredentialsTable,\n  userEventsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, eq } from \"drizzle-orm\";\nimport type { KeeperDatabase } from \"@/types\";\nimport type { ProviderCredentials } from \"@/types\";\n\nconst credentialColumns = {\n  calendarId: calendarsTable.id,\n  accountId: calendarAccountsTable.id,\n  externalCalendarId: calendarsTable.externalCalendarId,\n  calendarUrl: calendarsTable.calendarUrl,\n  provider: calendarAccountsTable.provider,\n  email: calendarAccountsTable.email,\n  needsReauthentication: calendarAccountsTable.needsReauthentication,\n  oauthCredentialId: oauthCredentialsTable.id,\n  oauthAccessToken: oauthCredentialsTable.accessToken,\n  oauthRefreshToken: oauthCredentialsTable.refreshToken,\n  oauthExpiresAt: oauthCredentialsTable.expiresAt,\n  caldavAuthMethod: caldavCredentialsTable.authMethod,\n  caldavServerUrl: caldavCredentialsTable.serverUrl,\n  caldavUsername: caldavCredentialsTable.username,\n  caldavEncryptedPassword: caldavCredentialsTable.encryptedPassword,\n};\n\ninterface CredentialRow {\n  calendarId: string;\n  accountId: string;\n  externalCalendarId: string | null;\n  calendarUrl: string | null;\n  provider: string;\n  email: string | null;\n  needsReauthentication: boolean;\n  oauthCredentialId: string | null;\n  oauthAccessToken: string | null;\n  oauthRefreshToken: string | null;\n  oauthExpiresAt: Date | null;\n  caldavAuthMethod: string | null;\n  caldavServerUrl: string | null;\n  caldavUsername: string | null;\n  caldavEncryptedPassword: string | null;\n}\n\nconst rowToCredentials = (row: CredentialRow): ProviderCredentials => {\n  const credentials: ProviderCredentials = {\n    provider: row.provider,\n    calendarId: row.calendarId,\n    accountId: row.accountId,\n    externalCalendarId: row.externalCalendarId,\n    calendarUrl: row.calendarUrl,\n    email: row.email,\n  };\n\n  if (row.oauthCredentialId && row.oauthAccessToken && row.oauthRefreshToken && row.oauthExpiresAt) {\n    credentials.oauth = {\n      credentialId: row.oauthCredentialId,\n      accessToken: row.oauthAccessToken,\n      refreshToken: row.oauthRefreshToken,\n      expiresAt: row.oauthExpiresAt,\n    };\n  }\n\n  if (row.caldavServerUrl && row.caldavUsername && row.caldavEncryptedPassword) {\n    credentials.caldav = {\n      authMethod: row.caldavAuthMethod ?? \"basic\",\n      serverUrl: row.caldavServerUrl,\n      username: row.caldavUsername,\n      encryptedPassword: row.caldavEncryptedPassword,\n    };\n  }\n\n  return credentials;\n};\n\nconst resolveCredentialsByCalendarId = async (\n  database: KeeperDatabase,\n  userId: string,\n  calendarId: string,\n): Promise<ProviderCredentials | null> => {\n  const [result] = await database\n    .select(credentialColumns)\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .leftJoin(oauthCredentialsTable, eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id))\n    .leftJoin(caldavCredentialsTable, eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id))\n    .where(\n      and(\n        eq(calendarsTable.id, calendarId),\n        eq(calendarsTable.userId, userId),\n      ),\n    )\n    .limit(1);\n\n  if (!result) {\n    return null;\n  }\n\n  if (result.needsReauthentication) {\n    return null;\n  }\n\n  return rowToCredentials(result);\n};\n\nconst resolveCredentialsByUserEventId = async (\n  database: KeeperDatabase,\n  userId: string,\n  eventId: string,\n): Promise<{ credentials: ProviderCredentials; sourceEventUid: string | null } | null> => {\n  const [event] = await database\n    .select({\n      calendarId: userEventsTable.calendarId,\n      sourceEventUid: userEventsTable.sourceEventUid,\n    })\n    .from(userEventsTable)\n    .where(\n      and(\n        eq(userEventsTable.id, eventId),\n        eq(userEventsTable.userId, userId),\n      ),\n    )\n    .limit(1);\n\n  if (!event) {\n    return null;\n  }\n\n  const credentials = await resolveCredentialsByCalendarId(database, userId, event.calendarId);\n\n  if (!credentials) {\n    return null;\n  }\n\n  return { credentials, sourceEventUid: event.sourceEventUid };\n};\n\ntype EventSource = \"user\" | \"synced\";\n\ninterface ResolvedEventCredentials {\n  credentials: ProviderCredentials;\n  sourceEventUid: string | null;\n  eventSource: EventSource;\n}\n\nconst resolveCredentialsByEventId = async (\n  database: KeeperDatabase,\n  userId: string,\n  eventId: string,\n): Promise<ResolvedEventCredentials | null> => {\n  const userResult = await resolveCredentialsByUserEventId(database, userId, eventId);\n\n  if (userResult) {\n    return { ...userResult, eventSource: \"user\" };\n  }\n\n  const [syncedEvent] = await database\n    .select({\n      calendarId: eventStatesTable.calendarId,\n      sourceEventUid: eventStatesTable.sourceEventUid,\n    })\n    .from(eventStatesTable)\n    .innerJoin(calendarsTable, eq(eventStatesTable.calendarId, calendarsTable.id))\n    .where(\n      and(\n        eq(eventStatesTable.id, eventId),\n        eq(calendarsTable.userId, userId),\n      ),\n    )\n    .limit(1);\n\n  if (!syncedEvent) {\n    return null;\n  }\n\n  const credentials = await resolveCredentialsByCalendarId(database, userId, syncedEvent.calendarId);\n\n  if (!credentials) {\n    return null;\n  }\n\n  return {\n    credentials,\n    sourceEventUid: syncedEvent.sourceEventUid,\n    eventSource: \"synced\",\n  };\n};\n\nconst resolveAllSourceCredentials = async (\n  database: KeeperDatabase,\n  userId: string,\n): Promise<ProviderCredentials[]> => {\n  const results = await database\n    .select(credentialColumns)\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .leftJoin(oauthCredentialsTable, eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id))\n    .leftJoin(caldavCredentialsTable, eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id))\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        arrayContains(calendarsTable.capabilities, [\"pull\"]),\n        eq(calendarAccountsTable.needsReauthentication, false),\n      ),\n    );\n\n  return results.map((row) => rowToCredentials(row));\n};\n\nexport { resolveCredentialsByCalendarId, resolveCredentialsByUserEventId, resolveCredentialsByEventId, resolveAllSourceCredentials };\nexport type { EventSource, ResolvedEventCredentials };\n"
  },
  {
    "path": "services/api/src/provider-display.ts",
    "content": "import { getProvider } from \"@keeper.sh/calendar\";\n\ninterface AccountDisplayInput {\n  displayName: string | null;\n  email: string | null;\n  accountIdentifier: string | null;\n  provider: string;\n}\n\nconst toNonEmptyValue = (value: string | null | undefined): string | null => {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  const normalizedValue = value.trim();\n  if (normalizedValue.length > 0) {\n    return normalizedValue;\n  }\n\n  return null;\n};\n\nconst resolveProvider = (providerId: string) => {\n  const provider = getProvider(providerId);\n  if (!provider) {\n    throw new Error(`Unknown provider: ${providerId}`);\n  }\n  return provider;\n};\n\nconst getProviderName = (providerId: string): string => {\n  const provider = resolveProvider(providerId);\n  const name = toNonEmptyValue(provider.name);\n  if (!name) {\n    throw new Error(`Provider \"${providerId}\" has no name configured`);\n  }\n  return name;\n};\n\nconst getProviderIcon = (providerId: string): string | null => {\n  const provider = resolveProvider(providerId);\n  return toNonEmptyValue(provider.icon);\n};\n\nconst getAccountIdentifier = (input: AccountDisplayInput): string => {\n  const email = toNonEmptyValue(input.email);\n  if (email) {\n    return email;\n  }\n\n  const accountId = toNonEmptyValue(input.accountIdentifier);\n  if (accountId) {\n    return accountId;\n  }\n\n  const displayName = toNonEmptyValue(input.displayName);\n  if (displayName) {\n    return displayName;\n  }\n\n  throw new Error(`No identifier found for account with provider \"${input.provider}\"`);\n};\n\nconst getAccountLabel = (input: AccountDisplayInput): string =>\n  getAccountIdentifier(input);\n\nconst withProviderMetadata = <DisplayValue extends { provider: string }>(\n  value: DisplayValue,\n): DisplayValue & {\n  providerName: string;\n  providerIcon: string | null;\n} => ({\n  ...value,\n  providerName: getProviderName(value.provider),\n  providerIcon: getProviderIcon(value.provider),\n});\n\nconst withAccountDisplay = <DisplayValue extends AccountDisplayInput>(\n  value: DisplayValue,\n): DisplayValue & {\n  accountLabel: string;\n  accountIdentifier: string;\n  providerName: string;\n  providerIcon: string | null;\n} => ({\n  ...withProviderMetadata(value),\n  accountLabel: getAccountLabel(value),\n  accountIdentifier: getAccountIdentifier(value),\n});\n\nexport { withAccountDisplay, withProviderMetadata };\n"
  },
  {
    "path": "services/api/src/queries/get-event-count.ts",
    "content": "import {\n  calendarsTable,\n  eventStatesTable,\n  userEventsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, count, eq, gte, inArray, lte } from \"drizzle-orm\";\nimport type { SQL } from \"drizzle-orm\";\nimport type { KeeperDatabase } from \"@/types\";\n\nconst EMPTY_RESULT_COUNT = 0;\n\ninterface EventCountOptions {\n  from?: Date;\n  to?: Date;\n}\n\nconst getEventCount = async (\n  database: KeeperDatabase,\n  userId: string,\n  options?: EventCountOptions,\n): Promise<number> => {\n  const sources = await database\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        arrayContains(calendarsTable.capabilities, [\"pull\"]),\n      ),\n    );\n\n  if (sources.length === EMPTY_RESULT_COUNT) {\n    return 0;\n  }\n\n  const calendarIds = sources.map((source) => source.id);\n\n  const syncedConditions: SQL[] = [inArray(eventStatesTable.calendarId, calendarIds)];\n  const userConditions: SQL[] = [\n    inArray(userEventsTable.calendarId, calendarIds),\n    eq(userEventsTable.userId, userId),\n  ];\n\n  if (options?.from) {\n    syncedConditions.push(gte(eventStatesTable.startTime, options.from));\n    userConditions.push(gte(userEventsTable.startTime, options.from));\n  }\n\n  if (options?.to) {\n    syncedConditions.push(lte(eventStatesTable.startTime, options.to));\n    userConditions.push(lte(userEventsTable.startTime, options.to));\n  }\n\n  const [syncedResult] = await database\n    .select({ count: count() })\n    .from(eventStatesTable)\n    .where(and(...syncedConditions));\n\n  const [userResult] = await database\n    .select({ count: count() })\n    .from(userEventsTable)\n    .where(and(...userConditions));\n\n  const syncedCount = syncedResult?.count ?? 0;\n  const userCount = userResult?.count ?? 0;\n\n  return syncedCount + userCount;\n};\n\nexport { getEventCount };\nexport type { EventCountOptions };\n"
  },
  {
    "path": "services/api/src/queries/get-event.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n  eventStatesTable,\n  userEventsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport type { KeeperDatabase, KeeperEvent } from \"@/types\";\n\nconst toKeeperEvent = (result: {\n  id: string;\n  calendarId: string;\n  startTime: Date;\n  endTime: Date;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  calendarName: string;\n  calendarProvider: string;\n  calendarUrl: string | null;\n}): KeeperEvent => ({\n  id: result.id,\n  calendarId: result.calendarId,\n  calendarName: result.calendarName,\n  calendarProvider: result.calendarProvider,\n  calendarUrl: result.calendarUrl,\n  description: result.description,\n  endTime: result.endTime.toISOString(),\n  location: result.location,\n  startTime: result.startTime.toISOString(),\n  title: result.title,\n});\n\nconst getEvent = async (\n  database: KeeperDatabase,\n  userId: string,\n  eventId: string,\n): Promise<KeeperEvent | null> => {\n  const [userEvent] = await database\n    .select({\n      id: userEventsTable.id,\n      calendarId: userEventsTable.calendarId,\n      startTime: userEventsTable.startTime,\n      endTime: userEventsTable.endTime,\n      title: userEventsTable.title,\n      description: userEventsTable.description,\n      location: userEventsTable.location,\n      calendarName: calendarsTable.name,\n      calendarProvider: calendarAccountsTable.provider,\n      calendarUrl: calendarsTable.url,\n    })\n    .from(userEventsTable)\n    .innerJoin(calendarsTable, eq(userEventsTable.calendarId, calendarsTable.id))\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(\n      and(\n        eq(userEventsTable.id, eventId),\n        eq(userEventsTable.userId, userId),\n      ),\n    )\n    .limit(1);\n\n  if (userEvent) {\n    return toKeeperEvent(userEvent);\n  }\n\n  const [syncedEvent] = await database\n    .select({\n      id: eventStatesTable.id,\n      calendarId: eventStatesTable.calendarId,\n      startTime: eventStatesTable.startTime,\n      endTime: eventStatesTable.endTime,\n      title: eventStatesTable.title,\n      description: eventStatesTable.description,\n      location: eventStatesTable.location,\n      calendarName: calendarsTable.name,\n      calendarProvider: calendarAccountsTable.provider,\n      calendarUrl: calendarsTable.url,\n    })\n    .from(eventStatesTable)\n    .innerJoin(calendarsTable, eq(eventStatesTable.calendarId, calendarsTable.id))\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(\n      and(\n        eq(eventStatesTable.id, eventId),\n        eq(calendarsTable.userId, userId),\n      ),\n    )\n    .limit(1);\n\n  if (syncedEvent) {\n    return toKeeperEvent(syncedEvent);\n  }\n\n  return null;\n};\n\nexport { getEvent };\n"
  },
  {
    "path": "services/api/src/queries/get-events-in-range.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n  eventStatesTable,\n  userEventsTable,\n} from \"@keeper.sh/database/schema\";\nimport { normalizeDateRange } from \"@/utils/date-range\";\nimport { and, arrayContains, asc, eq, gte, inArray, lte } from \"drizzle-orm\";\nimport type { SQL } from \"drizzle-orm\";\nimport type { KeeperDatabase, KeeperEvent, KeeperEventFilters, KeeperEventRangeInput } from \"@/types\";\n\nconst EMPTY_RESULT_COUNT = 0;\n\nconst toRequiredDate = (value: Date | string, label: \"from\" | \"to\"): Date => {\n  const parsedDate = new Date(value);\n\n  if (Number.isNaN(parsedDate.getTime())) {\n    throw new TypeError(`Invalid ${label} date`);\n  }\n\n  return parsedDate;\n};\n\nconst normalizeEventRange = (\n  range: KeeperEventRangeInput,\n): {\n  start: Date;\n  end: Date;\n} => normalizeDateRange(\n  toRequiredDate(range.from, \"from\"),\n  toRequiredDate(range.to, \"to\"),\n);\n\ninterface SourceInfo {\n  name: string;\n  provider: string;\n  url: string | null;\n  userId: string;\n}\n\nconst getSourcesForUser = async (\n  database: KeeperDatabase,\n  userId: string,\n  filters?: KeeperEventFilters,\n): Promise<{ calendarIds: string[]; sourceMap: Map<string, SourceInfo> }> => {\n  const sourceConditions: SQL[] = [\n    eq(calendarsTable.userId, userId),\n    arrayContains(calendarsTable.capabilities, [\"pull\"]),\n  ];\n\n  if (filters?.calendarId && filters.calendarId.length > 0) {\n    sourceConditions.push(inArray(calendarsTable.id, filters.calendarId));\n  }\n\n  const sources = await database\n    .select({\n      id: calendarsTable.id,\n      name: calendarsTable.name,\n      provider: calendarAccountsTable.provider,\n      url: calendarsTable.url,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(and(...sourceConditions));\n\n  const calendarIds = sources.map((source) => source.id);\n  const sourceMap = new Map(\n    sources.map((source) => [\n      source.id,\n      { name: source.name, provider: source.provider, url: source.url, userId: source.userId },\n    ]),\n  );\n\n  return { calendarIds, sourceMap };\n};\n\nconst getEventsInRange = async (\n  database: KeeperDatabase,\n  userId: string,\n  range: KeeperEventRangeInput,\n  filters?: KeeperEventFilters,\n): Promise<KeeperEvent[]> => {\n  const { start, end } = normalizeEventRange(range);\n  const { calendarIds, sourceMap } = await getSourcesForUser(database, userId, filters);\n\n  if (calendarIds.length === EMPTY_RESULT_COUNT) {\n    return [];\n  }\n\n  const syncedConditions: SQL[] = [\n    inArray(eventStatesTable.calendarId, calendarIds),\n    gte(eventStatesTable.startTime, start),\n    lte(eventStatesTable.startTime, end),\n  ];\n\n  if (filters?.availability && filters.availability.length > 0) {\n    syncedConditions.push(inArray(eventStatesTable.availability, filters.availability));\n  }\n\n  if (filters && \"isAllDay\" in filters && typeof filters.isAllDay === \"boolean\") {\n    syncedConditions.push(eq(eventStatesTable.isAllDay, filters.isAllDay));\n  }\n\n  const syncedEvents = await database\n    .select({\n      calendarId: eventStatesTable.calendarId,\n      description: eventStatesTable.description,\n      endTime: eventStatesTable.endTime,\n      id: eventStatesTable.id,\n      location: eventStatesTable.location,\n      startTime: eventStatesTable.startTime,\n      title: eventStatesTable.title,\n    })\n    .from(eventStatesTable)\n    .where(and(...syncedConditions))\n    .orderBy(asc(eventStatesTable.startTime));\n\n  const userConditions: SQL[] = [\n    inArray(userEventsTable.calendarId, calendarIds),\n    eq(userEventsTable.userId, userId),\n    gte(userEventsTable.startTime, start),\n    lte(userEventsTable.startTime, end),\n  ];\n\n  if (filters?.availability && filters.availability.length > 0) {\n    userConditions.push(inArray(userEventsTable.availability, filters.availability));\n  }\n\n  if (filters && \"isAllDay\" in filters && typeof filters.isAllDay === \"boolean\") {\n    userConditions.push(eq(userEventsTable.isAllDay, filters.isAllDay));\n  }\n\n  const userEvents = await database\n    .select({\n      calendarId: userEventsTable.calendarId,\n      description: userEventsTable.description,\n      endTime: userEventsTable.endTime,\n      id: userEventsTable.id,\n      location: userEventsTable.location,\n      startTime: userEventsTable.startTime,\n      title: userEventsTable.title,\n    })\n    .from(userEventsTable)\n    .where(and(...userConditions))\n    .orderBy(asc(userEventsTable.startTime));\n\n  const allEvents = [...syncedEvents, ...userEvents];\n  allEvents.sort((left, right) => left.startTime.getTime() - right.startTime.getTime());\n\n  return allEvents.map((event) => {\n    const source = sourceMap.get(event.calendarId);\n\n    if (!source) {\n      throw new Error(`No source calendar found for event calendar ID: ${event.calendarId}`);\n    }\n\n    return {\n      calendarId: event.calendarId,\n      calendarName: source.name,\n      calendarProvider: source.provider,\n      calendarUrl: source.url,\n      description: event.description,\n      endTime: event.endTime.toISOString(),\n      id: event.id,\n      location: event.location,\n      startTime: event.startTime.toISOString(),\n      title: event.title,\n    };\n  });\n};\n\nexport { getEventsInRange, normalizeEventRange };\n"
  },
  {
    "path": "services/api/src/queries/get-sync-statuses.ts",
    "content": "import {\n  calendarsTable,\n  sourceDestinationMappingsTable,\n  syncStatusTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport type { KeeperDatabase, KeeperSyncStatus } from \"@/types\";\n\nconst toIsoString = (value: Date | null | undefined): string | null => {\n  if (!value) {\n    return null;\n  }\n\n  return value.toISOString();\n};\n\nconst getSyncStatuses = async (database: KeeperDatabase, userId: string): Promise<KeeperSyncStatus[]> => {\n  const statuses = await database\n    .select({\n      calendarId: syncStatusTable.calendarId,\n      lastSyncedAt: syncStatusTable.lastSyncedAt,\n      localEventCount: syncStatusTable.localEventCount,\n      remoteEventCount: syncStatusTable.remoteEventCount,\n    })\n    .from(syncStatusTable)\n    .innerJoin(calendarsTable, eq(syncStatusTable.calendarId, calendarsTable.id))\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        inArray(\n          calendarsTable.id,\n          database\n            .selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n            .from(sourceDestinationMappingsTable),\n        ),\n      ),\n    );\n\n  return statuses.map((status) => ({\n    calendarId: status.calendarId,\n    inSync: status.localEventCount === status.remoteEventCount,\n    lastSyncedAt: toIsoString(status.lastSyncedAt),\n    localEventCount: status.localEventCount,\n    remoteEventCount: status.remoteEventCount,\n  }));\n};\n\nexport { getSyncStatuses };\n"
  },
  {
    "path": "services/api/src/queries/list-destinations.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n  sourceDestinationMappingsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport type { KeeperDatabase, KeeperDestination } from \"@/types\";\n\nconst listDestinations = async (database: KeeperDatabase, userId: string): Promise<KeeperDestination[]> => {\n  const accounts = await database\n    .select({\n      email: calendarAccountsTable.email,\n      id: calendarAccountsTable.id,\n      needsReauthentication: calendarAccountsTable.needsReauthentication,\n      provider: calendarAccountsTable.provider,\n    })\n    .from(calendarAccountsTable)\n    .innerJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(\n      and(\n        eq(calendarAccountsTable.userId, userId),\n        inArray(\n          calendarsTable.id,\n          database\n            .selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n            .from(sourceDestinationMappingsTable),\n        ),\n      ),\n    );\n\n  return accounts;\n};\n\nexport { listDestinations };\n"
  },
  {
    "path": "services/api/src/queries/list-mappings.ts",
    "content": "import {\n  calendarsTable,\n  sourceDestinationMappingsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport type { KeeperDatabase, KeeperMapping } from \"@/types\";\n\nconst EMPTY_RESULT_COUNT = 0;\n\nconst listMappings = async (database: KeeperDatabase, userId: string): Promise<KeeperMapping[]> => {\n  const userSourceCalendars = await database\n    .select({\n      calendarType: calendarsTable.calendarType,\n      id: calendarsTable.id,\n    })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        inArray(\n          calendarsTable.id,\n          database\n            .selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n            .from(sourceDestinationMappingsTable),\n        ),\n      ),\n    );\n\n  if (userSourceCalendars.length === EMPTY_RESULT_COUNT) {\n    return [];\n  }\n\n  const calendarIds = userSourceCalendars.map((calendar) => calendar.id);\n  const typeByCalendarId = new Map(\n    userSourceCalendars.map((calendar) => [calendar.id, calendar.calendarType]),\n  );\n\n  const mappings = await database\n    .select()\n    .from(sourceDestinationMappingsTable)\n    .where(inArray(sourceDestinationMappingsTable.sourceCalendarId, calendarIds));\n\n  return mappings.map((mapping) => {\n    const calendarType = typeByCalendarId.get(mapping.sourceCalendarId);\n\n    if (!calendarType) {\n      throw new Error(`No calendar type found for source calendar: ${mapping.sourceCalendarId}`);\n    }\n\n    return {\n      ...mapping,\n      calendarType,\n      createdAt: mapping.createdAt.toISOString(),\n    };\n  });\n};\n\nexport { listMappings };\n"
  },
  {
    "path": "services/api/src/queries/list-sources.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n} from \"@keeper.sh/database/schema\";\nimport { asc, eq } from \"drizzle-orm\";\nimport { withAccountDisplay } from \"@/provider-display\";\nimport type { KeeperDatabase, KeeperSource } from \"@/types\";\n\nconst listSources = async (database: KeeperDatabase, userId: string): Promise<KeeperSource[]> => {\n  const calendars = await database\n    .select({\n      id: calendarsTable.id,\n      name: calendarsTable.name,\n      calendarType: calendarsTable.calendarType,\n      capabilities: calendarsTable.capabilities,\n      accountId: calendarAccountsTable.id,\n      provider: calendarAccountsTable.provider,\n      displayName: calendarAccountsTable.displayName,\n      email: calendarAccountsTable.email,\n      accountIdentifier: calendarAccountsTable.accountId,\n      needsReauthentication: calendarAccountsTable.needsReauthentication,\n      includeInIcalFeed: calendarsTable.includeInIcalFeed,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(eq(calendarsTable.userId, userId))\n    .orderBy(asc(calendarsTable.createdAt));\n\n  return calendars.map((calendar) => withAccountDisplay(calendar));\n};\n\nexport { listSources };\n"
  },
  {
    "path": "services/api/src/read-models.ts",
    "content": "import { getEventCount } from \"./queries/get-event-count\";\nimport { getEvent } from \"./queries/get-event\";\nimport { getEventsInRange, normalizeEventRange } from \"./queries/get-events-in-range\";\nimport { getSyncStatuses } from \"./queries/get-sync-statuses\";\nimport { listDestinations } from \"./queries/list-destinations\";\nimport { listMappings } from \"./queries/list-mappings\";\nimport { listSources } from \"./queries/list-sources\";\nimport {\n  createEventMutation,\n  updateEventMutation,\n  deleteEventMutation,\n  rsvpEventMutation,\n  getPendingInvitesMutation,\n} from \"./mutations\";\nimport type { OAuthTokenRefresher } from \"./mutations\";\nimport type { RefreshLockStore } from \"@keeper.sh/calendar\";\nimport type { KeeperApi, KeeperDatabase } from \"./types\";\n\ninterface KeeperApiOptions {\n  oauthTokenRefresher?: OAuthTokenRefresher;\n  refreshLockStore?: RefreshLockStore | null;\n  encryptionKey?: string;\n}\n\nconst createKeeperApi = (database: KeeperDatabase, options?: KeeperApiOptions): KeeperApi => {\n  const deps = {\n    database,\n    oauthTokenRefresher: options?.oauthTokenRefresher,\n    refreshLockStore: options?.refreshLockStore,\n    encryptionKey: options?.encryptionKey,\n  };\n\n  return {\n    listSources: (userId) => listSources(database, userId),\n    listDestinations: (userId) => listDestinations(database, userId),\n    listMappings: (userId) => listMappings(database, userId),\n    getEventsInRange: (userId, range, filters) => getEventsInRange(database, userId, range, filters),\n    getEvent: (userId, eventId) => getEvent(database, userId, eventId),\n    getEventCount: (userId, countOptions) => getEventCount(database, userId, countOptions),\n    getSyncStatuses: (userId) => getSyncStatuses(database, userId),\n    createEvent: (userId, input) => createEventMutation(deps, userId, input),\n    updateEvent: (userId, eventId, updates) => updateEventMutation(deps, userId, eventId, updates),\n    deleteEvent: (userId, eventId) => deleteEventMutation(deps, userId, eventId),\n    rsvpEvent: (userId, eventId, status) => rsvpEventMutation(deps, userId, eventId, status),\n    getPendingInvites: (userId, calendarId, from, to) => getPendingInvitesMutation(deps, userId, calendarId, from, to),\n  };\n};\n\nexport { createKeeperApi, normalizeEventRange };\nexport type { KeeperApiOptions };\n"
  },
  {
    "path": "services/api/src/routes/api/accounts/[id].ts",
    "content": "import { calendarAccountsTable, calendarsTable } from \"@keeper.sh/database/schema\";\nimport { and, count, eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { idParamSchema } from \"@/utils/request-query\";\nimport { database, redis } from \"@/context\";\nimport { withAccountDisplay } from \"@/utils/provider-display\";\nimport { invalidateCalendarsForAccount } from \"@/utils/invalidate-calendars\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    if (!params.id || !idParamSchema.allows(params)) {\n      return ErrorResponse.badRequest(\"Account ID is required\").toResponse();\n    }\n    const { id } = params;\n\n    const [account] = await database\n      .select({\n        id: calendarAccountsTable.id,\n        provider: calendarAccountsTable.provider,\n        displayName: calendarAccountsTable.displayName,\n        email: calendarAccountsTable.email,\n        accountIdentifier: calendarAccountsTable.accountId,\n        authType: calendarAccountsTable.authType,\n        needsReauthentication: calendarAccountsTable.needsReauthentication,\n        calendarCount: count(calendarsTable.id),\n        createdAt: calendarAccountsTable.createdAt,\n      })\n      .from(calendarAccountsTable)\n      .leftJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .where(\n        and(\n          eq(calendarAccountsTable.id, id),\n          eq(calendarAccountsTable.userId, userId),\n        ),\n      )\n      .groupBy(calendarAccountsTable.id)\n      .limit(1);\n\n    if (!account) {\n      return ErrorResponse.notFound(\"Account not found\").toResponse();\n    }\n\n    return Response.json(withAccountDisplay(account));\n  }),\n);\n\nconst DELETE = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    if (!params.id || !idParamSchema.allows(params)) {\n      return ErrorResponse.badRequest(\"Account ID is required\").toResponse();\n    }\n    const { id } = params;\n\n    await invalidateCalendarsForAccount(database, redis, id);\n\n    const [deleted] = await database\n      .delete(calendarAccountsTable)\n      .where(\n        and(\n          eq(calendarAccountsTable.id, id),\n          eq(calendarAccountsTable.userId, userId),\n        ),\n      )\n      .returning({ id: calendarAccountsTable.id });\n\n    if (!deleted) {\n      return ErrorResponse.notFound(\"Account not found\").toResponse();\n    }\n\n    return Response.json({ success: true });\n  }),\n);\n\nexport { GET, DELETE };\n"
  },
  {
    "path": "services/api/src/routes/api/accounts/index.ts",
    "content": "import { calendarAccountsTable, calendarsTable } from \"@keeper.sh/database/schema\";\nimport { asc, eq, count } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\nimport { withAccountDisplay } from \"@/utils/provider-display\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const accounts = await database\n      .select({\n        id: calendarAccountsTable.id,\n        provider: calendarAccountsTable.provider,\n        displayName: calendarAccountsTable.displayName,\n        email: calendarAccountsTable.email,\n        accountIdentifier: calendarAccountsTable.accountId,\n        authType: calendarAccountsTable.authType,\n        needsReauthentication: calendarAccountsTable.needsReauthentication,\n        calendarCount: count(calendarsTable.id),\n        createdAt: calendarAccountsTable.createdAt,\n      })\n      .from(calendarAccountsTable)\n      .leftJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .where(eq(calendarAccountsTable.userId, userId))\n      .groupBy(calendarAccountsTable.id)\n      .orderBy(asc(calendarAccountsTable.createdAt));\n\n    return Response.json(accounts.map((account) => withAccountDisplay(account)));\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/cal/[identifier].ts",
    "content": "import { withWideEvent } from \"@/utils/middleware\";\nimport { generateUserCalendar } from \"@/utils/ical\";\nimport { ErrorResponse } from \"@/utils/responses\";\n\nconst ICS_EXTENSION_LENGTH = 4;\n\nconst GET = withWideEvent(async ({ params }) => {\n  const { identifier } = params;\n\n  if (!identifier?.endsWith(\".ics\")) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  const cleanIdentifier = identifier.slice(0, -ICS_EXTENSION_LENGTH);\n  const calendar = await generateUserCalendar(cleanIdentifier);\n\n  if (calendar === null) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  return new Response(calendar, {\n    headers: { \"Content-Type\": \"text/calendar; charset=utf-8\" },\n  });\n});\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/destinations/[id].ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { deleteCalendarDestination } from \"@/utils/destinations\";\nimport { idParamSchema } from \"@/utils/request-query\";\n\nexport const DELETE = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    if (!params.id || !idParamSchema.allows(params)) {\n      return ErrorResponse.badRequest(\"Destination ID is required\").toResponse();\n    }\n    const { id } = params;\n\n    const deleted = await deleteCalendarDestination(userId, id);\n\n    if (!deleted) {\n      return ErrorResponse.notFound().toResponse();\n    }\n\n    return Response.json({ success: true });\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/destinations/authorize.ts",
    "content": "import { calendarAccountsTable } from \"@keeper.sh/database/schema\";\nimport { and, count, eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { getAuthorizationUrl, isOAuthProvider } from \"@/utils/destinations\";\nimport { destinationAuthorizeQuerySchema } from \"@/utils/request-query\";\nimport { baseUrl, database, premiumService } from \"@/context\";\n\nconst FIRST_RESULT_LIMIT = 1;\n\nconst userOwnsDestination = async (userId: string, accountId: string): Promise<boolean> => {\n  const [account] = await database\n    .select({ id: calendarAccountsTable.id })\n    .from(calendarAccountsTable)\n    .where(\n      and(\n        eq(calendarAccountsTable.id, accountId),\n        eq(calendarAccountsTable.userId, userId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return Boolean(account);\n};\n\nconst countUserAccounts = async (userId: string): Promise<number> => {\n  const [result] = await database\n    .select({ value: count() })\n    .from(calendarAccountsTable)\n    .where(eq(calendarAccountsTable.userId, userId));\n\n  return result?.value ?? 0;\n};\n\nconst GET = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const query = Object.fromEntries(url.searchParams.entries());\n    const provider = url.searchParams.get(\"provider\");\n    const destinationId = url.searchParams.get(\"destinationId\");\n\n    if (\n      !destinationAuthorizeQuerySchema.allows(query)\n      || !provider\n      || !isOAuthProvider(provider)\n    ) {\n      return ErrorResponse.badRequest(\"Unsupported provider\").toResponse();\n    }\n\n    if (destinationId) {\n      const ownsDestination = await userOwnsDestination(userId, destinationId);\n      if (!ownsDestination) {\n        return ErrorResponse.notFound(\"Destination not found\").toResponse();\n      }\n    } else {\n      const accountCount = await countUserAccounts(userId);\n      const allowed = await premiumService.canAddAccount(userId, accountCount);\n\n      if (!allowed) {\n        const errorUrl = new URL(\"/dashboard/integrations\", baseUrl);\n        errorUrl.searchParams.set(\n          \"error\",\n          \"Account limit reached. Upgrade to Pro for unlimited accounts.\",\n        );\n        return Response.redirect(errorUrl.toString());\n      }\n    }\n\n    const callbackUrl = new URL(`/api/destinations/callback/${provider}`, baseUrl);\n    const authorizationOptions: {\n      callbackUrl: string;\n      destinationId?: string;\n    } = {\n      callbackUrl: callbackUrl.toString(),\n    };\n    if (destinationId) {\n      authorizationOptions.destinationId = destinationId;\n    }\n    const authUrl = await getAuthorizationUrl(provider, userId, authorizationOptions);\n\n    return Response.redirect(authUrl);\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/destinations/caldav/discover.ts",
    "content": "import { caldavDiscoverRequestSchema } from \"@keeper.sh/data-schemas\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { widelog } from \"@/utils/logging\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { CalDAVConnectionError, discoverCalendars } from \"@/utils/caldav\";\n\nconst POST = withWideEvent(\n  withAuth(async ({ request }) => {\n    widelog.set(\"provider.name\", \"caldav\");\n    const body = await request.json();\n\n    try {\n      const { serverUrl, username, password } = caldavDiscoverRequestSchema.assert(body);\n\n      const result = await discoverCalendars(serverUrl, {\n        password,\n        username,\n      });\n\n      return Response.json({ calendars: result.calendars, authMethod: result.authMethod });\n    } catch (error) {\n      if (error instanceof CalDAVConnectionError) {\n        return ErrorResponse.badRequest(error.message).toResponse();\n      }\n\n      return ErrorResponse.badRequest(\n        \"Server URL, username, and password are required\",\n      ).toResponse();\n    }\n  }),\n);\n\nexport { POST };\n"
  },
  {
    "path": "services/api/src/routes/api/destinations/caldav/index.ts",
    "content": "import { caldavConnectRequestSchema } from \"@keeper.sh/data-schemas\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport {\n  CalDAVConnectionError,\n  DestinationLimitError,\n  createCalDAVDestination,\n  isValidProvider,\n} from \"@/utils/caldav\";\n\nconst POST = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const body = await request.json();\n\n    try {\n      const { serverUrl, username, password, calendarUrl, provider } =\n        caldavConnectRequestSchema.assert(body);\n\n      const providerName = provider ?? \"caldav\";\n      if (!isValidProvider(providerName)) {\n        return ErrorResponse.badRequest(\"Invalid provider\").toResponse();\n      }\n\n      await createCalDAVDestination(\n        userId,\n        providerName,\n        serverUrl,\n        { password, username },\n        calendarUrl,\n      );\n\n      return Response.json({ success: true }, { status: 201 });\n    } catch (error) {\n      if (error instanceof DestinationLimitError) {\n        return ErrorResponse.paymentRequired(error.message).toResponse();\n      }\n      if (error instanceof CalDAVConnectionError) {\n        return ErrorResponse.badRequest(error.message).toResponse();\n      }\n\n      return ErrorResponse.badRequest(\"All fields are required\").toResponse();\n    }\n  }),\n);\n\nexport { POST };\n"
  },
  {
    "path": "services/api/src/routes/api/destinations/callback/[provider].ts",
    "content": "import { withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\nimport {\n  OAuthError,\n  buildRedirectUrl,\n  handleOAuthCallback,\n  parseOAuthCallback,\n} from \"@/utils/oauth\";\nimport { providerParamSchema } from \"@/utils/request-query\";\nimport { baseUrl } from \"@/context\";\n\nconst GET = withWideEvent(async ({ request, params }) => {\n  if (!params.provider || !providerParamSchema.allows(params)) {\n    return ErrorResponse.notFound().toResponse();\n  }\n  const { provider } = params;\n\n  try {\n    const callbackParams = parseOAuthCallback(request, provider);\n    const { redirectUrl } = await handleOAuthCallback(callbackParams);\n    return Response.redirect(redirectUrl.toString());\n  } catch (error) {\n    if (error instanceof OAuthError) {\n      widelog.errorFields(error, { slug: \"oauth-callback-failed\" });\n      return Response.redirect(error.redirectUrl.toString());\n    }\n\n    widelog.errorFields(error, { slug: \"unclassified\" });\n    const errorUrl = buildRedirectUrl(\"/dashboard/integrations\", baseUrl, {\n      destination: \"error\",\n      error: \"Failed to connect\",\n    });\n    return Response.redirect(errorUrl.toString());\n  }\n});\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/destinations/index.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { createKeeperApi } from \"@/read-models\";\nimport { database } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database);\n\nexport const GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const destinations = await keeperApi.listDestinations(userId);\n    return Response.json(destinations);\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/entitlements.ts",
    "content": "import { calendarAccountsTable } from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database, premiumService } from \"@/context\";\nimport { getUserMappings } from \"@/utils/source-destination-mappings\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const [accounts, mappings, plan] = await Promise.all([\n      database\n        .select({ id: calendarAccountsTable.id })\n        .from(calendarAccountsTable)\n        .where(eq(calendarAccountsTable.userId, userId)),\n      getUserMappings(userId),\n      premiumService.getUserPlan(userId),\n    ]);\n\n    const accountLimit = premiumService.getAccountLimit(plan);\n    const mappingLimit = premiumService.getMappingLimit(plan);\n    let resolvedAccountLimit: number | null = null;\n    let resolvedMappingLimit: number | null = null;\n\n    if (Number.isFinite(accountLimit)) {\n      resolvedAccountLimit = accountLimit;\n    }\n\n    if (Number.isFinite(mappingLimit)) {\n      resolvedMappingLimit = mappingLimit;\n    }\n\n    return Response.json({\n      accounts: {\n        current: accounts.length,\n        limit: resolvedAccountLimit,\n      },\n      canUseEventFilters: plan === \"pro\",\n      canCustomizeIcalFeed: plan === \"pro\",\n      mappings: {\n        current: mappings.length,\n        limit: resolvedMappingLimit,\n      },\n      plan,\n    });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/events/count.ts",
    "content": "import { createKeeperApi } from \"@/read-models\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database);\n\nexport const GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const count = await keeperApi.getEventCount(userId);\n    return Response.json({ count });\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/events/index.ts",
    "content": "import { normalizeDateRange, parseDateRangeParams } from \"@/utils/date-range\";\nimport { createKeeperApi } from \"@/read-models\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database);\n\nexport const GET = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const { from, to } = parseDateRangeParams(url);\n    const { end, start } = normalizeDateRange(from, to);\n    const events = await keeperApi.getEventsInRange(userId, {\n      from: start,\n      to: end,\n    });\n    return Response.json(events);\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/feedback/index.ts",
    "content": "import { feedbackRequestSchema } from \"@keeper.sh/data-schemas\";\nimport { feedbackTable } from \"@keeper.sh/database/schema\";\nimport { user as userTable } from \"@keeper.sh/database/auth-schema\";\nimport { eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { database, resend, feedbackEmail } from \"@/context\";\n\nconst TEMPLATE_ID = {\n  feedback: \"user-feedback\",\n  report: \"problem-report\",\n} as const;\n\nconst POST = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const body = await request.json();\n\n    try {\n      const { message, type, wantsFollowUp } = feedbackRequestSchema.assert(body);\n\n      await database.insert(feedbackTable).values({\n        message,\n        type,\n        userId,\n        wantsFollowUp: wantsFollowUp ?? false,\n      });\n\n      if (!resend || !feedbackEmail) {\n        return ErrorResponse.internal(\"Feedback service is not configured.\").toResponse();\n      }\n\n      const [user] = await database\n        .select({ email: userTable.email })\n        .from(userTable)\n        .where(eq(userTable.id, userId))\n        .limit(1);\n\n      if (!user?.email) {\n        return ErrorResponse.badRequest(\"User email not found.\").toResponse();\n      }\n\n      const templateId = TEMPLATE_ID[type];\n\n      await resend.emails.send({\n        template: {\n          id: templateId,\n          variables: {\n            message,\n            userEmail: user.email,\n            wantsFollowUp: String(wantsFollowUp),\n          },\n        },\n        to: feedbackEmail,\n        replyTo: user.email,\n      });\n\n      return Response.json({ success: true });\n    } catch {\n      return ErrorResponse.badRequest(\"Invalid feedback request.\").toResponse();\n    }\n  }),\n);\n\nexport { POST };\n"
  },
  {
    "path": "services/api/src/routes/api/health.ts",
    "content": "import { withWideEvent } from \"@/utils/middleware\";\n\nconst GET = withWideEvent(() =>\n  Response.json({\n    status: \"ok\",\n    timestamp: new Date().toISOString(),\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/ical/settings.ts",
    "content": "import { eq } from \"drizzle-orm\";\nimport { icalFeedSettingsTable } from \"@keeper.sh/database/schema\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { database, premiumService } from \"@/context\";\nimport {\n  icalSettingsPatchBodySchema,\n  type IcalSettingsPatchBody,\n} from \"@/utils/request-body\";\n\nconst DEFAULT_SETTINGS = {\n  includeEventName: false,\n  includeEventDescription: false,\n  includeEventLocation: false,\n  excludeAllDayEvents: false,\n  customEventName: \"Busy\",\n};\n\nconst ICAL_BOOLEAN_UPDATE_FIELDS = [\n  \"includeEventName\",\n  \"includeEventDescription\",\n  \"includeEventLocation\",\n  \"excludeAllDayEvents\",\n] as const;\n\nconst buildIcalSettingsUpdates = (\n  body: IcalSettingsPatchBody,\n): Record<string, string | boolean> => {\n  const updates: Record<string, string | boolean> = {};\n\n  for (const field of ICAL_BOOLEAN_UPDATE_FIELDS) {\n    if (typeof body[field] === \"boolean\") {\n      updates[field] = body[field];\n    }\n  }\n  if (typeof body.customEventName === \"string\") {\n    updates.customEventName = body.customEventName;\n  }\n\n  return updates;\n};\n\ninterface PatchIcalSettingsRouteContext {\n  body: unknown;\n  userId: string;\n}\n\ninterface PatchIcalSettingsDependencies {\n  canCustomizeIcalFeed: (userId: string) => Promise<boolean>;\n  upsertSettings: (\n    userId: string,\n    updates: Record<string, string | boolean>,\n  ) => Promise<Record<string, unknown> | null>;\n}\n\nconst handlePatchIcalSettingsRoute = async (\n  context: PatchIcalSettingsRouteContext,\n  dependencies: PatchIcalSettingsDependencies,\n): Promise<Response> => {\n  const { body: payload, userId } = context;\n  let body: IcalSettingsPatchBody = {};\n  if (icalSettingsPatchBodySchema.allows(payload)) {\n    body = payload;\n  }\n  const updates = buildIcalSettingsUpdates(body);\n\n  if (Object.keys(updates).length === 0) {\n    return ErrorResponse.badRequest(\"No valid fields to update\").toResponse();\n  }\n\n  const allowed = await dependencies.canCustomizeIcalFeed(userId);\n  if (!allowed) {\n    return ErrorResponse.forbidden(\"iCal feed customization requires a Pro plan.\").toResponse();\n  }\n\n  const updated = await dependencies.upsertSettings(userId, updates);\n  return Response.json(updated);\n};\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const [settings] = await database\n      .select()\n      .from(icalFeedSettingsTable)\n      .where(eq(icalFeedSettingsTable.userId, userId))\n      .limit(1);\n\n    return Response.json(settings ?? { userId, ...DEFAULT_SETTINGS });\n  }),\n);\n\nconst PATCH = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const payload = await request.json();\n    return handlePatchIcalSettingsRoute(\n      { body: payload, userId },\n      {\n        canCustomizeIcalFeed: (resolvedUserId) => premiumService.canCustomizeIcalFeed(resolvedUserId),\n        upsertSettings: async (resolvedUserId, updates) => {\n          const [updated] = await database\n            .insert(icalFeedSettingsTable)\n            .values({ userId: resolvedUserId, ...DEFAULT_SETTINGS, ...updates })\n            .onConflictDoUpdate({\n              target: icalFeedSettingsTable.userId,\n              set: updates,\n            })\n            .returning();\n\n          return updated ?? null;\n        },\n      },\n    );\n  }),\n);\n\nexport { GET, PATCH, handlePatchIcalSettingsRoute };\n"
  },
  {
    "path": "services/api/src/routes/api/ical/token.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { getUserIdentifierToken } from \"@/utils/user\";\nimport { baseUrl } from \"@/context\";\n\nconst getIcalUrl = (token: string): string | null => {\n  const url = new URL(`/api/cal/${token}.ics`, baseUrl);\n  return url.toString();\n};\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const token = await getUserIdentifierToken(userId);\n    const icalUrl = getIcalUrl(token);\n    return Response.json({ icalUrl, token });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/ics/[id]/destinations.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { getDestinationsForSource } from \"@/utils/source-destination-mappings\";\nimport { verifySourceOwnership } from \"@/utils/sources\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    const { id: sourceId } = params;\n\n    if (!sourceId) {\n      return ErrorResponse.badRequest(\"Source ID is required\").toResponse();\n    }\n\n    const isOwner = await verifySourceOwnership(userId, sourceId);\n    if (!isOwner) {\n      return ErrorResponse.notFound().toResponse();\n    }\n\n    const destinationIds = await getDestinationsForSource(userId, sourceId);\n    return Response.json({ destinationIds });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/ics/index.ts",
    "content": "import { createSourceSchema } from \"@keeper.sh/data-schemas\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport {\n  InvalidSourceUrlError,\n  SourceLimitError,\n  createSource,\n  getUserSources,\n} from \"@/utils/sources\";\nimport {\n  handleGetIcsSourcesRoute,\n  handlePostIcsSourceRoute,\n} from \"./source-routes\";\n\nconst GET = withWideEvent(\n  withAuth(({ userId }) =>\n    handleGetIcsSourcesRoute(\n      { userId },\n      {\n        getUserSources,\n      },\n    )),\n);\n\nconst POST = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const body = await request.json();\n    return handlePostIcsSourceRoute(\n      { body, userId },\n      {\n        createSource,\n        isInvalidSourceUrlError: (error): error is InvalidSourceUrlError =>\n          error instanceof InvalidSourceUrlError,\n        isSourceLimitError: (error): error is SourceLimitError =>\n          error instanceof SourceLimitError,\n        parseCreateSourceBody: (value) => createSourceSchema.assert(value),\n      },\n    );\n  }),\n);\n\nexport { GET, POST };\n"
  },
  {
    "path": "services/api/src/routes/api/ics/source-routes.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\n\ninterface IcsRouteContext {\n  userId: string;\n}\n\ninterface IcsPostRouteContext extends IcsRouteContext {\n  body: unknown;\n}\n\ninterface ParsedCreateSourceBody {\n  name: string;\n  url: string;\n}\n\ninterface InvalidSourceUrlErrorLike {\n  authRequired: boolean;\n  message: string;\n}\n\ninterface GetIcsSourcesDependencies {\n  getUserSources: (userId: string) => Promise<unknown[]>;\n}\n\ninterface PostIcsSourceDependencies {\n  parseCreateSourceBody: (body: unknown) => ParsedCreateSourceBody;\n  createSource: (userId: string, name: string, url: string) => Promise<unknown>;\n  isSourceLimitError: (error: unknown) => boolean;\n  isInvalidSourceUrlError: (error: unknown) => error is InvalidSourceUrlErrorLike;\n}\n\nconst handleGetIcsSourcesRoute = async (\n  context: IcsRouteContext,\n  dependencies: GetIcsSourcesDependencies,\n): Promise<Response> => {\n  const sources = await dependencies.getUserSources(context.userId);\n  return Response.json(sources);\n};\n\nconst handlePostIcsSourceRoute = async (\n  context: IcsPostRouteContext,\n  dependencies: PostIcsSourceDependencies,\n): Promise<Response> => {\n  try {\n    const { name, url } = dependencies.parseCreateSourceBody(context.body);\n    const source = await dependencies.createSource(context.userId, name, url);\n    return Response.json(source, { status: HTTP_STATUS.CREATED });\n  } catch (error) {\n    if (dependencies.isSourceLimitError(error)) {\n      widelog.errorFields(error, { slug: \"source-limit-reached\" });\n      const fallbackMessage = \"Source limit reached\";\n      if (error instanceof Error) {\n        return ErrorResponse.paymentRequired(error.message).toResponse();\n      }\n      return ErrorResponse.paymentRequired(fallbackMessage).toResponse();\n    }\n\n    if (dependencies.isInvalidSourceUrlError(error)) {\n      return Response.json(\n        {\n          authRequired: error.authRequired,\n          error: error.message,\n        },\n        { status: HTTP_STATUS.BAD_REQUEST },\n      );\n    }\n\n    return ErrorResponse.badRequest(\"Name and URL are required\").toResponse();\n  }\n};\n\nexport { handleGetIcsSourcesRoute, handlePostIcsSourceRoute };\n"
  },
  {
    "path": "services/api/src/routes/api/mappings/index.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { createKeeperApi } from \"@/read-models\";\nimport { database } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database);\n\nexport const GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const mappings = await keeperApi.listMappings(userId);\n    return Response.json(mappings);\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/socket/token.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { generateSocketToken } from \"@/utils/state\";\n\nexport const GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const token = await generateSocketToken(userId);\n    return Response.json({ token });\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/socket/url.ts",
    "content": "import env from \"@/env\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { generateSocketToken } from \"@/utils/state\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const token = await generateSocketToken(userId);\n\n    if (env.WEBSOCKET_URL) {\n      const socketUrl = new URL(env.WEBSOCKET_URL);\n      socketUrl.searchParams.set(\"token\", token);\n      return Response.json({ socketUrl: socketUrl.toString() });\n    }\n\n    return Response.json({ socketPath: `/api/socket?token=${token}` });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/[id]/destinations.ts",
    "content": "import { calendarsTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\nimport {\n  getDestinationsForSource,\n  setDestinationsForSource,\n} from \"@/utils/source-destination-mappings\";\nimport {\n  handleGetSourceDestinationsRoute,\n  handlePutSourceDestinationsRoute,\n} from \"./mapping-routes\";\n\nconst GET = withWideEvent(\n  withAuth(({ params, userId }) =>\n    handleGetSourceDestinationsRoute(\n      { params, userId },\n      {\n        getDestinationsForSource,\n        sourceExists: async (userIdToCheck, sourceCalendarId) => {\n          const [source] = await database\n            .select({ id: calendarsTable.id })\n            .from(calendarsTable)\n            .where(\n              and(\n                eq(calendarsTable.id, sourceCalendarId),\n                eq(calendarsTable.userId, userIdToCheck),\n              ),\n            )\n            .limit(1);\n\n          return Boolean(source);\n        },\n      },\n    ),\n  ),\n);\n\nconst PUT = withWideEvent(\n  withAuth(async ({ request, params, userId }) => {\n    const payload = await request.json();\n    return handlePutSourceDestinationsRoute(\n      { body: payload, params, userId },\n      { setDestinationsForSource },\n    );\n  }),\n);\n\nexport { GET, PUT };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/[id]/mapping-routes.ts",
    "content": "import { ErrorResponse } from \"@/utils/responses\";\nimport { calendarIdsBodySchema } from \"@/utils/request-body\";\nimport { idParamSchema } from \"@/utils/request-query\";\nimport { MAPPING_LIMIT_ERROR_MESSAGE } from \"@/utils/source-destination-mappings\";\n\ninterface MappingRouteContext {\n  params: Record<string, string>;\n  userId: string;\n}\n\ninterface MappingPutRouteContext extends MappingRouteContext {\n  body: unknown;\n}\n\ninterface GetSourceDestinationsDependencies {\n  sourceExists: (userId: string, sourceCalendarId: string) => Promise<boolean>;\n  getDestinationsForSource: (userId: string, sourceCalendarId: string) => Promise<string[]>;\n}\n\ninterface PutSourceDestinationsDependencies {\n  setDestinationsForSource: (\n    userId: string,\n    sourceCalendarId: string,\n    destinationCalendarIds: string[],\n  ) => Promise<void>;\n}\n\ninterface GetSourcesForDestinationDependencies {\n  destinationExists: (userId: string, destinationCalendarId: string) => Promise<boolean>;\n  getSourcesForDestination: (userId: string, destinationCalendarId: string) => Promise<string[]>;\n}\n\ninterface PutSourcesForDestinationDependencies {\n  setSourcesForDestination: (\n    userId: string,\n    destinationCalendarId: string,\n    sourceCalendarIds: string[],\n  ) => Promise<void>;\n}\n\nconst resolveIdParam = (\n  params: Record<string, string>,\n  missingIdMessage: string,\n): { id: string } | Response => {\n  if (!params.id || !idParamSchema.allows(params)) {\n    return ErrorResponse.badRequest(missingIdMessage).toResponse();\n  }\n  return { id: params.id };\n};\n\nconst mapMappingDomainError = (\n  error: unknown,\n  missingCalendarMessage: string,\n  invalidLinkedCalendarsMessage: string,\n): Response | null => {\n  if (!(error instanceof Error)) {\n    return null;\n  }\n\n  if (error.message === missingCalendarMessage) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  if (error.message === invalidLinkedCalendarsMessage) {\n    return ErrorResponse.badRequest(error.message).toResponse();\n  }\n\n  if (error.message === MAPPING_LIMIT_ERROR_MESSAGE) {\n    return ErrorResponse.paymentRequired(error.message).toResponse();\n  }\n\n  return null;\n};\n\nconst handleGetSourceDestinationsRoute = async (\n  context: MappingRouteContext,\n  dependencies: GetSourceDestinationsDependencies,\n): Promise<Response> => {\n  const resolved = resolveIdParam(context.params, \"Source ID is required\");\n  if (resolved instanceof Response) {\n    return resolved;\n  }\n\n  const sourceExists = await dependencies.sourceExists(context.userId, resolved.id);\n  if (!sourceExists) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  const destinationIds = await dependencies.getDestinationsForSource(context.userId, resolved.id);\n  return Response.json({ destinationIds });\n};\n\nconst handlePutSourceDestinationsRoute = async (\n  context: MappingPutRouteContext,\n  dependencies: PutSourceDestinationsDependencies,\n): Promise<Response> => {\n  const resolved = resolveIdParam(context.params, \"Source ID is required\");\n  if (resolved instanceof Response) {\n    return resolved;\n  }\n\n  if (!calendarIdsBodySchema.allows(context.body)) {\n    return ErrorResponse.badRequest(\"calendarIds array is required\").toResponse();\n  }\n\n  try {\n    await dependencies.setDestinationsForSource(\n      context.userId,\n      resolved.id,\n      context.body.calendarIds,\n    );\n  } catch (error) {\n    const mappedResponse = mapMappingDomainError(\n      error,\n      \"Source calendar not found\",\n      \"Some destination calendars not found\",\n    );\n    if (mappedResponse) {\n      return mappedResponse;\n    }\n    throw error;\n  }\n\n  return Response.json({ success: true });\n};\n\nconst handleGetSourcesForDestinationRoute = async (\n  context: MappingRouteContext,\n  dependencies: GetSourcesForDestinationDependencies,\n): Promise<Response> => {\n  const resolved = resolveIdParam(context.params, \"Destination ID is required\");\n  if (resolved instanceof Response) {\n    return resolved;\n  }\n\n  const destinationExists = await dependencies.destinationExists(context.userId, resolved.id);\n  if (!destinationExists) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  const sourceIds = await dependencies.getSourcesForDestination(context.userId, resolved.id);\n  return Response.json({ sourceIds });\n};\n\nconst handlePutSourcesForDestinationRoute = async (\n  context: MappingPutRouteContext,\n  dependencies: PutSourcesForDestinationDependencies,\n): Promise<Response> => {\n  const resolved = resolveIdParam(context.params, \"Destination ID is required\");\n  if (resolved instanceof Response) {\n    return resolved;\n  }\n\n  if (!calendarIdsBodySchema.allows(context.body)) {\n    return ErrorResponse.badRequest(\"calendarIds array is required\").toResponse();\n  }\n\n  try {\n    await dependencies.setSourcesForDestination(\n      context.userId,\n      resolved.id,\n      context.body.calendarIds,\n    );\n  } catch (error) {\n    const mappedResponse = mapMappingDomainError(\n      error,\n      \"Destination calendar not found\",\n      \"Some source calendars not found\",\n    );\n    if (mappedResponse) {\n      return mappedResponse;\n    }\n    throw error;\n  }\n\n  return Response.json({ success: true });\n};\n\nexport {\n  handleGetSourceDestinationsRoute,\n  handlePutSourceDestinationsRoute,\n  handleGetSourcesForDestinationRoute,\n  handlePutSourcesForDestinationRoute,\n};\n"
  },
  {
    "path": "services/api/src/routes/api/sources/[id]/source-item-routes.ts",
    "content": "import type { SourcePatchBody } from \"@/utils/request-body\";\nimport { sourcePatchBodySchema } from \"@/utils/request-body\";\nimport { idParamSchema } from \"@/utils/request-query\";\nimport { ErrorResponse } from \"@/utils/responses\";\n\nconst EVENT_FILTER_FIELDS = [\n  \"excludeAllDayEvents\",\n  \"excludeEventDescription\",\n  \"excludeEventLocation\",\n  \"excludeEventName\",\n  \"excludeFocusTime\",\n  \"excludeOutOfOffice\",\n] as const;\n\nconst SOURCE_BOOLEAN_UPDATE_FIELDS = [\n  ...EVENT_FILTER_FIELDS,\n  \"includeInIcalFeed\",\n] as const;\n\ninterface SourceRouteContext {\n  params: Record<string, string>;\n  userId: string;\n}\n\ninterface PatchSourceRouteContext extends SourceRouteContext {\n  body: unknown;\n}\n\ninterface PatchSourceDependencies {\n  updateSource: (\n    userId: string,\n    sourceCalendarId: string,\n    updates: Record<string, string | boolean>,\n  ) => Promise<Record<string, unknown> | null>;\n  canUseEventFilters: (userId: string) => Promise<boolean>;\n}\n\nconst buildSourceUpdates = (\n  body: SourcePatchBody,\n): Record<string, string | boolean> => {\n  const updates: Record<string, string | boolean> = {};\n\n  if (body.name) {\n    updates.name = body.name;\n  }\n  if (typeof body.customEventName === \"string\") {\n    updates.customEventName = body.customEventName;\n  }\n\n  for (const field of SOURCE_BOOLEAN_UPDATE_FIELDS) {\n    if (typeof body[field] === \"boolean\") {\n      updates[field] = body[field];\n    }\n  }\n\n  return updates;\n};\n\nconst resolveId = (\n  params: Record<string, string>,\n): { id: string } | Response => {\n  if (!params.id || !idParamSchema.allows(params)) {\n    return ErrorResponse.badRequest(\"ID is required\").toResponse();\n  }\n  return { id: params.id };\n};\n\nconst handlePatchSourceRoute = async (\n  context: PatchSourceRouteContext,\n  dependencies: PatchSourceDependencies,\n): Promise<Response> => {\n  const resolvedId = resolveId(context.params);\n  if (resolvedId instanceof Response) {\n    return resolvedId;\n  }\n\n  let parsedBody: SourcePatchBody = {};\n  if (sourcePatchBodySchema.allows(context.body)) {\n    parsedBody = context.body;\n  }\n\n  const hasEventFilterUpdates = EVENT_FILTER_FIELDS.some(\n    (field) => typeof parsedBody[field] === \"boolean\",\n  );\n  const isUpdatingEventNameTemplate = typeof parsedBody.customEventName === \"string\";\n  if (hasEventFilterUpdates || isUpdatingEventNameTemplate) {\n    const allowed = await dependencies.canUseEventFilters(context.userId);\n    if (!allowed) {\n      return ErrorResponse.forbidden(\"Event filters require a Pro plan.\").toResponse();\n    }\n  }\n\n  const updates = buildSourceUpdates(parsedBody);\n\n  if (Object.keys(updates).length === 0) {\n    return ErrorResponse.badRequest(\"No valid fields to update\").toResponse();\n  }\n\n  const updated = await dependencies.updateSource(context.userId, resolvedId.id, updates);\n  if (!updated) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  return Response.json(updated);\n};\n\nexport { handlePatchSourceRoute };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/[id]/sources.ts",
    "content": "import { calendarsTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\nimport {\n  getSourcesForDestination,\n  setSourcesForDestination,\n} from \"@/utils/source-destination-mappings\";\nimport {\n  handleGetSourcesForDestinationRoute,\n  handlePutSourcesForDestinationRoute,\n} from \"./mapping-routes\";\n\nconst GET = withWideEvent(\n  withAuth(({ params, userId }) => handleGetSourcesForDestinationRoute(\n      { params, userId },\n      {\n        destinationExists: async (userIdToCheck, destinationCalendarId) => {\n          const [destination] = await database\n            .select({ id: calendarsTable.id })\n            .from(calendarsTable)\n            .where(\n              and(\n                eq(calendarsTable.id, destinationCalendarId),\n                eq(calendarsTable.userId, userIdToCheck),\n              ),\n            )\n            .limit(1);\n\n          return Boolean(destination);\n        },\n        getSourcesForDestination,\n      },\n    )),\n);\n\nconst PUT = withWideEvent(\n  withAuth(async ({ request, params, userId }) => {\n    const payload = await request.json();\n    return handlePutSourcesForDestinationRoute(\n      { body: payload, params, userId },\n      { setSourcesForDestination },\n    );\n  }),\n);\n\nexport { GET, PUT };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/[id].ts",
    "content": "import { calendarAccountsTable, calendarsTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { database, premiumService } from \"@/context\";\nimport { idParamSchema } from \"@/utils/request-query\";\nimport {\n  getDestinationsForSource,\n  getSourcesForDestination,\n} from \"@/utils/source-destination-mappings\";\nimport { withProviderMetadata } from \"@/utils/provider-display\";\nimport { handlePatchSourceRoute } from \"./[id]/source-item-routes\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    if (!params.id || !idParamSchema.allows(params)) {\n      return ErrorResponse.badRequest(\"ID is required\").toResponse();\n    }\n    const { id } = params;\n\n    const [source] = await database\n      .select({\n        id: calendarsTable.id,\n        name: calendarsTable.name,\n        originalName: calendarsTable.originalName,\n        calendarType: calendarsTable.calendarType,\n        capabilities: calendarsTable.capabilities,\n        provider: calendarAccountsTable.provider,\n        url: calendarsTable.url,\n        calendarUrl: calendarsTable.calendarUrl,\n        customEventName: calendarsTable.customEventName,\n        excludeAllDayEvents: calendarsTable.excludeAllDayEvents,\n        excludeEventDescription: calendarsTable.excludeEventDescription,\n        excludeEventLocation: calendarsTable.excludeEventLocation,\n        excludeEventName: calendarsTable.excludeEventName,\n        excludeFocusTime: calendarsTable.excludeFocusTime,\n        excludeOutOfOffice: calendarsTable.excludeOutOfOffice,\n        createdAt: calendarsTable.createdAt,\n        updatedAt: calendarsTable.updatedAt,\n      })\n      .from(calendarsTable)\n      .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .where(\n        and(\n          eq(calendarsTable.id, id),\n          eq(calendarsTable.userId, userId),\n        ),\n      )\n      .limit(1);\n\n    if (!source) {\n      return ErrorResponse.notFound().toResponse();\n    }\n\n    const [destinationIds, sourceIds] = await Promise.all([\n      getDestinationsForSource(userId, id),\n      getSourcesForDestination(userId, id),\n    ]);\n\n    return Response.json({\n      ...withProviderMetadata(source),\n      destinationIds,\n      sourceIds,\n    });\n  }),\n);\n\nconst PATCH = withWideEvent(\n  withAuth(async ({ request, params, userId }) => {\n    const payload = await request.json();\n    return handlePatchSourceRoute(\n      { body: payload, params, userId },\n      {\n        canUseEventFilters: (candidateUserId) => premiumService.canUseEventFilters(candidateUserId),\n        updateSource: async (userIdToUpdate, sourceCalendarId, updates) => {\n          const [updated] = await database\n            .update(calendarsTable)\n            .set(updates)\n            .where(\n              and(\n                eq(calendarsTable.id, sourceCalendarId),\n                eq(calendarsTable.userId, userIdToUpdate),\n              ),\n            )\n            .returning();\n\n          return updated ?? null;\n        },\n      },\n    );\n  }),\n);\n\nexport { GET, PATCH };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/authorize.ts",
    "content": "import { oauthCredentialsTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { getAuthorizationUrl, isOAuthProvider } from \"@/utils/destinations\";\nimport { sourceAuthorizeQuerySchema } from \"@/utils/request-query\";\nimport { baseUrl, database } from \"@/context\";\n\nconst FIRST_RESULT_LIMIT = 1;\n\nconst userOwnsSourceCredential = async (userId: string, credentialId: string): Promise<boolean> => {\n  const [credential] = await database\n    .select({ id: oauthCredentialsTable.id })\n    .from(oauthCredentialsTable)\n    .where(\n      and(\n        eq(oauthCredentialsTable.id, credentialId),\n        eq(oauthCredentialsTable.userId, userId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return Boolean(credential);\n};\n\nconst GET = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const query = Object.fromEntries(url.searchParams.entries());\n    const provider = url.searchParams.get(\"provider\");\n    const credentialId = url.searchParams.get(\"credentialId\");\n\n    if (\n      !sourceAuthorizeQuerySchema.allows(query)\n      || !provider\n      || !isOAuthProvider(provider)\n    ) {\n      return ErrorResponse.badRequest(\"Unsupported provider\").toResponse();\n    }\n\n    if (credentialId) {\n      const ownsCredential = await userOwnsSourceCredential(userId, credentialId);\n      if (!ownsCredential) {\n        return ErrorResponse.notFound(\"Source credential not found\").toResponse();\n      }\n    }\n\n    const callbackUrl = new URL(`/api/sources/callback/${provider}`, baseUrl);\n    const authorizationOptions: {\n      callbackUrl: string;\n      sourceCredentialId?: string;\n    } = {\n      callbackUrl: callbackUrl.toString(),\n    };\n    if (credentialId) {\n      authorizationOptions.sourceCredentialId = credentialId;\n    }\n    const authUrl = await getAuthorizationUrl(provider, userId, authorizationOptions);\n\n    return Response.redirect(authUrl);\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/caldav/discover.ts",
    "content": "import { caldavDiscoverSourceSchema } from \"@keeper.sh/data-schemas\";\nimport { createCalDAVClient } from \"@keeper.sh/calendar/caldav\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { safeFetchOptions } from \"@/utils/safe-fetch-options\";\nimport { widelog } from \"@/utils/logging\";\n\nconst POST = withWideEvent(\n  withAuth(async ({ request }) => {\n    const body = await request.json();\n\n    try {\n      const { serverUrl, username, password } = caldavDiscoverSourceSchema.assert(body);\n\n      const client = createCalDAVClient({\n        credentials: {\n          password,\n          username,\n        },\n        serverUrl,\n      }, safeFetchOptions);\n\n      const calendars = await client.discoverCalendars();\n      const authMethod = client.getResolvedAuthMethod() ?? \"basic\";\n\n      return Response.json({ calendars, authMethod });\n    } catch (error) {\n      if (error instanceof Error && error.message.includes(\"401\")) {\n        widelog.errorFields(error, { slug: \"caldav-auth-failed\" });\n        return ErrorResponse.unauthorized(\"Invalid credentials\").toResponse();\n      }\n\n      widelog.errorFields(error, { slug: \"caldav-connection-failed\" });\n      return ErrorResponse.badRequest(\"Failed to discover calendars\").toResponse();\n    }\n  }),\n);\n\nexport { POST };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/caldav/index.ts",
    "content": "import { createCalDAVSourceSchema } from \"@keeper.sh/data-schemas\";\nimport { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\nimport { caldavSourcesQuerySchema } from \"@/utils/request-query\";\nimport {\n  CalDAVSourceLimitError,\n  DuplicateCalDAVSourceError,\n  getUserCalDAVSources,\n  createCalDAVSource,\n} from \"@/utils/caldav-sources\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const query = Object.fromEntries(url.searchParams.entries());\n    const provider = url.searchParams.get(\"provider\");\n\n    if (!caldavSourcesQuerySchema.allows(query)) {\n      return ErrorResponse.badRequest(\"Invalid query params\").toResponse();\n    }\n\n    if (provider) {\n      const sources = await getUserCalDAVSources(userId, provider);\n      return Response.json(sources);\n    }\n\n    const sources = await getUserCalDAVSources(userId);\n    return Response.json(sources);\n  }),\n);\n\nconst POST = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    const body = await request.json();\n\n    try {\n      const data = createCalDAVSourceSchema.assert(body);\n\n      widelog.set(\"provider.name\", data.provider);\n\n      const source = await createCalDAVSource(userId, data);\n\n      return Response.json(source, { status: HTTP_STATUS.CREATED });\n    } catch (error) {\n      if (error instanceof CalDAVSourceLimitError) {\n        widelog.errorFields(error, { slug: \"account-limit-reached\" });\n        return ErrorResponse.paymentRequired(error.message).toResponse();\n      }\n      if (error instanceof DuplicateCalDAVSourceError) {\n        widelog.errorFields(error, { slug: \"duplicate-source\" });\n        return Response.json({ error: error.message }, { status: HTTP_STATUS.CONFLICT });\n      }\n\n      widelog.errorFields(error, { slug: \"caldav-connection-failed\" });\n      const fallbackMessage = \"Invalid request body\";\n      if (error instanceof Error) {\n        return ErrorResponse.badRequest(error.message).toResponse();\n      }\n      return ErrorResponse.badRequest(fallbackMessage).toResponse();\n    }\n  }),\n);\n\nexport { GET, POST };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/callback/[provider].ts",
    "content": "import { withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\nimport { buildRedirectUrl, OAuthError } from \"@/utils/oauth\";\nimport { oauthCallbackQuerySchema, providerParamSchema } from \"@/utils/request-query\";\nimport {\n  exchangeCodeForTokens,\n  fetchUserInfo,\n  validateState,\n} from \"@/utils/destinations\";\nimport { createOAuthSourceCredential } from \"@/utils/oauth-source-credentials\";\nimport { importOAuthAccountCalendars } from \"@/utils/oauth-sources\";\nimport { baseUrl } from \"@/context\";\n\nconst MS_PER_SECOND = 1000;\n\nconst GET = withWideEvent(async ({ request, params }) => {\n  if (!params.provider || !providerParamSchema.allows(params)) {\n    return ErrorResponse.notFound().toResponse();\n  }\n\n  widelog.set(\"provider.name\", params.provider);\n\n  const { provider } = params;\n\n  const errorUrl = buildRedirectUrl(\"/dashboard/integrations\", baseUrl, {\n    error: \"Failed to connect source\",\n    source: \"error\",\n  });\n\n  try {\n    const url = new URL(request.url);\n    const callbackQuery = Object.fromEntries(url.searchParams.entries());\n    const code = url.searchParams.get(\"code\");\n    const state = url.searchParams.get(\"state\");\n    const error = url.searchParams.get(\"error\");\n\n    if (!oauthCallbackQuerySchema.allows(callbackQuery)) {\n      throw new OAuthError(\"Invalid callback query parameters\", errorUrl);\n    }\n\n    if (error) {\n      throw new OAuthError(\"OAuth error from provider\", errorUrl);\n    }\n\n    if (!code || !state) {\n      throw new OAuthError(\"Missing code or state\", errorUrl);\n    }\n\n    const validatedState = await validateState(state);\n    if (!validatedState) {\n      throw new OAuthError(\"Invalid or expired state\", errorUrl);\n    }\n\n    const { userId } = validatedState;\n\n    const callbackUrl = new URL(`/api/sources/callback/${provider}`, baseUrl);\n    const tokens = await exchangeCodeForTokens(provider, code, callbackUrl.toString());\n\n    if (!tokens.refresh_token) {\n      throw new OAuthError(\"No refresh token\", errorUrl);\n    }\n\n    const userInfo = await fetchUserInfo(provider, tokens.access_token);\n    const expiresAt = new Date(Date.now() + tokens.expires_in * MS_PER_SECOND);\n\n    const credentialId = await createOAuthSourceCredential(userId, {\n      accessToken: tokens.access_token,\n      email: userInfo.email,\n      expiresAt,\n      provider,\n      refreshToken: tokens.refresh_token,\n    });\n\n    const accountId = await importOAuthAccountCalendars({\n      accessToken: tokens.access_token,\n      email: userInfo.email,\n      oauthCredentialId: credentialId,\n      provider,\n      userId,\n    });\n\n    const successUrl = buildRedirectUrl(`/dashboard/accounts/${accountId}/setup`, baseUrl);\n    return Response.redirect(successUrl.toString());\n  } catch (error) {\n    if (error instanceof OAuthError) {\n      widelog.errorFields(error, { slug: \"oauth-callback-failed\" });\n      return Response.redirect(error.redirectUrl.toString());\n    }\n\n    widelog.errorFields(error, { slug: \"unclassified\" });\n    return Response.redirect(errorUrl.toString());\n  }\n});\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/callback-state.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { consumeCallbackState } from \"@/utils/oauth-callback-state\";\nimport { callbackStateQuerySchema } from \"@/utils/request-query\";\n\nexport const GET = withWideEvent(\n  withAuth(async ({ request }) => {\n    const url = new URL(request.url);\n    const token = url.searchParams.get(\"token\");\n    const query = Object.fromEntries(url.searchParams.entries());\n\n    if (!token || !callbackStateQuerySchema.allows(query)) {\n      return ErrorResponse.badRequest(\"Token is required\").toResponse();\n    }\n\n    const state = await consumeCallbackState(token);\n\n    if (!state) {\n      return ErrorResponse.notFound().toResponse();\n    }\n\n    return Response.json(state);\n  }),\n);\n"
  },
  {
    "path": "services/api/src/routes/api/sources/google/[id]/destinations.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { getDestinationsForSource } from \"@/utils/source-destination-mappings\";\nimport { verifyOAuthSourceOwnership } from \"@/utils/oauth-sources\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    const { id: sourceId } = params;\n\n    if (!sourceId) {\n      return ErrorResponse.badRequest(\"Source ID is required\").toResponse();\n    }\n\n    const isOwner = await verifyOAuthSourceOwnership(userId, sourceId);\n    if (!isOwner) {\n      return ErrorResponse.notFound().toResponse();\n    }\n\n    const destinationIds = await getDestinationsForSource(userId, sourceId);\n    return Response.json({ destinationIds });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/google/calendars.ts",
    "content": "import { listUserCalendars, CalendarListError } from \"@keeper.sh/calendar/google\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { widelog } from \"@/utils/logging\";\nimport { listOAuthCalendars } from \"@/utils/oauth-calendar-listing\";\nimport {\n  refreshGoogleAccessToken,\n  refreshGoogleSourceAccessToken,\n} from \"@/utils/oauth-refresh\";\n\nconst GOOGLE_PROVIDER = \"google\";\n\nconst GET = withWideEvent(\n  withAuth(({ request, userId }) => {\n    widelog.set(\"provider.name\", \"google\");\n    return listOAuthCalendars(request, userId, {\n      isCalendarListError: (error): error is CalendarListError =>\n        error instanceof CalendarListError,\n      listCalendars: async (accessToken) => {\n        const calendars = await listUserCalendars(accessToken);\n        return calendars.map((calendar) => ({\n          id: calendar.id,\n          primary: calendar.primary,\n          summary: calendar.summary,\n        }));\n      },\n      provider: GOOGLE_PROVIDER,\n      refreshDestinationAccessToken: refreshGoogleAccessToken,\n      refreshSourceAccessToken: refreshGoogleSourceAccessToken,\n    });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/google/index.ts",
    "content": "import { createOAuthSourceSchema } from \"@keeper.sh/data-schemas\";\nimport { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\nimport {\n  OAuthSourceLimitError,\n  DestinationNotFoundError,\n  DestinationProviderMismatchError,\n  DuplicateSourceError,\n  getUserOAuthSources,\n  createOAuthSource,\n} from \"@/utils/oauth-sources\";\nimport { premiumService } from \"@/context\";\n\nconst GOOGLE_PROVIDER = \"google\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const sources = await getUserOAuthSources(userId, GOOGLE_PROVIDER);\n    return Response.json(sources);\n  }),\n);\n\nconst POST = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    widelog.set(\"provider.name\", \"google\");\n    const body = await request.json();\n\n    try {\n      const {\n        externalCalendarId,\n        name,\n        oauthSourceCredentialId,\n        syncFocusTime,\n        syncOutOfOffice,\n      } = createOAuthSourceSchema.assert(body);\n\n      const canFilter = await premiumService.canUseEventFilters(userId);\n\n      const source = await createOAuthSource({\n        ...(canFilter && !syncFocusTime && { excludeFocusTime: true }),\n        ...(canFilter && !syncOutOfOffice && { excludeOutOfOffice: true }),\n        externalCalendarId,\n        name,\n        oauthCredentialId: oauthSourceCredentialId ?? \"\",\n        provider: GOOGLE_PROVIDER,\n        userId,\n      });\n\n      return Response.json(source, { status: HTTP_STATUS.CREATED });\n    } catch (error) {\n      if (error instanceof OAuthSourceLimitError) {\n        widelog.errorFields(error, { slug: \"account-limit-reached\" });\n        return ErrorResponse.paymentRequired(error.message).toResponse();\n      }\n      if (error instanceof DestinationNotFoundError) {\n        return ErrorResponse.notFound(error.message).toResponse();\n      }\n      if (error instanceof DestinationProviderMismatchError) {\n        return ErrorResponse.badRequest(error.message).toResponse();\n      }\n      if (error instanceof DuplicateSourceError) {\n        widelog.errorFields(error, { slug: \"duplicate-source\" });\n        return Response.json({ error: error.message }, { status: HTTP_STATUS.CONFLICT });\n      }\n\n      return ErrorResponse.badRequest(\"Invalid request body\").toResponse();\n    }\n  }),\n);\n\nexport { GET, POST };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/index.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\nimport { createKeeperApi } from \"@/read-models\";\n\nconst keeperApi = createKeeperApi(database);\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) =>\n    Response.json(await keeperApi.listSources(userId))),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/outlook/[id]/destinations.ts",
    "content": "import { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { getDestinationsForSource } from \"@/utils/source-destination-mappings\";\nimport { verifyOAuthSourceOwnership } from \"@/utils/oauth-sources\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ params, userId }) => {\n    const { id: sourceId } = params;\n\n    if (!sourceId) {\n      return ErrorResponse.badRequest(\"Source ID is required\").toResponse();\n    }\n\n    const isOwner = await verifyOAuthSourceOwnership(userId, sourceId);\n    if (!isOwner) {\n      return ErrorResponse.notFound().toResponse();\n    }\n\n    const destinationIds = await getDestinationsForSource(userId, sourceId);\n    return Response.json({ destinationIds });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/outlook/calendars.ts",
    "content": "import { listUserCalendars, CalendarListError } from \"@keeper.sh/calendar/outlook\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { widelog } from \"@/utils/logging\";\nimport { listOAuthCalendars } from \"@/utils/oauth-calendar-listing\";\nimport {\n  refreshMicrosoftAccessToken,\n  refreshMicrosoftSourceAccessToken,\n} from \"@/utils/oauth-refresh\";\n\nconst OUTLOOK_PROVIDER = \"outlook\";\n\nconst GET = withWideEvent(\n  withAuth(({ request, userId }) => {\n    widelog.set(\"provider.name\", \"outlook\");\n    return listOAuthCalendars(request, userId, {\n      isCalendarListError: (error): error is CalendarListError =>\n        error instanceof CalendarListError,\n      listCalendars: async (accessToken) => {\n        const calendars = await listUserCalendars(accessToken);\n        return calendars.map(({ id, name, isDefaultCalendar }) => ({\n          id,\n          primary: Boolean(isDefaultCalendar),\n          summary: name,\n        }));\n      },\n      provider: OUTLOOK_PROVIDER,\n      refreshDestinationAccessToken: refreshMicrosoftAccessToken,\n      refreshSourceAccessToken: refreshMicrosoftSourceAccessToken,\n    });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/sources/outlook/index.ts",
    "content": "import { createOAuthSourceSchema } from \"@keeper.sh/data-schemas\";\nimport { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\nimport {\n  OAuthSourceLimitError,\n  DestinationNotFoundError,\n  DestinationProviderMismatchError,\n  DuplicateSourceError,\n  getUserOAuthSources,\n  createOAuthSource,\n} from \"@/utils/oauth-sources\";\n\nconst OUTLOOK_PROVIDER = \"outlook\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const sources = await getUserOAuthSources(userId, OUTLOOK_PROVIDER);\n    return Response.json(sources);\n  }),\n);\n\nconst POST = withWideEvent(\n  withAuth(async ({ request, userId }) => {\n    widelog.set(\"provider.name\", \"outlook\");\n    const body = await request.json();\n\n    try {\n      const { externalCalendarId, name, oauthSourceCredentialId } =\n        createOAuthSourceSchema.assert(body);\n      const source = await createOAuthSource({\n        externalCalendarId,\n        name,\n        oauthCredentialId: oauthSourceCredentialId ?? \"\",\n        provider: OUTLOOK_PROVIDER,\n        userId,\n      });\n      return Response.json(source, { status: HTTP_STATUS.CREATED });\n    } catch (error) {\n      if (error instanceof OAuthSourceLimitError) {\n        widelog.errorFields(error, { slug: \"account-limit-reached\" });\n        return ErrorResponse.paymentRequired(error.message).toResponse();\n      }\n      if (error instanceof DestinationNotFoundError) {\n        return ErrorResponse.notFound(error.message).toResponse();\n      }\n      if (error instanceof DestinationProviderMismatchError) {\n        return ErrorResponse.badRequest(error.message).toResponse();\n      }\n      if (error instanceof DuplicateSourceError) {\n        widelog.errorFields(error, { slug: \"duplicate-source\" });\n        return Response.json({ error: error.message }, { status: HTTP_STATUS.CONFLICT });\n      }\n\n      return ErrorResponse.badRequest(\"Invalid request body\").toResponse();\n    }\n  }),\n);\n\nexport { GET, POST };\n"
  },
  {
    "path": "services/api/src/routes/api/sync/status.ts",
    "content": "import { createKeeperApi } from \"@/read-models\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database);\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const destinations = await keeperApi.getSyncStatuses(userId);\n    return Response.json({ destinations });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/tokens/[id].ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { apiTokensTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { database } from \"@/context\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\n\nconst DELETE = withWideEvent(\n  withAuth(async ({ userId, params }) => {\n    const tokenId = params.id;\n\n    if (!tokenId) {\n      return ErrorResponse.badRequest(\"Token ID is required.\").toResponse();\n    }\n\n    const [deleted] = await database\n      .delete(apiTokensTable)\n      .where(\n        and(\n          eq(apiTokensTable.id, tokenId),\n          eq(apiTokensTable.userId, userId),\n        ),\n      )\n      .returning({ id: apiTokensTable.id });\n\n    if (!deleted) {\n      return ErrorResponse.notFound(\"Token not found.\").toResponse();\n    }\n\n    return new Response(null, { status: HTTP_STATUS.NO_CONTENT });\n  }),\n);\n\nexport { DELETE };\n"
  },
  {
    "path": "services/api/src/routes/api/tokens/index.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { apiTokensTable } from \"@keeper.sh/database/schema\";\nimport { desc, eq } from \"drizzle-orm\";\nimport { database } from \"@/context\";\nimport { withAuth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport {\n  generateApiToken,\n  hashApiToken,\n  extractTokenPrefix,\n} from \"@/utils/api-tokens\";\nimport { tokenCreateBodySchema } from \"@/utils/request-body\";\n\nconst GET = withWideEvent(\n  withAuth(async ({ userId }) => {\n    const tokens = await database\n      .select({\n        id: apiTokensTable.id,\n        name: apiTokensTable.name,\n        tokenPrefix: apiTokensTable.tokenPrefix,\n        lastUsedAt: apiTokensTable.lastUsedAt,\n        expiresAt: apiTokensTable.expiresAt,\n        createdAt: apiTokensTable.createdAt,\n      })\n      .from(apiTokensTable)\n      .where(eq(apiTokensTable.userId, userId))\n      .orderBy(desc(apiTokensTable.createdAt));\n\n    return Response.json(tokens);\n  }),\n);\n\nconst POST = withWideEvent(\n  withAuth(async ({ userId, request }) => {\n    const body = await request.json();\n\n    try {\n      const { name } = tokenCreateBodySchema.assert(body);\n\n      if (name.trim().length === 0) {\n        return ErrorResponse.badRequest(\"Token name cannot be empty.\").toResponse();\n      }\n\n      const plainToken = generateApiToken();\n      const tokenHash = hashApiToken(plainToken);\n      const tokenPrefix = extractTokenPrefix(plainToken);\n\n      const [created] = await database\n        .insert(apiTokensTable)\n        .values({\n          userId,\n          name: name.trim(),\n          tokenHash,\n          tokenPrefix,\n        })\n        .returning({\n          id: apiTokensTable.id,\n          name: apiTokensTable.name,\n          tokenPrefix: apiTokensTable.tokenPrefix,\n          createdAt: apiTokensTable.createdAt,\n        });\n\n      return Response.json(\n        {\n          ...created,\n          token: plainToken,\n        },\n        { status: HTTP_STATUS.CREATED },\n      );\n    } catch {\n      return ErrorResponse.badRequest(\"Token name is required.\").toResponse();\n    }\n  }),\n);\n\nexport { GET, POST };\n"
  },
  {
    "path": "services/api/src/routes/api/v1/accounts/index.ts",
    "content": "import { calendarAccountsTable, calendarsTable } from \"@keeper.sh/database/schema\";\nimport { and, asc, count, eq, inArray } from \"drizzle-orm\";\nimport { withV1Auth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\nimport { withAccountDisplay } from \"@/utils/provider-display\";\n\nconst GET = withWideEvent(\n  withV1Auth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const providerFilter = url.searchParams.get(\"provider\");\n\n    const conditions = [eq(calendarAccountsTable.userId, userId)];\n\n    if (providerFilter) {\n      const providers = providerFilter.split(\",\").filter(Boolean);\n      conditions.push(inArray(calendarAccountsTable.provider, providers));\n    }\n\n    const accounts = await database\n      .select({\n        id: calendarAccountsTable.id,\n        provider: calendarAccountsTable.provider,\n        displayName: calendarAccountsTable.displayName,\n        email: calendarAccountsTable.email,\n        accountIdentifier: calendarAccountsTable.accountId,\n        authType: calendarAccountsTable.authType,\n        needsReauthentication: calendarAccountsTable.needsReauthentication,\n        calendarCount: count(calendarsTable.id),\n        createdAt: calendarAccountsTable.createdAt,\n      })\n      .from(calendarAccountsTable)\n      .leftJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .where(and(...conditions))\n      .groupBy(calendarAccountsTable.id)\n      .orderBy(asc(calendarAccountsTable.createdAt));\n\n    return Response.json(accounts.map((account) => withAccountDisplay(account)));\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/v1/calendars/[calendarId]/invites.ts",
    "content": "import { normalizeDateRange, parseDateRangeParams } from \"@/utils/date-range\";\nimport { createKeeperApi } from \"@/read-models\";\nimport { withV1Auth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { database, oauthProviders, refreshLockStore, encryptionKey } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database, {\n  oauthTokenRefresher: oauthProviders,\n  refreshLockStore,\n  encryptionKey,\n});\n\nconst GET = withWideEvent(\n  withV1Auth(async ({ request, params, userId }) => {\n    const { calendarId } = params;\n    if (!calendarId) {\n      return ErrorResponse.badRequest(\"Calendar ID is required.\").toResponse();\n    }\n\n    const url = new URL(request.url);\n    const { from, to } = parseDateRangeParams(url);\n    const { start, end } = normalizeDateRange(from, to);\n\n    const invites = await keeperApi.getPendingInvites(\n      userId,\n      calendarId,\n      start.toISOString(),\n      end.toISOString(),\n    );\n\n    return Response.json(invites);\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/v1/calendars/index.ts",
    "content": "import { createKeeperApi } from \"@/read-models\";\nimport type { KeeperSource } from \"@/types\";\nimport { withV1Auth, withWideEvent } from \"@/utils/middleware\";\nimport { database } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database);\n\nconst toCalendar = (source: KeeperSource) => ({\n  id: source.id,\n  name: source.name,\n  provider: source.providerName,\n  account: source.accountLabel,\n});\n\nconst GET = withWideEvent(\n  withV1Auth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const providerFilter = url.searchParams.get(\"provider\");\n\n    let sources = await keeperApi.listSources(userId);\n\n    if (providerFilter) {\n      const providers = new Set(providerFilter.split(\",\").filter(Boolean));\n      sources = sources.filter((source) => providers.has(source.provider));\n    }\n\n    return Response.json(sources.map((source) => toCalendar(source)));\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/v1/events/[id].ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { createKeeperApi } from \"@/read-models\";\nimport { withV1Auth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { eventPatchBodySchema } from \"@/utils/request-body\";\nimport { database, oauthProviders, refreshLockStore, encryptionKey } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database, {\n  oauthTokenRefresher: oauthProviders,\n  refreshLockStore,\n  encryptionKey,\n});\n\nconst GET = withWideEvent(\n  withV1Auth(async ({ params, userId }) => {\n    const eventId = params.id;\n    if (!eventId) {\n      return ErrorResponse.badRequest(\"Event ID is required.\").toResponse();\n    }\n    const event = await keeperApi.getEvent(userId, eventId);\n\n    if (!event) {\n      return ErrorResponse.notFound(\"Event not found.\").toResponse();\n    }\n\n    return Response.json(event);\n  }),\n);\n\nconst PATCH = withWideEvent(\n  withV1Auth(async ({ request, params, userId }) => {\n    const eventId = params.id;\n    if (!eventId) {\n      return ErrorResponse.badRequest(\"Event ID is required.\").toResponse();\n    }\n\n    const body = await request.json();\n\n    try {\n      const validated = eventPatchBodySchema.assert(body);\n\n      if (validated.rsvpStatus) {\n        const result = await keeperApi.rsvpEvent(userId, eventId, validated.rsvpStatus);\n\n        if (!result.success) {\n          return ErrorResponse.badRequest(result.error ?? \"Failed to update RSVP status.\").toResponse();\n        }\n\n        return Response.json({ rsvpStatus: validated.rsvpStatus });\n      }\n\n      const result = await keeperApi.updateEvent(userId, eventId, {\n        title: validated.title,\n        description: validated.description,\n        location: validated.location,\n        startTime: validated.startTime,\n        endTime: validated.endTime,\n        isAllDay: validated.isAllDay,\n        availability: validated.availability,\n      });\n\n      if (!result.success) {\n        return ErrorResponse.badRequest(result.error ?? \"Failed to update event.\").toResponse();\n      }\n\n      const updated = await keeperApi.getEvent(userId, eventId);\n      return Response.json(updated);\n    } catch {\n      return ErrorResponse.badRequest(\"Invalid update data.\").toResponse();\n    }\n  }),\n);\n\nconst DELETE = withWideEvent(\n  withV1Auth(async ({ params, userId }) => {\n    const eventId = params.id;\n    if (!eventId) {\n      return ErrorResponse.badRequest(\"Event ID is required.\").toResponse();\n    }\n    const result = await keeperApi.deleteEvent(userId, eventId);\n\n    if (!result.success) {\n      return ErrorResponse.badRequest(result.error ?? \"Failed to delete event.\").toResponse();\n    }\n\n    return new Response(null, { status: HTTP_STATUS.NO_CONTENT });\n  }),\n);\n\nexport { GET, PATCH, DELETE };\n"
  },
  {
    "path": "services/api/src/routes/api/v1/events/index.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport { normalizeDateRange, parseDateRangeParams } from \"@/utils/date-range\";\nimport { createKeeperApi } from \"@/read-models\";\nimport type { KeeperEventFilters } from \"@/types\";\nimport { withV1Auth, withWideEvent } from \"@/utils/middleware\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { eventCreateBodySchema } from \"@/utils/request-body\";\nimport { database, oauthProviders, refreshLockStore, encryptionKey } from \"@/context\";\n\nconst keeperApi = createKeeperApi(database, {\n  oauthTokenRefresher: oauthProviders,\n  refreshLockStore,\n  encryptionKey,\n});\n\nconst parseEventFilters = (url: URL): KeeperEventFilters => {\n  const filters: KeeperEventFilters = {};\n\n  const calendarId = url.searchParams.get(\"calendarId\");\n  if (calendarId) {\n    filters.calendarId = calendarId.split(\",\").filter(Boolean);\n  }\n\n  const availability = url.searchParams.get(\"availability\");\n  if (availability) {\n    filters.availability = availability.split(\",\").filter(Boolean);\n  }\n\n  const isAllDay = url.searchParams.get(\"isAllDay\");\n  if (isAllDay === \"true\") {\n    filters.isAllDay = true;\n  } else if (isAllDay === \"false\") {\n    filters.isAllDay = false;\n  }\n\n  return filters;\n};\n\nconst GET = withWideEvent(\n  withV1Auth(async ({ request, userId }) => {\n    const url = new URL(request.url);\n    const { from, to } = parseDateRangeParams(url);\n    const { end, start } = normalizeDateRange(from, to);\n    const shouldCount = url.searchParams.get(\"count\") === \"true\";\n\n    if (shouldCount) {\n      const count = await keeperApi.getEventCount(userId, { from: start, to: end });\n      return Response.json({ count });\n    }\n\n    const filters = parseEventFilters(url);\n    const events = await keeperApi.getEventsInRange(\n      userId,\n      { from: start, to: end },\n      filters,\n    );\n    return Response.json(events);\n  }),\n);\n\nconst POST = withWideEvent(\n  withV1Auth(async ({ request, userId }) => {\n    const body = await request.json();\n\n    try {\n      const input = eventCreateBodySchema.assert(body);\n\n      const result = await keeperApi.createEvent(userId, input);\n\n      if (!result.success) {\n        return ErrorResponse.badRequest(result.error ?? \"Failed to create event.\").toResponse();\n      }\n\n      return Response.json(result.event ?? { created: true }, { status: HTTP_STATUS.CREATED });\n    } catch {\n      return ErrorResponse.badRequest(\"Invalid event data. calendarId, title, startTime, and endTime are required.\").toResponse();\n    }\n  }),\n);\n\nexport { GET, POST };\n"
  },
  {
    "path": "services/api/src/routes/api/v1/ical/index.ts",
    "content": "import { withV1Auth, withWideEvent } from \"@/utils/middleware\";\nimport { getUserIdentifierToken } from \"@/utils/user\";\nimport { baseUrl } from \"@/context\";\n\nconst getIcalUrl = (token: string): string => {\n  const url = new URL(`/api/cal/${token}.ics`, baseUrl);\n  return url.toString();\n};\n\nconst GET = withWideEvent(\n  withV1Auth(async ({ userId }) => {\n    const token = await getUserIdentifierToken(userId);\n    const icalUrl = getIcalUrl(token);\n    return Response.json({ url: icalUrl });\n  }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/api/src/routes/api/webhook/polar.ts",
    "content": "import { WebhookVerificationError, validateEvent } from \"@polar-sh/sdk/webhooks\";\nimport { ErrorResponse } from \"@/utils/responses\";\nimport { widelog } from \"@/utils/logging\";\nimport { database } from \"@/context\";\nimport env from \"@/env\";\nimport { userSubscriptionsTable } from \"@keeper.sh/database/schema\";\n\nconst HTTP_OK = 200;\n\nconst getPlanFromActiveStatus = (active: boolean): \"pro\" | \"free\" => {\n  if (active) {\n    return \"pro\";\n  }\n  return \"free\";\n};\n\nconst upsertSubscription = async (\n  userId: string,\n  plan: \"free\" | \"pro\",\n  polarSubscriptionId: string,\n): Promise<void> => {\n  await database\n    .insert(userSubscriptionsTable)\n    .values({\n      plan,\n      polarSubscriptionId,\n      userId,\n    })\n    .onConflictDoUpdate({\n      set: {\n        plan,\n        polarSubscriptionId,\n      },\n      target: userSubscriptionsTable.userId,\n    });\n};\n\nconst handleSubscriptionCreated = async (\n  userId: string | null,\n  subscriptionId: string,\n): Promise<Response> => {\n  if (!userId) {\n    return new Response(null, { status: HTTP_OK });\n  }\n\n  await upsertSubscription(userId, \"pro\", subscriptionId);\n  return new Response(null, { status: HTTP_OK });\n};\n\nconst handleSubscriptionUpdated = async (\n  userId: string | null,\n  subscriptionId: string,\n  isActive: boolean,\n): Promise<Response> => {\n  if (!userId) {\n    return new Response(null, { status: HTTP_OK });\n  }\n\n  const plan = getPlanFromActiveStatus(isActive);\n  await upsertSubscription(userId, plan, subscriptionId);\n  return new Response(null, { status: HTTP_OK });\n};\n\nconst handleSubscriptionCanceled = async (\n  userId: string | null,\n  subscriptionId: string,\n): Promise<Response> => {\n  if (!userId) {\n    return new Response(null, { status: HTTP_OK });\n  }\n\n  await upsertSubscription(userId, \"free\", subscriptionId);\n  return new Response(null, { status: HTTP_OK });\n};\n\nconst POST = async (request: Request): Promise<Response> => {\n  const webhookSecret = env.POLAR_WEBHOOK_SECRET;\n\n  if (!webhookSecret) {\n    return ErrorResponse.notImplemented().toResponse();\n  }\n\n  const body = await request.text();\n  const headers: Record<string, string> = {};\n  for (const [key, value] of request.headers.entries()) {\n    headers[key] = value;\n  }\n\n  try {\n    const event = validateEvent(body, headers, webhookSecret);\n\n    widelog.set(\"operation.type\", \"webhook\");\n    widelog.set(\"webhook.event_type\", event.type);\n    widelog.set(\"webhook.subscription_id\", event.data.id);\n\n    if (event.type === \"subscription.created\") {\n      const createdUserId = event.data.customer.externalId ?? null;\n      if (createdUserId) {\n        widelog.set(\"user.id\", createdUserId);\n      }\n      return handleSubscriptionCreated(\n        createdUserId,\n        event.data.id,\n      );\n    }\n\n    if (event.type === \"subscription.updated\") {\n      const updatedUserId = event.data.customer.externalId ?? null;\n      if (updatedUserId) {\n        widelog.set(\"user.id\", updatedUserId);\n      }\n      const plan = getPlanFromActiveStatus(event.data.status === \"active\");\n      widelog.set(\"webhook.resulting_plan\", plan);\n      return handleSubscriptionUpdated(\n        updatedUserId,\n        event.data.id,\n        event.data.status === \"active\",\n      );\n    }\n\n    if (event.type === \"subscription.canceled\") {\n      const canceledUserId = event.data.customer.externalId ?? null;\n      if (canceledUserId) {\n        widelog.set(\"user.id\", canceledUserId);\n      }\n      return handleSubscriptionCanceled(\n        canceledUserId,\n        event.data.id,\n      );\n    }\n\n    return new Response(null, { status: HTTP_OK });\n  } catch (error) {\n    if (error instanceof WebhookVerificationError) {\n      widelog.errorFields(error, { slug: \"webhook-signature-invalid\", retriable: false });\n      return ErrorResponse.unauthorized().toResponse();\n    }\n    throw error;\n  }\n};\n\nexport { POST };\n"
  },
  {
    "path": "services/api/src/types.ts",
    "content": "import type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\n\ntype KeeperDatabase = BunSQLDatabase;\n\ninterface KeeperEventRangeInput {\n  from: Date | string;\n  to: Date | string;\n}\n\ninterface KeeperEventFilters {\n  calendarId?: string[];\n  availability?: string[];\n  isAllDay?: boolean;\n}\n\ninterface KeeperSource {\n  id: string;\n  name: string;\n  calendarType: string;\n  capabilities: string[];\n  accountId: string;\n  provider: string;\n  displayName: string | null;\n  email: string | null;\n  accountIdentifier: string;\n  needsReauthentication: boolean;\n  includeInIcalFeed: boolean;\n  providerName: string;\n  providerIcon: string | null;\n  accountLabel: string;\n}\n\ninterface KeeperDestination {\n  id: string;\n  provider: string;\n  email: string | null;\n  needsReauthentication: boolean;\n}\n\ninterface KeeperMapping {\n  id: string;\n  sourceCalendarId: string;\n  destinationCalendarId: string;\n  createdAt: string;\n  calendarType: string;\n}\n\ninterface KeeperEvent {\n  id: string;\n  startTime: string;\n  endTime: string;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  calendarId: string;\n  calendarName: string;\n  calendarProvider: string;\n  calendarUrl: string | null;\n}\n\ninterface KeeperSyncStatus {\n  calendarId: string;\n  inSync: boolean;\n  lastSyncedAt: string | null;\n  localEventCount: number;\n  remoteEventCount: number;\n}\n\ninterface EventInput {\n  calendarId: string;\n  title: string;\n  description?: string;\n  location?: string;\n  startTime: string;\n  endTime: string;\n  isAllDay?: boolean;\n  availability?: \"busy\" | \"free\";\n}\n\ninterface EventUpdateInput {\n  title?: string;\n  description?: string;\n  location?: string;\n  startTime?: string;\n  endTime?: string;\n  isAllDay?: boolean;\n  availability?: \"busy\" | \"free\";\n}\n\ntype RsvpStatus = \"accepted\" | \"declined\" | \"tentative\";\n\ninterface EventActionResult {\n  success: boolean;\n  error?: string;\n}\n\ninterface EventCreateResult extends EventActionResult {\n  event?: KeeperEvent;\n}\n\ninterface PendingInvite {\n  sourceEventUid: string;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  startTime: string;\n  endTime: string;\n  isAllDay: boolean;\n  organizer: string | null;\n  calendarId: string;\n  provider: string;\n}\n\ninterface ProviderCredentials {\n  provider: string;\n  calendarId: string;\n  accountId: string;\n  externalCalendarId: string | null;\n  calendarUrl: string | null;\n  email: string | null;\n  oauth?: {\n    credentialId: string;\n    accessToken: string;\n    refreshToken: string;\n    expiresAt: Date;\n  };\n  caldav?: {\n    authMethod: string;\n    serverUrl: string;\n    username: string;\n    encryptedPassword: string;\n  };\n}\n\ninterface KeeperApi {\n  listSources: (userId: string) => Promise<KeeperSource[]>;\n  listDestinations: (userId: string) => Promise<KeeperDestination[]>;\n  listMappings: (userId: string) => Promise<KeeperMapping[]>;\n  getEventsInRange: (userId: string, range: KeeperEventRangeInput, filters?: KeeperEventFilters) => Promise<KeeperEvent[]>;\n  getEvent: (userId: string, eventId: string) => Promise<KeeperEvent | null>;\n  getEventCount: (userId: string, options?: { from?: Date; to?: Date }) => Promise<number>;\n  getSyncStatuses: (userId: string) => Promise<KeeperSyncStatus[]>;\n  createEvent: (userId: string, input: EventInput) => Promise<EventCreateResult>;\n  updateEvent: (userId: string, eventId: string, updates: EventUpdateInput) => Promise<EventActionResult>;\n  deleteEvent: (userId: string, eventId: string) => Promise<EventActionResult>;\n  rsvpEvent: (userId: string, eventId: string, status: RsvpStatus) => Promise<EventActionResult>;\n  getPendingInvites: (userId: string, calendarId: string, from: string, to: string) => Promise<PendingInvite[]>;\n}\n\nexport type {\n  EventActionResult,\n  EventCreateResult,\n  EventInput,\n  EventUpdateInput,\n  KeeperApi,\n  KeeperDatabase,\n  KeeperDestination,\n  KeeperEvent,\n  KeeperEventFilters,\n  KeeperEventRangeInput,\n  KeeperMapping,\n  KeeperSource,\n  KeeperSyncStatus,\n  PendingInvite,\n  ProviderCredentials,\n  RsvpStatus,\n};\n"
  },
  {
    "path": "services/api/src/utils/api-rate-limit.ts",
    "content": "import type Redis from \"ioredis\";\n\nconst FREE_DAILY_LIMIT = 25;\nconst SECONDS_PER_DAY = 86_400;\n\nconst buildDailyKey = (userId: string): string => {\n  const date = new Date().toISOString().slice(0, 10);\n  return `api_usage:${userId}:${date}`;\n};\n\ninterface RateLimitResult {\n  allowed: boolean;\n  remaining: number;\n  limit: number;\n}\n\nconst checkAndIncrementApiUsage = async (\n  redisClient: Redis,\n  userId: string,\n  plan: \"free\" | \"pro\" | null,\n): Promise<RateLimitResult> => {\n  if (plan === \"pro\") {\n    return { allowed: true, remaining: -1, limit: -1 };\n  }\n\n  const key = buildDailyKey(userId);\n  const currentCount = await redisClient.incr(key);\n\n  if (currentCount === 1) {\n    await redisClient.expire(key, SECONDS_PER_DAY);\n  }\n\n  const allowed = currentCount <= FREE_DAILY_LIMIT;\n  const remaining = Math.max(0, FREE_DAILY_LIMIT - currentCount);\n\n  return { allowed, remaining, limit: FREE_DAILY_LIMIT };\n};\n\nexport { checkAndIncrementApiUsage, FREE_DAILY_LIMIT };\nexport type { RateLimitResult };\n"
  },
  {
    "path": "services/api/src/utils/api-tokens.ts",
    "content": "import { randomBytes, createHash } from \"node:crypto\";\n\nconst TOKEN_PREFIX = \"kpr_\";\nconst TOKEN_BYTES = 32;\nconst DISPLAY_PREFIX_LENGTH = 12;\n\nconst generateApiToken = (): string => TOKEN_PREFIX + randomBytes(TOKEN_BYTES).toString(\"hex\");\n\nconst hashApiToken = (token: string): string => createHash(\"sha256\").update(token).digest(\"hex\");\n\nconst extractTokenPrefix = (token: string): string => token.slice(0, DISPLAY_PREFIX_LENGTH);\n\nconst isApiToken = (value: string): boolean => value.startsWith(TOKEN_PREFIX);\n\nexport { generateApiToken, hashApiToken, extractTokenPrefix, isApiToken };\n"
  },
  {
    "path": "services/api/src/utils/background-task.ts",
    "content": "import { context, widelog } from \"@/utils/logging\";\n\ntype BackgroundJobCallback<TResult> = () => Promise<TResult>;\n\nconst spawnBackgroundJob = <TResult>(\n  jobName: string,\n  fields: Record<string, unknown>,\n  callback: BackgroundJobCallback<TResult>,\n): Promise<void> =>\n  context(async () => {\n    widelog.set(\"operation.name\", jobName);\n    widelog.set(\"operation.type\", \"background-job\");\n    widelog.set(\"request.id\", crypto.randomUUID());\n    widelog.setFields(fields);\n\n    try {\n      await widelog.time.measure(\"duration_ms\", () => callback());\n      widelog.set(\"outcome\", \"success\");\n    } catch (error) {\n      widelog.set(\"outcome\", \"error\");\n      widelog.errorFields(error, { slug: \"unclassified\" });\n    } finally {\n      widelog.flush();\n    }\n  });\n\nexport { spawnBackgroundJob };\n"
  },
  {
    "path": "services/api/src/utils/caldav-sources.ts",
    "content": "import {\n  caldavCredentialsTable,\n  calendarAccountsTable,\n  calendarsTable,\n  sourceDestinationMappingsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, count, eq, inArray, sql } from \"drizzle-orm\";\nimport { encryptPassword } from \"@keeper.sh/database\";\nimport { database, premiumService, encryptionKey } from \"@/context\";\nimport { enqueuePushSync } from \"./enqueue-push-sync\";\nimport { applySourceSyncDefaults } from \"./source-sync-defaults\";\n\nconst FIRST_RESULT_LIMIT = 1;\nconst CALDAV_CALENDAR_TYPE = \"caldav\";\nconst USER_ACCOUNT_LOCK_NAMESPACE = 9002;\ntype CaldavSourceDatabase = Pick<\n  typeof database,\n  \"insert\" | \"select\" | \"selectDistinct\"\n>;\n\nclass CalDAVSourceLimitError extends Error {\n  constructor() {\n    super(\"Account limit reached. Upgrade to Pro for unlimited accounts.\");\n  }\n}\n\nclass DuplicateCalDAVSourceError extends Error {\n  constructor() {\n    super(\"This calendar is already added as a source\");\n  }\n}\n\ninterface CalDAVSource {\n  id: string;\n  accountId: string;\n  userId: string;\n  name: string;\n  provider: string;\n  calendarUrl: string;\n  serverUrl: string;\n  username: string;\n  createdAt: Date;\n}\n\ninterface CreateCalDAVSourceData {\n  authMethod: string;\n  calendarUrl: string;\n  name: string;\n  password: string;\n  provider: string;\n  serverUrl: string;\n  username: string;\n}\n\nconst findReusableCalDAVAccount = async (\n  databaseClient: CaldavSourceDatabase,\n  userId: string,\n  provider: string,\n  serverUrl: string,\n  username: string,\n): Promise<{ id: string; caldavCredentialId: string | null } | undefined> => {\n  const [account] = await databaseClient\n    .select({\n      id: calendarAccountsTable.id,\n      caldavCredentialId: calendarAccountsTable.caldavCredentialId,\n    })\n    .from(calendarAccountsTable)\n    .innerJoin(\n      caldavCredentialsTable,\n      eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarAccountsTable.userId, userId),\n        eq(calendarAccountsTable.provider, provider),\n        eq(caldavCredentialsTable.serverUrl, serverUrl),\n        eq(caldavCredentialsTable.username, username),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return account;\n};\n\nconst createCalDAVAccount = async (\n  databaseClient: CaldavSourceDatabase,\n  userId: string,\n  data: CreateCalDAVSourceData,\n  resolvedEncryptionKey: string,\n): Promise<string> => {\n  const encryptedPassword = encryptPassword(data.password, resolvedEncryptionKey);\n\n  const [credential] = await databaseClient\n    .insert(caldavCredentialsTable)\n    .values({\n      authMethod: data.authMethod,\n      encryptedPassword,\n      serverUrl: data.serverUrl,\n      username: data.username,\n    })\n    .returning({ id: caldavCredentialsTable.id });\n\n  if (!credential) {\n    throw new Error(\"Failed to create CalDAV source credential\");\n  }\n\n  const [account] = await databaseClient\n    .insert(calendarAccountsTable)\n    .values({\n      authType: \"caldav\",\n      caldavCredentialId: credential.id,\n      displayName: data.username,\n      provider: data.provider,\n      userId,\n    })\n    .returning({ id: calendarAccountsTable.id });\n\n  if (!account) {\n    throw new Error(\"Failed to create calendar account\");\n  }\n\n  return account.id;\n};\n\nconst getUserCalDAVSources = async (userId: string, provider?: string): Promise<CalDAVSource[]> => {\n  const conditions = [\n    eq(calendarsTable.userId, userId),\n    eq(calendarsTable.calendarType, CALDAV_CALENDAR_TYPE),\n    inArray(calendarsTable.id,\n      database.selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n        .from(sourceDestinationMappingsTable)\n    ),\n  ];\n\n  if (provider) {\n    conditions.push(eq(calendarAccountsTable.provider, provider));\n  }\n\n  const sources = await database\n    .select({\n      accountId: calendarAccountsTable.id,\n      calendarUrl: calendarsTable.calendarUrl,\n      createdAt: calendarsTable.createdAt,\n      id: calendarsTable.id,\n      name: calendarsTable.name,\n      provider: calendarAccountsTable.provider,\n      serverUrl: caldavCredentialsTable.serverUrl,\n      userId: calendarsTable.userId,\n      username: caldavCredentialsTable.username,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(\n      caldavCredentialsTable,\n      eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id),\n    )\n    .where(and(...conditions));\n\n  return sources.map((source) => {\n    if (!source.calendarUrl) {\n      throw new Error(`CalDAV source ${source.id} is missing calendarUrl`);\n    }\n    return {\n      ...source,\n      calendarUrl: source.calendarUrl,\n      provider: source.provider,\n    };\n  });\n};\n\nconst countUserAccountsWithDatabase = async (\n  databaseClient: CaldavSourceDatabase,\n  userId: string,\n): Promise<number> => {\n  const [result] = await databaseClient\n    .select({ value: count() })\n    .from(calendarAccountsTable)\n    .where(eq(calendarAccountsTable.userId, userId));\n\n  return result?.value ?? 0;\n};\n\nconst createCalDAVSource = async (\n  userId: string,\n  data: CreateCalDAVSourceData,\n): Promise<CalDAVSource> => {\n  if (!encryptionKey) {\n    throw new Error(\"Encryption key not configured\");\n  }\n\n  const resolvedEncryptionKey = encryptionKey;\n\n  const result = await database.transaction(async (tx) => {\n    await tx.execute(\n      sql`select pg_advisory_xact_lock(${USER_ACCOUNT_LOCK_NAMESPACE}, hashtext(${userId}))`,\n    );\n\n    const [existingSource] = await tx\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.userId, userId),\n          eq(calendarsTable.calendarUrl, data.calendarUrl),\n          eq(calendarsTable.calendarType, CALDAV_CALENDAR_TYPE),\n        ),\n      )\n      .limit(FIRST_RESULT_LIMIT);\n\n    if (existingSource) {\n      throw new DuplicateCalDAVSourceError();\n    }\n\n    const existingAccount = await findReusableCalDAVAccount(\n      tx,\n      userId,\n      data.provider,\n      data.serverUrl,\n      data.username,\n    );\n\n    if (!existingAccount) {\n      const existingAccountCount = await countUserAccountsWithDatabase(tx, userId);\n      const allowed = await premiumService.canAddAccount(userId, existingAccountCount);\n\n      if (!allowed) {\n        throw new CalDAVSourceLimitError();\n      }\n    }\n\n    const accountId = existingAccount?.id ??\n      await createCalDAVAccount(tx, userId, data, resolvedEncryptionKey);\n\n    const [source] = await tx\n      .insert(calendarsTable)\n      .values(applySourceSyncDefaults({\n        accountId,\n        calendarType: CALDAV_CALENDAR_TYPE,\n        capabilities: [\"pull\", \"push\"],\n        calendarUrl: data.calendarUrl,\n        name: data.name,\n        originalName: data.name,\n        userId,\n      }))\n      .returning();\n\n    if (!source) {\n      throw new Error(\"Failed to create CalDAV source\");\n    }\n\n    return {\n      accountId,\n      calendarUrl: data.calendarUrl,\n      createdAt: source.createdAt,\n      id: source.id,\n      name: source.name,\n      provider: data.provider,\n      serverUrl: data.serverUrl,\n      userId: source.userId,\n      username: data.username,\n    };\n  });\n\n  const plan = await premiumService.getUserPlan(userId);\n  if (!plan) {\n    throw new Error(\"Unable to resolve user plan for sync enqueue\");\n  }\n  await enqueuePushSync(userId, plan);\n\n  return result;\n};\n\nconst verifyCalDAVSourceOwnership = async (userId: string, calendarId: string): Promise<boolean> => {\n  const [source] = await database\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.id, calendarId),\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.calendarType, CALDAV_CALENDAR_TYPE),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return Boolean(source);\n};\n\nexport {\n  CalDAVSourceLimitError,\n  DuplicateCalDAVSourceError,\n  getUserCalDAVSources,\n  createCalDAVSource,\n  verifyCalDAVSourceOwnership,\n};\n"
  },
  {
    "path": "services/api/src/utils/caldav.ts",
    "content": "import { calendarAccountsTable } from \"@keeper.sh/database/schema\";\nimport { createCalDAVClient } from \"@keeper.sh/calendar/caldav\";\nimport { encryptPassword } from \"@keeper.sh/database\";\nimport { isCalDAVProvider } from \"@keeper.sh/calendar\";\nimport type { CalDAVProviderId } from \"@keeper.sh/calendar\";\nimport { and, eq, sql } from \"drizzle-orm\";\nimport { saveCalDAVDestinationWithDatabase } from \"./destinations\";\nimport { enqueuePushSync } from \"./enqueue-push-sync\";\nimport { safeFetchOptions } from \"./safe-fetch-options\";\nimport { database, encryptionKey, premiumService } from \"@/context\";\n\nconst USER_ACCOUNT_LOCK_NAMESPACE = 9002;\n\nclass DestinationLimitError extends Error {\n  constructor() {\n    super(\"Account limit reached. Upgrade to Pro for unlimited accounts.\");\n  }\n}\n\nclass CalDAVConnectionError extends Error {\n  constructor(cause?: unknown) {\n    super(\"Failed to connect. Check credentials and server URL.\");\n    this.cause = cause;\n  }\n}\n\ninterface CalDAVCredentials {\n  username: string;\n  password: string;\n}\n\ninterface DiscoveredCalendar {\n  url: string;\n  displayName: string | undefined;\n}\n\ninterface DiscoveryResult {\n  calendars: DiscoveredCalendar[];\n  authMethod: string;\n}\n\nconst isValidProvider = (provider: string): provider is CalDAVProviderId =>\n  isCalDAVProvider(provider);\n\nconst discoverCalendars = async (\n  serverUrl: string,\n  credentials: CalDAVCredentials,\n): Promise<DiscoveryResult> => {\n  try {\n    const client = createCalDAVClient({\n      credentials,\n      serverUrl,\n    }, safeFetchOptions);\n\n    const calendars = await client.discoverCalendars();\n\n    return {\n      calendars: calendars.map((calendar) => ({\n        displayName: calendar.displayName,\n        url: calendar.url,\n      })),\n      authMethod: client.getResolvedAuthMethod() ?? \"basic\",\n    };\n  } catch (error) {\n    throw new CalDAVConnectionError(error);\n  }\n};\n\nconst validateCredentials = async (\n  serverUrl: string,\n  credentials: CalDAVCredentials,\n): Promise<string> => {\n  const client = createCalDAVClient({\n    credentials,\n    serverUrl,\n  });\n\n  await client.discoverCalendars();\n  return client.getResolvedAuthMethod() ?? \"basic\";\n};\n\nconst createCalDAVDestination = async (\n  userId: string,\n  provider: CalDAVProviderId,\n  serverUrl: string,\n  credentials: CalDAVCredentials,\n  calendarUrl: string,\n): Promise<void> => {\n  const authMethod = await validateCredentials(serverUrl, credentials).catch((error) => {\n    throw new CalDAVConnectionError(error);\n  });\n\n  if (!encryptionKey) {\n    throw new Error(\"ENCRYPTION_KEY must be set to use CalDAV destinations\");\n  }\n\n  const encrypted = encryptPassword(credentials.password, encryptionKey);\n  const serverHost = new URL(serverUrl).host;\n  const accountId = `${credentials.username}@${serverHost}`;\n\n  await database.transaction(async (tx) => {\n    await tx.execute(\n      sql`select pg_advisory_xact_lock(${USER_ACCOUNT_LOCK_NAMESPACE}, hashtext(${userId}))`,\n    );\n\n    const [existingAccount] = await tx\n      .select({ id: calendarAccountsTable.id })\n      .from(calendarAccountsTable)\n      .where(\n        and(\n          eq(calendarAccountsTable.userId, userId),\n          eq(calendarAccountsTable.provider, provider),\n          eq(calendarAccountsTable.accountId, accountId),\n        ),\n      )\n      .limit(1);\n\n    if (!existingAccount) {\n      const existingAccounts = await tx\n        .select({ id: calendarAccountsTable.id })\n        .from(calendarAccountsTable)\n        .where(eq(calendarAccountsTable.userId, userId));\n\n      const allowed = await premiumService.canAddAccount(userId, existingAccounts.length);\n      if (!allowed) {\n        throw new DestinationLimitError();\n      }\n    }\n\n    await saveCalDAVDestinationWithDatabase(\n      tx,\n      userId,\n      provider,\n      accountId,\n      credentials.username,\n      serverUrl,\n      calendarUrl,\n      credentials.username,\n      encrypted,\n      authMethod,\n    );\n  });\n\n  const plan = await premiumService.getUserPlan(userId);\n  if (!plan) {\n    throw new Error(\"Unable to resolve user plan for sync enqueue\");\n  }\n  await enqueuePushSync(userId, plan);\n};\n\nconst extractServerHost = (serverUrl: string): string | null => {\n  try {\n    return new URL(serverUrl).host;\n  } catch {\n    return null;\n  }\n};\n\nexport {\n  DestinationLimitError,\n  CalDAVConnectionError,\n  extractServerHost,\n  isValidProvider,\n  discoverCalendars,\n  createCalDAVDestination,\n};\n"
  },
  {
    "path": "services/api/src/utils/date-range.ts",
    "content": "import { MS_PER_WEEK } from \"@keeper.sh/constants\";\n\nconst HOURS_START_OF_DAY = 0;\nconst MINUTES_START = 0;\nconst SECONDS_START = 0;\nconst MILLISECONDS_START = 0;\nconst HOURS_END_OF_DAY = 23;\nconst MINUTES_END = 59;\nconst SECONDS_END = 59;\nconst MILLISECONDS_END = 999;\n\ninterface DateRange {\n  from: Date;\n  to: Date;\n}\n\ninterface NormalizedDateRange {\n  start: Date;\n  end: Date;\n}\n\nconst parseFromParam = (fromParam: string | null, fallback: Date): Date => {\n  if (fromParam) {\n    return new Date(fromParam);\n  }\n  return fallback;\n};\n\nconst parseToParam = (toParam: string | null, from: Date): Date => {\n  if (toParam) {\n    return new Date(toParam);\n  }\n  return new Date(from.getTime() + MS_PER_WEEK);\n};\n\nconst parseDateRangeParams = (url: URL): DateRange => {\n  const fromParam = url.searchParams.get(\"from\");\n  const toParam = url.searchParams.get(\"to\");\n\n  const now = new Date();\n  const from = parseFromParam(fromParam, now);\n  const to = parseToParam(toParam, from);\n\n  return { from, to };\n};\n\nconst normalizeDateRange = (from: Date, to: Date): NormalizedDateRange => {\n  const start = new Date(from);\n  start.setHours(HOURS_START_OF_DAY, MINUTES_START, SECONDS_START, MILLISECONDS_START);\n\n  const end = new Date(to);\n  end.setHours(HOURS_END_OF_DAY, MINUTES_END, SECONDS_END, MILLISECONDS_END);\n\n  return { end, start };\n};\n\nexport { parseDateRangeParams, normalizeDateRange };\nexport type { DateRange, NormalizedDateRange };\n"
  },
  {
    "path": "services/api/src/utils/destinations.ts",
    "content": "import {\n  caldavCredentialsTable,\n  calendarAccountsTable,\n  calendarsTable,\n  oauthCredentialsTable,\n  sourceDestinationMappingsTable,\n  syncStatusTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport type {\n  AuthorizationUrlOptions,\n  OAuthTokens,\n  NormalizedUserInfo as OAuthUserInfo,\n  ValidatedState,\n} from \"@keeper.sh/calendar\";\nimport { database, oauthProviders, redis } from \"@/context\";\nimport { invalidateCalendarsForAccount } from \"@/utils/invalidate-calendars\";\n\nconst FIRST_RESULT_LIMIT = 1;\nconst EMPTY_RESULT_COUNT = 0;\ntype DestinationDatabase = Pick<typeof database, \"delete\" | \"insert\" | \"select\" | \"selectDistinct\" | \"update\">;\n\nconst isOAuthProvider = (provider: string): boolean => oauthProviders.isOAuthProvider(provider);\n\nconst hasRequiredScopes = (provider: string, grantedScopes: string): boolean =>\n  oauthProviders.hasRequiredScopes(provider, grantedScopes);\n\nconst getOAuthProviderOrThrow = (provider: string) => {\n  const oauthProvider = oauthProviders.getProvider(provider);\n  if (!oauthProvider) {\n    throw new Error(`OAuth provider not found: ${provider}`);\n  }\n  return oauthProvider;\n};\n\nconst getAuthorizationUrl = (\n  provider: string,\n  userId: string,\n  options: AuthorizationUrlOptions,\n): Promise<string> => getOAuthProviderOrThrow(provider).getAuthorizationUrl(userId, options);\n\nconst exchangeCodeForTokens = (\n  provider: string,\n  code: string,\n  callbackUrl: string,\n): Promise<OAuthTokens> => getOAuthProviderOrThrow(provider).exchangeCodeForTokens(code, callbackUrl);\n\nconst fetchUserInfo = (provider: string, accessToken: string): Promise<OAuthUserInfo> =>\n  getOAuthProviderOrThrow(provider).fetchUserInfo(accessToken);\n\nconst validateState = (state: string): Promise<ValidatedState | null> => oauthProviders.validateState(state);\n\ninterface CalendarDestination {\n  id: string;\n  provider: string;\n  email: string | null;\n  needsReauthentication: boolean;\n}\n\ninterface ExistingAccount {\n  id: string;\n  userId: string;\n  oauthCredentialId: string | null;\n  caldavCredentialId: string | null;\n}\n\nconst findExistingAccount = async (\n  databaseClient: DestinationDatabase,\n  provider: string,\n  accountId: string,\n): Promise<ExistingAccount | undefined> => {\n  const [account] = await databaseClient\n    .select({\n      caldavCredentialId: calendarAccountsTable.caldavCredentialId,\n      id: calendarAccountsTable.id,\n      oauthCredentialId: calendarAccountsTable.oauthCredentialId,\n      userId: calendarAccountsTable.userId,\n    })\n    .from(calendarAccountsTable)\n    .where(\n      and(\n        eq(calendarAccountsTable.provider, provider),\n        eq(calendarAccountsTable.accountId, accountId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return account;\n};\n\nconst validateAccountOwnership = (\n  existingAccount: ExistingAccount | undefined,\n  userId: string,\n): void => {\n  if (existingAccount && existingAccount.userId !== userId) {\n    throw new Error(\"This account is already linked to another user\");\n  }\n};\n\nconst initializeSyncStatusWithDatabase = async (\n  databaseClient: DestinationDatabase,\n  calendarId: string,\n): Promise<void> => {\n  await databaseClient.insert(syncStatusTable).values({ calendarId }).onConflictDoNothing();\n};\n\nconst setupNewDestinationWithDatabase = async (\n  databaseClient: DestinationDatabase,\n  calendarId: string,\n): Promise<void> => {\n  await initializeSyncStatusWithDatabase(databaseClient, calendarId);\n};\n\ninterface AccountInsertData {\n  userId: string;\n  provider: string;\n  accountId: string;\n  email: string | null;\n  oauthCredentialId?: string;\n  caldavCredentialId?: string;\n  needsReauthentication?: boolean;\n}\n\nconst upsertAccountAndCalendarWithDatabase = async (\n  databaseClient: DestinationDatabase,\n  data: AccountInsertData,\n): Promise<string | undefined> => {\n  const { oauthCredentialId, caldavCredentialId, needsReauthentication, ...base } = data;\n\n  const setClause: Record<string, unknown> = { email: base.email };\n\n  if (oauthCredentialId) {\n    setClause.oauthCredentialId = oauthCredentialId;\n    setClause.needsReauthentication = needsReauthentication ?? false;\n  }\n  if (caldavCredentialId) {\n    setClause.caldavCredentialId = caldavCredentialId;\n  }\n\n  let authType = \"caldav\";\n  if (oauthCredentialId) {\n    authType = \"oauth\";\n  }\n\n  const [account] = await databaseClient\n    .insert(calendarAccountsTable)\n    .values({\n      accountId: base.accountId,\n      authType,\n      caldavCredentialId,\n      email: base.email,\n      needsReauthentication,\n      oauthCredentialId,\n      provider: base.provider,\n      userId: base.userId,\n    })\n    .onConflictDoUpdate({\n      set: setClause,\n      target: [calendarAccountsTable.provider, calendarAccountsTable.accountId],\n    })\n    .returning({ id: calendarAccountsTable.id });\n\n  if (!account) {\n    return;\n  }\n\n  const [existingCalendar] = await databaseClient\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.accountId, account.id),\n        inArray(calendarsTable.id,\n          databaseClient.selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n            .from(sourceDestinationMappingsTable)\n        ),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (existingCalendar) {\n    return existingCalendar.id;\n  }\n\n  const [calendar] = await databaseClient\n    .insert(calendarsTable)\n    .values({\n      accountId: account.id,\n      calendarType: authType,\n      capabilities: [\"pull\", \"push\"],\n      name: `${base.provider} destination`,\n      userId: base.userId,\n    })\n    .returning({ id: calendarsTable.id });\n\n  return calendar?.id;\n};\n\nconst saveCalendarDestinationWithDatabase = async (\n  databaseClient: DestinationDatabase,\n  userId: string,\n  provider: string,\n  accountId: string,\n  email: string | null,\n  accessToken: string,\n  refreshToken: string,\n  expiresAt: Date,\n  needsReauthentication = false,\n): Promise<void> => {\n  const existingAccount = await findExistingAccount(databaseClient, provider, accountId);\n  validateAccountOwnership(existingAccount, userId);\n\n  if (existingAccount?.oauthCredentialId) {\n    await databaseClient\n      .update(oauthCredentialsTable)\n      .set({ accessToken, expiresAt, refreshToken })\n      .where(eq(oauthCredentialsTable.id, existingAccount.oauthCredentialId));\n\n    await databaseClient\n      .update(calendarAccountsTable)\n      .set({ email, needsReauthentication })\n      .where(eq(calendarAccountsTable.id, existingAccount.id));\n\n    const [existingCalendar] = await databaseClient\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.accountId, existingAccount.id),\n          inArray(calendarsTable.id,\n            databaseClient.selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n              .from(sourceDestinationMappingsTable)\n          ),\n        ),\n      )\n      .limit(FIRST_RESULT_LIMIT);\n\n    if (existingCalendar) {\n      await initializeSyncStatusWithDatabase(databaseClient, existingCalendar.id);\n    }\n    return;\n  }\n\n  const [credential] = await databaseClient\n    .insert(oauthCredentialsTable)\n    .values({ accessToken, email, expiresAt, provider, refreshToken, userId })\n    .returning({ id: oauthCredentialsTable.id });\n\n  if (!credential) {\n    throw new Error(\"Failed to create OAuth credentials\");\n  }\n\n  const calendarId = await upsertAccountAndCalendarWithDatabase(databaseClient, {\n    accountId,\n    email,\n    needsReauthentication,\n    oauthCredentialId: credential.id,\n    provider,\n    userId,\n  });\n\n  if (calendarId) {\n    await setupNewDestinationWithDatabase(databaseClient, calendarId);\n  }\n};\n\nconst saveCalendarDestination = (\n  userId: string,\n  provider: string,\n  accountId: string,\n  email: string | null,\n  accessToken: string,\n  refreshToken: string,\n  expiresAt: Date,\n  needsReauthentication = false,\n): Promise<void> =>\n  saveCalendarDestinationWithDatabase(\n    database,\n    userId,\n    provider,\n    accountId,\n    email,\n    accessToken,\n    refreshToken,\n    expiresAt,\n    needsReauthentication,\n  );\n\nconst listCalendarDestinations = async (userId: string): Promise<CalendarDestination[]> => {\n  const accounts = await database\n    .select({\n      email: calendarAccountsTable.email,\n      id: calendarAccountsTable.id,\n      needsReauthentication: calendarAccountsTable.needsReauthentication,\n      provider: calendarAccountsTable.provider,\n    })\n    .from(calendarAccountsTable)\n    .innerJoin(calendarsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(\n      and(\n        eq(calendarAccountsTable.userId, userId),\n        inArray(calendarsTable.id,\n          database.selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n            .from(sourceDestinationMappingsTable)\n        ),\n      ),\n    );\n\n  return accounts;\n};\n\nconst deleteCalendarDestination = async (\n  userId: string,\n  accountId: string,\n): Promise<boolean> => {\n  await invalidateCalendarsForAccount(database, redis, accountId);\n\n  const result = await database\n    .delete(calendarAccountsTable)\n    .where(\n      and(\n        eq(calendarAccountsTable.userId, userId),\n        eq(calendarAccountsTable.id, accountId),\n      ),\n    )\n    .returning({ id: calendarAccountsTable.id });\n\n  return result.length > EMPTY_RESULT_COUNT;\n};\n\nconst getAccountExternalId = async (userId: string, accountId: string): Promise<string | null> => {\n  const [account] = await database\n    .select({ accountId: calendarAccountsTable.accountId })\n    .from(calendarAccountsTable)\n    .where(\n      and(\n        eq(calendarAccountsTable.id, accountId),\n        eq(calendarAccountsTable.userId, userId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (account?.accountId) {\n    return account.accountId;\n  }\n  return null;\n};\n\nconst saveCalDAVDestinationWithDatabase = async (\n  databaseClient: DestinationDatabase,\n  userId: string,\n  provider: string,\n  accountId: string,\n  email: string,\n  serverUrl: string,\n  calendarUrl: string,\n  username: string,\n  encryptedPassword: string,\n  authMethod: string,\n): Promise<void> => {\n  const existingAccount = await findExistingAccount(databaseClient, provider, accountId);\n  validateAccountOwnership(existingAccount, userId);\n\n  if (existingAccount?.caldavCredentialId) {\n    await databaseClient\n      .update(caldavCredentialsTable)\n      .set({ authMethod, encryptedPassword, serverUrl, username })\n      .where(eq(caldavCredentialsTable.id, existingAccount.caldavCredentialId));\n\n    await databaseClient\n      .update(calendarAccountsTable)\n      .set({ email })\n      .where(eq(calendarAccountsTable.id, existingAccount.id));\n\n    const [existingCalendar] = await databaseClient\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.accountId, existingAccount.id),\n          inArray(calendarsTable.id,\n            databaseClient.selectDistinct({ id: sourceDestinationMappingsTable.destinationCalendarId })\n              .from(sourceDestinationMappingsTable)\n          ),\n        ),\n      )\n      .limit(FIRST_RESULT_LIMIT);\n\n    if (existingCalendar) {\n      await databaseClient\n        .update(calendarsTable)\n        .set({ calendarUrl })\n        .where(eq(calendarsTable.id, existingCalendar.id));\n      await initializeSyncStatusWithDatabase(databaseClient, existingCalendar.id);\n    }\n    return;\n  }\n\n  const [credential] = await databaseClient\n    .insert(caldavCredentialsTable)\n    .values({ authMethod, encryptedPassword, serverUrl, username })\n    .returning({ id: caldavCredentialsTable.id });\n\n  if (!credential) {\n    throw new Error(\"Failed to create CalDAV credentials\");\n  }\n\n  const [account] = await databaseClient\n    .insert(calendarAccountsTable)\n    .values({\n      accountId,\n      authType: \"caldav\",\n      caldavCredentialId: credential.id,\n      email,\n      provider,\n      userId,\n    })\n    .returning({ id: calendarAccountsTable.id });\n\n  if (!account) {\n    throw new Error(\"Failed to create calendar account\");\n  }\n\n  const [calendar] = await databaseClient\n    .insert(calendarsTable)\n    .values({\n      accountId: account.id,\n      calendarType: \"caldav\",\n      capabilities: [\"pull\", \"push\"],\n      calendarUrl,\n      name: `${provider} destination`,\n      userId,\n    })\n    .returning({ id: calendarsTable.id });\n\n  if (calendar) {\n    await setupNewDestinationWithDatabase(databaseClient, calendar.id);\n  }\n};\n\nconst saveCalDAVDestination = (\n  userId: string,\n  provider: string,\n  accountId: string,\n  email: string,\n  serverUrl: string,\n  calendarUrl: string,\n  username: string,\n  encryptedPassword: string,\n  authMethod: string,\n): Promise<void> =>\n  saveCalDAVDestinationWithDatabase(\n    database,\n    userId,\n    provider,\n    accountId,\n    email,\n    serverUrl,\n    calendarUrl,\n    username,\n    encryptedPassword,\n    authMethod,\n  );\n\nexport {\n  isOAuthProvider,\n  hasRequiredScopes,\n  getAuthorizationUrl,\n  exchangeCodeForTokens,\n  fetchUserInfo,\n  validateState,\n  saveCalendarDestination,\n  listCalendarDestinations,\n  deleteCalendarDestination,\n  getAccountExternalId as getDestinationAccountId,\n  saveCalDAVDestination,\n  saveCalDAVDestinationWithDatabase,\n  saveCalendarDestinationWithDatabase,\n};\n"
  },
  {
    "path": "services/api/src/utils/enqueue-push-sync.ts",
    "content": "import { createPushSyncQueue } from \"@keeper.sh/queue\";\nimport type { PushSyncJobPayload } from \"@keeper.sh/queue\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\n\ninterface PushSyncQueue {\n  add: (name: string, data: PushSyncJobPayload) => Promise<unknown>;\n  close: () => Promise<void>;\n}\n\ninterface EnqueuePushSyncDependencies {\n  createQueue: () => PushSyncQueue;\n  generateCorrelationId: () => string;\n}\n\nconst runEnqueuePushSync = async (\n  userId: string,\n  plan: Plan,\n  dependencies: EnqueuePushSyncDependencies,\n): Promise<void> => {\n  const correlationId = dependencies.generateCorrelationId();\n  const queue = dependencies.createQueue();\n\n  try {\n    await queue.add(`sync-${userId}`, { userId, plan, correlationId });\n  } finally {\n    await queue.close();\n  }\n};\n\nconst enqueuePushSync = async (userId: string, plan: Plan): Promise<void> => {\n  const { env } = await import(\"@/context\");\n\n  return runEnqueuePushSync(userId, plan, {\n    createQueue: () => createPushSyncQueue({ url: env.REDIS_URL, maxRetriesPerRequest: null }),\n    generateCorrelationId: () => crypto.randomUUID(),\n  });\n};\n\nexport { enqueuePushSync, runEnqueuePushSync };\nexport type { EnqueuePushSyncDependencies, PushSyncQueue };\n"
  },
  {
    "path": "services/api/src/utils/ical-format.ts",
    "content": "import { KEEPER_EVENT_SUFFIX } from \"@keeper.sh/constants\";\nimport { resolveIsAllDayEvent } from \"@keeper.sh/calendar\";\nimport { generateIcsCalendar } from \"ts-ics\";\nimport type { IcsCalendar, IcsEvent } from \"ts-ics\";\n\ninterface FeedSettings {\n  includeEventName: boolean;\n  includeEventDescription: boolean;\n  includeEventLocation: boolean;\n  excludeAllDayEvents: boolean;\n  customEventName: string;\n}\n\ninterface CalendarEvent {\n  id: string;\n  title: string | null;\n  description: string | null;\n  location: string | null;\n  startTime: Date;\n  endTime: Date;\n  isAllDay: boolean | null;\n  calendarName: string;\n}\n\nconst toAllDayShape = (event: CalendarEvent) => ({\n  startTime: event.startTime,\n  endTime: event.endTime,\n  ...(event.isAllDay !== null && { isAllDay: event.isAllDay }),\n});\n\nconst resolveTemplate = (template: string, variables: Record<string, string>): string =>\n  template.replaceAll(/\\{\\{(\\w+)\\}\\}/g, (match, name) => variables[name] ?? match);\n\nconst resolveEventSummary = (event: CalendarEvent, settings: FeedSettings): string => {\n  let template = settings.customEventName;\n  if (settings.includeEventName) {\n    template = event.title || settings.customEventName;\n  }\n\n  return resolveTemplate(template, {\n    event_name: event.title || \"Untitled\",\n    calendar_name: event.calendarName,\n  });\n};\n\nconst formatEventsAsIcal = (events: CalendarEvent[], settings: FeedSettings): string => {\n  const filteredEvents = events.filter((event) => {\n    if (!settings.excludeAllDayEvents) {\n      return true;\n    }\n    return !resolveIsAllDayEvent(toAllDayShape(event));\n  });\n\n  const icsEvents: IcsEvent[] = filteredEvents.map((event) => {\n    const isAllDay = resolveIsAllDayEvent(toAllDayShape(event));\n    const icsEvent: IcsEvent = {\n      end: { date: event.endTime, ...(isAllDay && { type: \"DATE\" as const }) },\n      stamp: { date: new Date() },\n      start: { date: event.startTime, ...(isAllDay && { type: \"DATE\" as const }) },\n      summary: resolveEventSummary(event, settings),\n      uid: `${event.id}${KEEPER_EVENT_SUFFIX}`,\n    };\n\n    if (settings.includeEventDescription && event.description) {\n      icsEvent.description = event.description;\n    }\n\n    if (settings.includeEventLocation && event.location) {\n      icsEvent.location = event.location;\n    }\n\n    return icsEvent;\n  });\n\n  const calendar: IcsCalendar = {\n    events: icsEvents,\n    prodId: \"-//Keeper//Keeper Calendar//EN\",\n    version: \"2.0\",\n  };\n\n  return generateIcsCalendar(calendar);\n};\n\nexport { formatEventsAsIcal };\nexport type { CalendarEvent, FeedSettings };\n"
  },
  {
    "path": "services/api/src/utils/ical.ts",
    "content": "import { calendarsTable, eventStatesTable, icalFeedSettingsTable } from \"@keeper.sh/database/schema\";\nimport { and, asc, eq, inArray, ne, or, isNull } from \"drizzle-orm\";\nimport { resolveUserIdentifier } from \"./user\";\nimport { database } from \"@/context\";\nimport { formatEventsAsIcal } from \"./ical-format\";\nimport type { FeedSettings } from \"./ical-format\";\n\nconst DEFAULT_FEED_SETTINGS: FeedSettings = {\n  includeEventName: false,\n  includeEventDescription: false,\n  includeEventLocation: false,\n  excludeAllDayEvents: false,\n  customEventName: \"Busy\",\n};\n\nconst getFeedSettings = async (userId: string): Promise<FeedSettings> => {\n  const [settings] = await database\n    .select()\n    .from(icalFeedSettingsTable)\n    .where(eq(icalFeedSettingsTable.userId, userId))\n    .limit(1);\n\n  return settings ?? DEFAULT_FEED_SETTINGS;\n};\n\nconst generateUserCalendar = async (identifier: string): Promise<string | null> => {\n  const userId = await resolveUserIdentifier(identifier);\n\n  if (!userId) {\n    return null;\n  }\n\n  const [settings, sources] = await Promise.all([\n    getFeedSettings(userId),\n    database\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.userId, userId),\n          eq(calendarsTable.includeInIcalFeed, true),\n        ),\n      ),\n  ]);\n\n  if (sources.length === 0) {\n    return formatEventsAsIcal([], settings);\n  }\n\n  const calendarIds = sources.map(({ id }) => id);\n  const events = await database\n    .select({\n      id: eventStatesTable.id,\n      title: eventStatesTable.title,\n      description: eventStatesTable.description,\n      location: eventStatesTable.location,\n      startTime: eventStatesTable.startTime,\n      endTime: eventStatesTable.endTime,\n      isAllDay: eventStatesTable.isAllDay,\n      calendarName: calendarsTable.name,\n    })\n    .from(eventStatesTable)\n    .innerJoin(calendarsTable, eq(eventStatesTable.calendarId, calendarsTable.id))\n    .where(\n      and(\n        inArray(eventStatesTable.calendarId, calendarIds),\n        or(\n          isNull(eventStatesTable.sourceEventType),\n          ne(eventStatesTable.sourceEventType, \"workingLocation\"),\n        ),\n        or(\n          isNull(eventStatesTable.availability),\n          ne(eventStatesTable.availability, \"workingElsewhere\"),\n        ),\n      ),\n    )\n    .orderBy(asc(eventStatesTable.startTime));\n\n  return formatEventsAsIcal(events, settings);\n};\n\nexport { generateUserCalendar };\n"
  },
  {
    "path": "services/api/src/utils/invalidate-calendars.ts",
    "content": "import { calendarsTable } from \"@keeper.sh/database/schema\";\nimport { eq } from \"drizzle-orm\";\nimport type { BunSQLDatabase } from \"drizzle-orm/bun-sql\";\nimport type Redis from \"ioredis\";\n\nconst INVALIDATION_PREFIX = \"sync:invalidated:\";\nconst INVALIDATION_TTL_SECONDS = 300;\n\nconst invalidateCalendarsForAccount = async (\n  database: BunSQLDatabase,\n  redis: Redis,\n  accountId: string,\n): Promise<void> => {\n  const calendars = await database\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(eq(calendarsTable.accountId, accountId));\n\n  if (calendars.length === 0) {\n    return;\n  }\n\n  const pipeline = redis.pipeline();\n  for (const calendar of calendars) {\n    const key = `${INVALIDATION_PREFIX}${calendar.id}`;\n    pipeline.set(key, \"1\", \"EX\", INVALIDATION_TTL_SECONDS);\n  }\n  await pipeline.exec();\n};\n\nexport { invalidateCalendarsForAccount };\n"
  },
  {
    "path": "services/api/src/utils/logging.ts",
    "content": "import { widelogger, widelog } from \"widelogger\";\n\nconst environment = process.env.ENV ?? \"production\";\n\nconst { context, destroy } = widelogger({\n  service: \"keeper-api\",\n  defaultEventName: \"wide_event\",\n  commitHash: process.env.COMMIT_SHA,\n  environment,\n  version: process.env.npm_package_version,\n});\n\nexport { context, destroy, widelog };\n"
  },
  {
    "path": "services/api/src/utils/middleware.ts",
    "content": "import type { MaybePromise } from \"bun\";\nimport { isKeeperMcpEnabledAuth } from \"@keeper.sh/auth\";\nimport { ErrorResponse } from \"./responses\";\nimport { apiTokensTable } from \"@keeper.sh/database/schema\";\nimport { isApiToken, hashApiToken } from \"./api-tokens\";\nimport { user as userTable } from \"@keeper.sh/database/auth-schema\";\nimport { eq } from \"drizzle-orm\";\nimport { auth, database, premiumService, redis } from \"@/context\";\nimport { checkAndIncrementApiUsage } from \"./api-rate-limit\";\nimport { context, widelog } from \"./logging\";\n\nconst MS_PER_DAY = 86_400_000;\n\ninterface RouteContext {\n  request: Request;\n  params: Record<string, string>;\n}\n\ninterface AuthenticatedRouteContext extends RouteContext {\n  userId: string;\n}\n\ntype RouteHandler = (request: Request, params: Record<string, string>, routePattern?: string) => MaybePromise<Response>;\n\ntype RouteCallback = (ctx: RouteContext) => MaybePromise<Response>;\ntype AuthenticatedRouteCallback = (ctx: AuthenticatedRouteContext) => MaybePromise<Response>;\n\nconst resolveOutcome = (statusCode: number): \"success\" | \"error\" => {\n  if (statusCode >= 400) {\n    return \"error\";\n  }\n  return \"success\";\n};\n\nconst fetchUserPlan = async (userId: string): Promise<\"free\" | \"pro\" | null> => {\n  try {\n    return await premiumService.getUserPlan(userId);\n  } catch {\n    return null;\n  }\n};\n\nconst fetchAccountAgeDays = async (userId: string): Promise<number | null> => {\n  try {\n    const [result] = await database\n      .select({ createdAt: userTable.createdAt })\n      .from(userTable)\n      .where(eq(userTable.id, userId))\n      .limit(1);\n    if (!result?.createdAt) {\n      return null;\n    }\n    return Math.floor((Date.now() - result.createdAt.getTime()) / MS_PER_DAY);\n  } catch {\n    return null;\n  }\n};\n\ninterface UserContext {\n  plan: \"free\" | \"pro\" | null;\n}\n\nconst enrichWithUserContext = async (userId: string): Promise<UserContext> => {\n  widelog.set(\"user.id\", userId);\n\n  const [plan, accountAgeDays] = await Promise.all([\n    fetchUserPlan(userId),\n    fetchAccountAgeDays(userId),\n  ]);\n\n  if (plan) {\n    widelog.set(\"user.plan\", plan);\n  }\n  if (accountAgeDays !== null) {\n    widelog.set(\"user.account_age_days\", accountAgeDays);\n  }\n\n  return { plan };\n};\n\ninterface Session {\n  user?: { id: string };\n}\n\nconst getSession = async (request: Request): Promise<Session | null> => {\n  const session = await auth.api.getSession({\n    headers: request.headers,\n  });\n  return session;\n};\n\nconst withWideEvent =\n  (handler: RouteCallback): RouteHandler =>\n  (request, params, routePattern) =>\n    context(async () => {\n      const url = new URL(request.url);\n      const requestId = request.headers.get(\"x-request-id\") ?? crypto.randomUUID();\n      const operationPath = routePattern ?? url.pathname;\n      widelog.set(\"operation.name\", `${request.method} ${operationPath}`);\n      widelog.set(\"operation.type\", \"http\");\n      widelog.set(\"request.id\", requestId);\n      widelog.set(\"http.method\", request.method);\n      widelog.set(\"http.path\", url.pathname);\n\n      const userAgent = request.headers.get(\"user-agent\");\n      if (userAgent) {\n        widelog.set(\"http.user_agent\", userAgent);\n      }\n\n      try {\n        return await widelog.time.measure(\"duration_ms\", async () => {\n          const response = await handler({ params, request });\n          widelog.set(\"status_code\", response.status);\n          widelog.set(\"outcome\", resolveOutcome(response.status));\n          return response;\n        });\n      } catch (error) {\n        widelog.set(\"status_code\", 500);\n        widelog.set(\"outcome\", \"error\");\n        widelog.errorFields(error, { slug: \"unclassified\" });\n        throw error;\n      } finally {\n        widelog.flush();\n      }\n    });\n\nconst withAuth =\n  (handler: AuthenticatedRouteCallback): RouteCallback =>\n  async ({ request, params }) => {\n    const session = await widelog.time.measure(\"auth.duration_ms\", () => getSession(request));\n    widelog.set(\"auth.method\", \"session\");\n\n    if (!session?.user?.id) {\n      return ErrorResponse.unauthorized().toResponse();\n    }\n\n    await enrichWithUserContext(session.user.id);\n    return handler({ params, request, userId: session.user.id });\n  };\n\nconst resolveApiTokenUserId = async (bearerToken: string): Promise<string | null> => {\n  const tokenHash = hashApiToken(bearerToken);\n  const [match] = await database\n    .select({\n      userId: apiTokensTable.userId,\n      expiresAt: apiTokensTable.expiresAt,\n      id: apiTokensTable.id,\n    })\n    .from(apiTokensTable)\n    .where(eq(apiTokensTable.tokenHash, tokenHash))\n    .limit(1);\n\n  if (!match) {\n    return null;\n  }\n\n  if (match.expiresAt && match.expiresAt.getTime() < Date.now()) {\n    return null;\n  }\n\n  await database\n    .update(apiTokensTable)\n    .set({ lastUsedAt: new Date() })\n    .where(eq(apiTokensTable.id, match.id));\n\n  return match.userId;\n};\n\nconst enforceApiRateLimit = async (userId: string, plan: \"free\" | \"pro\" | null): Promise<Response | null> => {\n  const rateLimitResult = await checkAndIncrementApiUsage(redis, userId, plan);\n  widelog.set(\"rate_limit.remaining\", rateLimitResult.remaining);\n  widelog.set(\"rate_limit.limit\", rateLimitResult.limit);\n\n  if (!rateLimitResult.allowed) {\n    widelog.set(\"rate_limit.exceeded\", true);\n    return ErrorResponse.tooManyRequests(\"Daily API limit exceeded. Upgrade to Pro for unlimited access.\").toResponse();\n  }\n\n  return null;\n};\n\nconst withV1Auth =\n  (handler: AuthenticatedRouteCallback): RouteCallback =>\n  async ({ request, params }) => {\n    const authHeader = request.headers.get(\"authorization\");\n\n    if (authHeader?.startsWith(\"Bearer \")) {\n      const bearerToken = authHeader.slice(\"Bearer \".length);\n\n      if (isApiToken(bearerToken)) {\n        const userId = await widelog.time.measure(\"auth.duration_ms\", () =>\n          resolveApiTokenUserId(bearerToken),\n        );\n        widelog.set(\"auth.method\", \"api_token\");\n\n        if (!userId) {\n          return ErrorResponse.unauthorized().toResponse();\n        }\n\n        const { plan } = await enrichWithUserContext(userId);\n        const rateLimitResponse = await enforceApiRateLimit(userId, plan);\n        if (rateLimitResponse) {\n          return rateLimitResponse;\n        }\n        return handler({ params, request, userId });\n      }\n\n      if (isKeeperMcpEnabledAuth(auth)) {\n        const mcpAuth = auth;\n        const mcpSession = await widelog.time.measure(\"auth.duration_ms\", () =>\n          mcpAuth.api.getMcpSession({ headers: request.headers }),\n        );\n        widelog.set(\"auth.method\", \"mcp_token\");\n\n        if (!mcpSession?.userId) {\n          return ErrorResponse.unauthorized().toResponse();\n        }\n\n        const { plan } = await enrichWithUserContext(mcpSession.userId);\n        const rateLimitResponse = await enforceApiRateLimit(mcpSession.userId, plan);\n        if (rateLimitResponse) {\n          return rateLimitResponse;\n        }\n        return handler({ params, request, userId: mcpSession.userId });\n      }\n    }\n\n    const session = await widelog.time.measure(\"auth.duration_ms\", () => getSession(request));\n    widelog.set(\"auth.method\", \"session\");\n\n    if (!session?.user?.id) {\n      return ErrorResponse.unauthorized().toResponse();\n    }\n\n    await enrichWithUserContext(session.user.id);\n    return handler({ params, request, userId: session.user.id });\n  };\n\nexport { resolveOutcome, withAuth, withV1Auth, withWideEvent };\nexport type { RouteHandler };\n"
  },
  {
    "path": "services/api/src/utils/oauth-calendar-listing.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\nimport {\n  calendarsTable,\n  calendarAccountsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { ErrorResponse } from \"./responses\";\nimport {\n  DestinationNotFoundError,\n  DestinationProviderMismatchError,\n  SourceCredentialNotFoundError,\n  SourceCredentialProviderMismatchError,\n  getOAuthDestinationCredentials,\n  getOAuthSourceCredentials,\n} from \"./oauth-sources\";\nimport { oauthCalendarListingQuerySchema } from \"./request-query\";\n\ninterface CredentialsWithExpiry {\n  accessToken: string;\n  refreshToken: string;\n  expiresAt: Date;\n}\n\ninterface RefreshTokenResult {\n  accessToken: string;\n}\n\ninterface CalendarListAuthError extends Error {\n  authRequired: boolean;\n}\n\ninterface NormalizedCalendar {\n  id: string;\n  summary: string;\n  primary?: boolean;\n}\n\ninterface OAuthCalendarListingOptions {\n  provider: string;\n  listCalendars: (accessToken: string) => Promise<NormalizedCalendar[]>;\n  refreshDestinationAccessToken: (\n    destinationId: string,\n    refreshToken: string,\n  ) => Promise<RefreshTokenResult>;\n  refreshSourceAccessToken: (\n    credentialId: string,\n    refreshToken: string,\n  ) => Promise<RefreshTokenResult>;\n  isCalendarListError: (error: unknown) => error is CalendarListAuthError;\n}\n\ntype OAuthCalendarAccessOptions = Pick<\n  OAuthCalendarListingOptions,\n  \"provider\" | \"refreshDestinationAccessToken\" | \"refreshSourceAccessToken\"\n>;\n\nconst isExpired = (expiresAt: Date): boolean => expiresAt < new Date();\n\nconst getValidDestinationAccessToken = async (\n  destinationId: string,\n  credentials: CredentialsWithExpiry,\n  refreshDestinationAccessToken: OAuthCalendarAccessOptions[\"refreshDestinationAccessToken\"],\n): Promise<string> => {\n  if (isExpired(credentials.expiresAt)) {\n    const refreshed = await refreshDestinationAccessToken(destinationId, credentials.refreshToken);\n    return refreshed.accessToken;\n  }\n  return credentials.accessToken;\n};\n\nconst getValidSourceAccessToken = async (\n  credentialId: string,\n  credentials: CredentialsWithExpiry,\n  refreshSourceAccessToken: OAuthCalendarAccessOptions[\"refreshSourceAccessToken\"],\n): Promise<string> => {\n  if (isExpired(credentials.expiresAt)) {\n    const refreshed = await refreshSourceAccessToken(credentialId, credentials.refreshToken);\n    return refreshed.accessToken;\n  }\n  return credentials.accessToken;\n};\n\nconst resolveAccessToken = async (\n  userId: string,\n  credentialId: string | null,\n  destinationId: string | null,\n  options: OAuthCalendarAccessOptions,\n): Promise<string> => {\n  if (credentialId) {\n    const credentials = await getOAuthSourceCredentials(userId, credentialId, options.provider);\n    return getValidSourceAccessToken(\n      credentialId,\n      credentials,\n      options.refreshSourceAccessToken,\n    );\n  }\n\n  if (destinationId) {\n    const credentials = await getOAuthDestinationCredentials(\n      userId,\n      destinationId,\n      options.provider,\n    );\n    return getValidDestinationAccessToken(\n      destinationId,\n      credentials,\n      options.refreshDestinationAccessToken,\n    );\n  }\n\n  throw new Error(\"Either credentialId or destinationId is required\");\n};\n\nconst handleCalendarListError = (\n  error: unknown,\n  isCalendarListError: OAuthCalendarListingOptions[\"isCalendarListError\"],\n): Response | null => {\n  if (error instanceof DestinationNotFoundError) {\n    return ErrorResponse.notFound(error.message).toResponse();\n  }\n  if (error instanceof DestinationProviderMismatchError) {\n    return ErrorResponse.badRequest(error.message).toResponse();\n  }\n  if (error instanceof SourceCredentialNotFoundError) {\n    return ErrorResponse.notFound(error.message).toResponse();\n  }\n  if (error instanceof SourceCredentialProviderMismatchError) {\n    return ErrorResponse.badRequest(error.message).toResponse();\n  }\n  if (isCalendarListError(error)) {\n    if (error.authRequired) {\n      return Response.json(\n        { authRequired: true, error: error.message },\n        { status: HTTP_STATUS.UNAUTHORIZED },\n      );\n    }\n    return ErrorResponse.badRequest(error.message).toResponse();\n  }\n\n  return null;\n};\n\nconst getStoredCalendars = async (\n  userId: string,\n  credentialId: string | null,\n  destinationId: string | null,\n): Promise<NormalizedCalendar[]> => {\n  const { database } = await import(\"@/context\");\n\n  if (credentialId) {\n    const rows = await database\n      .select({\n        externalCalendarId: calendarsTable.externalCalendarId,\n        name: calendarsTable.name,\n      })\n      .from(calendarsTable)\n      .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n      .where(\n        and(\n          eq(calendarsTable.userId, userId),\n          eq(calendarAccountsTable.oauthCredentialId, credentialId),\n        ),\n      );\n\n    return rows\n      .filter((row): row is typeof row & { externalCalendarId: string } => row.externalCalendarId !== null)\n      .map((row) => ({ id: row.externalCalendarId, summary: row.name }));\n  }\n\n  if (destinationId) {\n    const rows = await database\n      .select({\n        externalCalendarId: calendarsTable.externalCalendarId,\n        name: calendarsTable.name,\n      })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.userId, userId),\n          eq(calendarsTable.accountId, destinationId),\n        ),\n      );\n\n    return rows\n      .filter((row): row is typeof row & { externalCalendarId: string } => row.externalCalendarId !== null)\n      .map((row) => ({ id: row.externalCalendarId, summary: row.name }));\n  }\n\n  return [];\n};\n\nconst listOAuthCalendars = async (\n  request: Request,\n  userId: string,\n  options: OAuthCalendarListingOptions,\n): Promise<Response> => {\n  const url = new URL(request.url);\n  const query = Object.fromEntries(url.searchParams.entries());\n  const destinationId = url.searchParams.get(\"destinationId\");\n  const credentialId = url.searchParams.get(\"credentialId\");\n\n  if (!oauthCalendarListingQuerySchema.allows(query)) {\n    return ErrorResponse.badRequest(\n      \"Either destinationId or credentialId query parameter is required\",\n    ).toResponse();\n  }\n\n  try {\n    const accessToken = await resolveAccessToken(\n      userId,\n      credentialId,\n      destinationId,\n      options,\n    );\n\n    try {\n      const calendars = await options.listCalendars(accessToken);\n      return Response.json({ calendars });\n    } catch (listError) {\n      if (options.isCalendarListError(listError) && listError.authRequired) {\n        const calendars = await getStoredCalendars(userId, credentialId, destinationId);\n        return Response.json({ calendars });\n      }\n      throw listError;\n    }\n  } catch (error) {\n    const response = handleCalendarListError(error, options.isCalendarListError);\n    if (response) {\n      return response;\n    }\n\n    throw error;\n  }\n};\n\nexport { listOAuthCalendars };\nexport type { OAuthCalendarListingOptions, NormalizedCalendar };\n"
  },
  {
    "path": "services/api/src/utils/oauth-callback-state.ts",
    "content": "import { redis } from \"@/context\";\n\nconst CALLBACK_STATE_PREFIX = \"oauth:callback:\";\nconst CALLBACK_STATE_TTL_SECONDS = 300;\n\ninterface OAuthCallbackState {\n  credentialId: string;\n  provider: string;\n}\n\nconst getKey = (token: string): string => `${CALLBACK_STATE_PREFIX}${token}`;\n\nconst storeCallbackState = async (state: OAuthCallbackState): Promise<string> => {\n  const token = crypto.randomUUID();\n  const key = getKey(token);\n  await redis.set(key, JSON.stringify(state));\n  await redis.expire(key, CALLBACK_STATE_TTL_SECONDS);\n  return token;\n};\n\nconst consumeCallbackState = async (token: string): Promise<OAuthCallbackState | null> => {\n  const key = getKey(token);\n  const value = await redis.get(key);\n  if (!value) {\n    return null;\n  }\n  const deleted = await redis.del(key);\n  if (!deleted) {\n    return null;\n  }\n  return JSON.parse(value);\n};\n\nexport { storeCallbackState, consumeCallbackState };\n"
  },
  {
    "path": "services/api/src/utils/oauth-refresh.ts",
    "content": "import {\n  calendarAccountsTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { createGoogleTokenRefresher } from \"@keeper.sh/calendar\";\nimport { createMicrosoftTokenRefresher } from \"@keeper.sh/calendar\";\nimport { eq } from \"drizzle-orm\";\nimport { database, env } from \"@/context\";\n\nconst FIRST_RESULT_LIMIT = 1;\nconst MS_PER_SECOND = 1000;\n\ninterface RefreshResult {\n  accessToken: string;\n  expiresAt: Date;\n}\n\nconst refreshGoogleAccessToken = async (\n  accountId: string,\n  refreshToken: string,\n): Promise<RefreshResult> => {\n  if (!env.GOOGLE_CLIENT_ID || !env.GOOGLE_CLIENT_SECRET) {\n    throw new Error(\"Google OAuth not configured\");\n  }\n\n  const refreshGoogleToken = createGoogleTokenRefresher({\n    clientId: env.GOOGLE_CLIENT_ID,\n    clientSecret: env.GOOGLE_CLIENT_SECRET,\n  });\n\n  const tokenData = await refreshGoogleToken(refreshToken);\n  const newExpiresAt = new Date(Date.now() + tokenData.expires_in * MS_PER_SECOND);\n\n  const [account] = await database\n    .select({ oauthCredentialId: calendarAccountsTable.oauthCredentialId })\n    .from(calendarAccountsTable)\n    .where(eq(calendarAccountsTable.id, accountId))\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (account?.oauthCredentialId) {\n    await database\n      .update(oauthCredentialsTable)\n      .set({\n        accessToken: tokenData.access_token,\n        expiresAt: newExpiresAt,\n        refreshToken: tokenData.refresh_token ?? refreshToken,\n      })\n      .where(eq(oauthCredentialsTable.id, account.oauthCredentialId));\n  }\n\n  return {\n    accessToken: tokenData.access_token,\n    expiresAt: newExpiresAt,\n  };\n};\n\nconst refreshMicrosoftAccessToken = async (\n  accountId: string,\n  refreshToken: string,\n): Promise<RefreshResult> => {\n  if (!env.MICROSOFT_CLIENT_ID || !env.MICROSOFT_CLIENT_SECRET) {\n    throw new Error(\"Microsoft OAuth not configured\");\n  }\n\n  const refreshMicrosoftToken = createMicrosoftTokenRefresher({\n    clientId: env.MICROSOFT_CLIENT_ID,\n    clientSecret: env.MICROSOFT_CLIENT_SECRET,\n  });\n\n  const tokenData = await refreshMicrosoftToken(refreshToken);\n  const newExpiresAt = new Date(Date.now() + tokenData.expires_in * MS_PER_SECOND);\n\n  const [account] = await database\n    .select({ oauthCredentialId: calendarAccountsTable.oauthCredentialId })\n    .from(calendarAccountsTable)\n    .where(eq(calendarAccountsTable.id, accountId))\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (account?.oauthCredentialId) {\n    await database\n      .update(oauthCredentialsTable)\n      .set({\n        accessToken: tokenData.access_token,\n        expiresAt: newExpiresAt,\n        refreshToken: tokenData.refresh_token ?? refreshToken,\n      })\n      .where(eq(oauthCredentialsTable.id, account.oauthCredentialId));\n  }\n\n  return {\n    accessToken: tokenData.access_token,\n    expiresAt: newExpiresAt,\n  };\n};\n\nconst refreshGoogleSourceAccessToken = async (\n  credentialId: string,\n  refreshToken: string,\n): Promise<RefreshResult> => {\n  if (!env.GOOGLE_CLIENT_ID || !env.GOOGLE_CLIENT_SECRET) {\n    throw new Error(\"Google OAuth not configured\");\n  }\n\n  const refreshGoogleToken = createGoogleTokenRefresher({\n    clientId: env.GOOGLE_CLIENT_ID,\n    clientSecret: env.GOOGLE_CLIENT_SECRET,\n  });\n\n  const tokenData = await refreshGoogleToken(refreshToken);\n  const newExpiresAt = new Date(Date.now() + tokenData.expires_in * MS_PER_SECOND);\n\n  await database\n    .update(oauthCredentialsTable)\n    .set({\n      accessToken: tokenData.access_token,\n      expiresAt: newExpiresAt,\n      refreshToken: tokenData.refresh_token ?? refreshToken,\n    })\n    .where(eq(oauthCredentialsTable.id, credentialId));\n\n  return {\n    accessToken: tokenData.access_token,\n    expiresAt: newExpiresAt,\n  };\n};\n\nconst refreshMicrosoftSourceAccessToken = async (\n  credentialId: string,\n  refreshToken: string,\n): Promise<RefreshResult> => {\n  if (!env.MICROSOFT_CLIENT_ID || !env.MICROSOFT_CLIENT_SECRET) {\n    throw new Error(\"Microsoft OAuth not configured\");\n  }\n\n  const refreshMicrosoftToken = createMicrosoftTokenRefresher({\n    clientId: env.MICROSOFT_CLIENT_ID,\n    clientSecret: env.MICROSOFT_CLIENT_SECRET,\n  });\n\n  const tokenData = await refreshMicrosoftToken(refreshToken);\n  const newExpiresAt = new Date(Date.now() + tokenData.expires_in * MS_PER_SECOND);\n\n  await database\n    .update(oauthCredentialsTable)\n    .set({\n      accessToken: tokenData.access_token,\n      expiresAt: newExpiresAt,\n      refreshToken: tokenData.refresh_token ?? refreshToken,\n    })\n    .where(eq(oauthCredentialsTable.id, credentialId));\n\n  return {\n    accessToken: tokenData.access_token,\n    expiresAt: newExpiresAt,\n  };\n};\n\nexport {\n  refreshGoogleAccessToken,\n  refreshMicrosoftAccessToken,\n  refreshGoogleSourceAccessToken,\n  refreshMicrosoftSourceAccessToken,\n};\n"
  },
  {
    "path": "services/api/src/utils/oauth-source-credentials.ts",
    "content": "import { oauthCredentialsTable } from \"@keeper.sh/database/schema\";\nimport { and, eq } from \"drizzle-orm\";\nimport { database } from \"@/context\";\n\nconst FIRST_RESULT_LIMIT = 1;\n\ninterface CreateOAuthSourceCredentialData {\n  provider: string;\n  email: string | null;\n  accessToken: string;\n  refreshToken: string;\n  expiresAt: Date;\n}\n\nconst createOAuthSourceCredential = async (\n  userId: string,\n  data: CreateOAuthSourceCredentialData,\n): Promise<string> => {\n  const [existing] = await database\n    .select({ id: oauthCredentialsTable.id })\n    .from(oauthCredentialsTable)\n    .where(\n      and(\n        eq(oauthCredentialsTable.userId, userId),\n        eq(oauthCredentialsTable.provider, data.provider),\n        eq(oauthCredentialsTable.email, data.email ?? \"\"),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (existing) {\n    await database\n      .update(oauthCredentialsTable)\n      .set({\n        accessToken: data.accessToken,\n        expiresAt: data.expiresAt,\n        needsReauthentication: false,\n        refreshToken: data.refreshToken,\n      })\n      .where(eq(oauthCredentialsTable.id, existing.id));\n\n    return existing.id;\n  }\n\n  const [credential] = await database\n    .insert(oauthCredentialsTable)\n    .values({\n      accessToken: data.accessToken,\n      email: data.email,\n      expiresAt: data.expiresAt,\n      provider: data.provider,\n      refreshToken: data.refreshToken,\n      userId,\n    })\n    .returning({ id: oauthCredentialsTable.id });\n\n  if (!credential) {\n    throw new Error(\"Failed to create OAuth source credential\");\n  }\n\n  return credential.id;\n};\n\nexport { createOAuthSourceCredential };\n"
  },
  {
    "path": "services/api/src/utils/oauth-sources.ts",
    "content": "import {\n  calendarAccountsTable,\n  calendarsTable,\n  oauthCredentialsTable,\n  sourceDestinationMappingsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, count, eq, inArray, sql } from \"drizzle-orm\";\nimport { listUserCalendars as listGoogleCalendars } from \"@keeper.sh/calendar/google\";\nimport { listUserCalendars as listOutlookCalendars } from \"@keeper.sh/calendar/outlook\";\nimport type { database as contextDatabase } from \"@/context\";\nimport { spawnBackgroundJob } from \"./background-task\";\nimport { getSourceProvider } from \"@keeper.sh/calendar\";\nimport { applySourceSyncDefaults } from \"./source-sync-defaults\";\n\nimport { enqueuePushSync } from \"./enqueue-push-sync\";\n\nconst FIRST_RESULT_LIMIT = 1;\nconst OAUTH_CALENDAR_TYPE = \"oauth\";\nconst USER_ACCOUNT_LOCK_NAMESPACE = 9002;\ntype OAuthSourceDatabase = Pick<typeof contextDatabase, \"insert\" | \"select\" | \"selectDistinct\">;\n\nclass OAuthSourceLimitError extends Error {\n  constructor() {\n    super(\"Account limit reached. Upgrade to Pro for unlimited accounts.\");\n  }\n}\n\nclass DestinationNotFoundError extends Error {\n  constructor() {\n    super(\"Destination not found or not owned by user\");\n  }\n}\n\nclass DestinationProviderMismatchError extends Error {\n  constructor(provider: string) {\n    super(`Destination is not a ${provider} account`);\n  }\n}\n\nclass DuplicateSourceError extends Error {\n  constructor() {\n    super(\"This calendar is already added as a source\");\n  }\n}\n\ninterface OAuthCalendarSource {\n  id: string;\n  name: string;\n  provider: string;\n  email: string | null;\n}\n\ninterface OAuthAccountWithCredentials {\n  accountId: string;\n  email: string | null;\n  accessToken: string;\n  refreshToken: string;\n  expiresAt: Date;\n}\n\ninterface OAuthSourceWithCredentials {\n  credentialId: string;\n  email: string | null;\n  accessToken: string;\n  refreshToken: string;\n  expiresAt: Date;\n}\n\nconst getUserOAuthSources = async (\n  userId: string,\n  provider: string,\n): Promise<OAuthCalendarSource[]> => {\n  const { database } = await import(\"@/context\");\n  const sources = await database\n    .select({\n      createdAt: calendarsTable.createdAt,\n      email: oauthCredentialsTable.email,\n      externalCalendarId: calendarsTable.externalCalendarId,\n      id: calendarsTable.id,\n      name: calendarsTable.name,\n      provider: calendarAccountsTable.provider,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .leftJoin(\n      oauthCredentialsTable,\n      eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.calendarType, OAUTH_CALENDAR_TYPE),\n        eq(calendarAccountsTable.provider, provider),\n        inArray(calendarsTable.id,\n          database.selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n            .from(sourceDestinationMappingsTable)\n        ),\n      ),\n    );\n\n  return sources.map((source) => ({\n    email: source.email,\n    id: source.id,\n    name: source.name,\n    provider: source.provider,\n  }));\n};\n\nconst verifyOAuthSourceOwnership = async (userId: string, calendarId: string): Promise<boolean> => {\n  const { database } = await import(\"@/context\");\n  const [source] = await database\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.id, calendarId),\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.calendarType, OAUTH_CALENDAR_TYPE),\n        inArray(calendarsTable.id,\n          database.selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n            .from(sourceDestinationMappingsTable)\n        ),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return Boolean(source);\n};\n\nconst getOAuthDestinationCredentials = async (\n  userId: string,\n  accountId: string,\n  provider: string,\n): Promise<OAuthAccountWithCredentials> => {\n  const { database } = await import(\"@/context\");\n  const [result] = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      accountId: calendarAccountsTable.id,\n      email: calendarAccountsTable.email,\n      expiresAt: oauthCredentialsTable.expiresAt,\n      provider: calendarAccountsTable.provider,\n      refreshToken: oauthCredentialsTable.refreshToken,\n    })\n    .from(calendarAccountsTable)\n    .innerJoin(\n      oauthCredentialsTable,\n      eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id),\n    )\n    .where(\n      and(\n        eq(calendarAccountsTable.id, accountId),\n        eq(calendarAccountsTable.userId, userId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (!result) {\n    throw new DestinationNotFoundError();\n  }\n\n  if (result.provider !== provider) {\n    throw new DestinationProviderMismatchError(provider);\n  }\n\n  return {\n    accessToken: result.accessToken,\n    accountId: result.accountId,\n    email: result.email,\n    expiresAt: result.expiresAt,\n    refreshToken: result.refreshToken,\n  };\n};\n\nclass SourceCredentialNotFoundError extends Error {\n  constructor() {\n    super(\"Source credential not found or not owned by user\");\n  }\n}\n\nclass SourceCredentialProviderMismatchError extends Error {\n  constructor(provider: string) {\n    super(`Source credential is not a ${provider} account`);\n  }\n}\n\nconst getOAuthSourceCredentials = async (\n  userId: string,\n  credentialId: string,\n  provider: string,\n): Promise<OAuthSourceWithCredentials> => {\n  const { database } = await import(\"@/context\");\n  const [result] = await database\n    .select({\n      accessToken: oauthCredentialsTable.accessToken,\n      credentialId: oauthCredentialsTable.id,\n      email: oauthCredentialsTable.email,\n      expiresAt: oauthCredentialsTable.expiresAt,\n      provider: oauthCredentialsTable.provider,\n      refreshToken: oauthCredentialsTable.refreshToken,\n    })\n    .from(oauthCredentialsTable)\n    .where(\n      and(\n        eq(oauthCredentialsTable.id, credentialId),\n        eq(oauthCredentialsTable.userId, userId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (!result) {\n    throw new SourceCredentialNotFoundError();\n  }\n\n  if (result.provider !== provider) {\n    throw new SourceCredentialProviderMismatchError(provider);\n  }\n\n  return {\n    accessToken: result.accessToken,\n    credentialId: result.credentialId,\n    email: result.email,\n    expiresAt: result.expiresAt,\n    refreshToken: result.refreshToken,\n  };\n};\n\ninterface CreateOAuthSourceOptions {\n  userId: string;\n  externalCalendarId: string;\n  name: string;\n  provider: string;\n  oauthCredentialId: string;\n  excludeFocusTime?: boolean;\n  excludeOutOfOffice?: boolean;\n}\n\ninterface CreateOAuthSourceDependencies {\n  canAddAccount: (userId: string, currentCount: number) => Promise<boolean>;\n  countUserAccounts: (userId: string) => Promise<number>;\n  createSource: (payload: {\n    accountId: string;\n    externalCalendarId: string;\n    name: string;\n    originalName: string;\n    provider: string;\n    userId: string;\n    excludeFocusTime: boolean;\n    excludeOutOfOffice: boolean;\n  }) => Promise<{ id: string; name: string } | null>;\n  createCalendarAccount: (payload: {\n    displayName: string | null;\n    email: string | null;\n    oauthCredentialId: string;\n    provider: string;\n    userId: string;\n  }) => Promise<string | null>;\n  findCredentialEmail: (\n    userId: string,\n    oauthCredentialId: string,\n  ) => Promise<{ email: string | null; exists: boolean }>;\n  findExistingAccountId: (options: {\n    userId: string;\n    provider: string;\n    oauthCredentialId: string;\n  }) => Promise<string | null>;\n  hasExistingCalendar: (options: {\n    externalCalendarId: string;\n    oauthCredentialId: string;\n    userId: string;\n  }) => Promise<boolean>;\n  triggerSync: (userId: string, provider: string) => void;\n}\n\nconst countUserAccountsWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  userId: string,\n): Promise<number> => {\n  const [result] = await databaseClient\n    .select({ value: count() })\n    .from(calendarAccountsTable)\n    .where(eq(calendarAccountsTable.userId, userId));\n\n  return result?.value ?? 0;\n};\n\nconst countUserAccounts = async (userId: string): Promise<number> => {\n  const { database } = await import(\"@/context\");\n  return countUserAccountsWithDatabase(database, userId);\n};\n\nconst findOAuthAccountIdWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  options: {\n    userId: string;\n    provider: string;\n    oauthCredentialId: string;\n  },\n): Promise<string | null> => {\n  const { userId, provider, oauthCredentialId } = options;\n\n  const [existingAccount] = await databaseClient\n    .select({ id: calendarAccountsTable.id })\n    .from(calendarAccountsTable)\n    .where(\n      and(\n        eq(calendarAccountsTable.userId, userId),\n        eq(calendarAccountsTable.provider, provider),\n        eq(calendarAccountsTable.oauthCredentialId, oauthCredentialId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return existingAccount?.id ?? null;\n};\n\nconst findOAuthAccountId = async (\n  options: {\n    userId: string;\n    provider: string;\n    oauthCredentialId: string;\n  },\n): Promise<string | null> => {\n  const { database } = await import(\"@/context\");\n  return findOAuthAccountIdWithDatabase(database, options);\n};\n\nconst hasExistingOAuthCalendarWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  options: {\n    externalCalendarId: string;\n    oauthCredentialId: string;\n    userId: string;\n  },\n): Promise<boolean> => {\n  const { externalCalendarId, oauthCredentialId, userId } = options;\n\n  const [existingCalendar] = await databaseClient\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.externalCalendarId, externalCalendarId),\n        eq(calendarAccountsTable.oauthCredentialId, oauthCredentialId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return Boolean(existingCalendar);\n};\n\nconst hasExistingOAuthCalendar = async (\n  options: {\n    externalCalendarId: string;\n    oauthCredentialId: string;\n    userId: string;\n  },\n): Promise<boolean> => {\n  const { database } = await import(\"@/context\");\n  return hasExistingOAuthCalendarWithDatabase(database, options);\n};\n\nconst syncOAuthSourcesByProvider = async (providerId: string): Promise<void> => {\n  const { database, oauthProviders, refreshLockStore } = await import(\"@/context\");\n  const sourceProvider = getSourceProvider(providerId, {\n    database,\n    oauthProviders,\n    refreshLockStore,\n  });\n  if (!sourceProvider) {\n    return;\n  }\n  await sourceProvider.syncAllSources();\n};\n\nconst createOAuthSourceRecordWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  payload: Parameters<CreateOAuthSourceDependencies[\"createSource\"]>[0],\n): Promise<{ id: string; name: string } | null> => {\n  const [source] = await databaseClient\n    .insert(calendarsTable)\n    .values(applySourceSyncDefaults({\n      accountId: payload.accountId,\n      calendarType: OAUTH_CALENDAR_TYPE,\n      capabilities: [\"pull\", \"push\"],\n      excludeFocusTime: payload.excludeFocusTime,\n      excludeOutOfOffice: payload.excludeOutOfOffice,\n      externalCalendarId: payload.externalCalendarId,\n      name: payload.name,\n      originalName: payload.originalName,\n      userId: payload.userId,\n    }))\n    .returning();\n\n  if (!source) {\n    return null;\n  }\n\n  return {\n    id: source.id,\n    name: source.name,\n  };\n};\n\nconst findCredentialEmailWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  userId: string,\n  oauthCredentialId: string,\n): Promise<{ email: string | null; exists: boolean }> => {\n  const [credential] = await databaseClient\n    .select({ email: oauthCredentialsTable.email })\n    .from(oauthCredentialsTable)\n    .where(\n      and(\n        eq(oauthCredentialsTable.id, oauthCredentialId),\n        eq(oauthCredentialsTable.userId, userId),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return {\n    email: credential?.email ?? null,\n    exists: Boolean(credential),\n  };\n};\n\nconst createDefaultCreateOAuthSourceDependencies = (): CreateOAuthSourceDependencies => ({\n  canAddAccount: async (userId, currentCount) => {\n    const { premiumService } = await import(\"@/context\");\n    return premiumService.canAddAccount(userId, currentCount);\n  },\n  countUserAccounts,\n  createCalendarAccount: async ({ displayName, email, oauthCredentialId, provider, userId }) => {\n    const { database } = await import(\"@/context\");\n    const [insertedAccount] = await database\n      .insert(calendarAccountsTable)\n      .values({\n        authType: \"oauth\",\n        displayName: email ?? displayName,\n        email: email ?? displayName,\n        oauthCredentialId,\n        provider,\n        userId,\n      })\n      .returning({ id: calendarAccountsTable.id });\n\n    return insertedAccount?.id ?? null;\n  },\n  createSource: async (payload) => {\n    const { database } = await import(\"@/context\");\n    return createOAuthSourceRecordWithDatabase(database, payload);\n  },\n  findCredentialEmail: async (userId, oauthCredentialId) => {\n    const { database } = await import(\"@/context\");\n    return findCredentialEmailWithDatabase(database, userId, oauthCredentialId);\n  },\n  findExistingAccountId: findOAuthAccountId,\n  hasExistingCalendar: hasExistingOAuthCalendar,\n  triggerSync: (userId, provider) => {\n    spawnBackgroundJob(\"oauth-source-sync\", { userId, provider }, async () => {\n      await syncOAuthSourcesByProvider(provider);\n      const { premiumService } = await import(\"@/context\");\n      const plan = await premiumService.getUserPlan(userId);\n      if (!plan) {\n        throw new Error(\"Unable to resolve user plan for sync enqueue\");\n      }\n      await enqueuePushSync(userId, plan);\n    });\n  },\n});\n\nconst createOAuthSourceWithDependencies = async (\n  options: CreateOAuthSourceOptions,\n  dependencies: CreateOAuthSourceDependencies,\n): Promise<OAuthCalendarSource> => {\n  const {\n    userId,\n    externalCalendarId,\n    name,\n    provider,\n    oauthCredentialId,\n    excludeFocusTime = false,\n    excludeOutOfOffice = false,\n  } = options;\n\n  const credential = await dependencies.findCredentialEmail(userId, oauthCredentialId);\n\n  if (!credential.exists) {\n    throw new Error(\"Source credential not found\");\n  }\n\n  const existingAccountId = await dependencies.findExistingAccountId({\n    oauthCredentialId,\n    provider,\n    userId,\n  });\n\n  const existingCalendar = await dependencies.hasExistingCalendar({\n    externalCalendarId,\n    oauthCredentialId,\n    userId,\n  });\n\n  if (existingCalendar) {\n    throw new DuplicateSourceError();\n  }\n\n  let accountId = existingAccountId;\n\n  if (!accountId) {\n    const existingAccountCount = await dependencies.countUserAccounts(userId);\n    const allowed = await dependencies.canAddAccount(userId, existingAccountCount);\n    if (!allowed) {\n      throw new OAuthSourceLimitError();\n    }\n\n    const createdAccountId = await dependencies.createCalendarAccount({\n      displayName: credential.email,\n      email: credential.email,\n      oauthCredentialId,\n      provider,\n      userId,\n    });\n\n    if (!createdAccountId) {\n      throw new Error(\"Failed to create calendar account\");\n    }\n\n    accountId = createdAccountId;\n  }\n\n  const source = await dependencies.createSource({\n    accountId,\n    excludeFocusTime,\n    excludeOutOfOffice,\n    externalCalendarId,\n    name,\n    originalName: name,\n    provider,\n    userId,\n  });\n\n  if (!source) {\n    throw new Error(\"Failed to create OAuth calendar source\");\n  }\n\n  dependencies.triggerSync(userId, provider);\n\n  return {\n    email: credential.email,\n    id: source.id,\n    name: source.name,\n    provider,\n  };\n};\n\nconst createOAuthSource = async (\n  options: CreateOAuthSourceOptions,\n): Promise<OAuthCalendarSource> => {\n  const { database } = await import(\"@/context\");\n\n  return database.transaction(async (tx) => {\n    await tx.execute(\n      sql`select pg_advisory_xact_lock(${USER_ACCOUNT_LOCK_NAMESPACE}, hashtext(${options.userId}))`,\n    );\n\n    const dependencies = createDefaultCreateOAuthSourceDependencies();\n\n    return createOAuthSourceWithDependencies(options, {\n      ...dependencies,\n      createSource: (payload) => createOAuthSourceRecordWithDatabase(tx, payload),\n      countUserAccounts: (userId) => countUserAccountsWithDatabase(tx, userId),\n      createCalendarAccount: async ({ displayName, email, oauthCredentialId, provider, userId }) => {\n        const [insertedAccount] = await tx\n          .insert(calendarAccountsTable)\n          .values({\n            authType: \"oauth\",\n            displayName: email ?? displayName,\n            email: email ?? displayName,\n            oauthCredentialId,\n            provider,\n            userId,\n          })\n          .returning({ id: calendarAccountsTable.id });\n        return insertedAccount?.id ?? null;\n      },\n      findCredentialEmail: (userId, oauthCredentialId) =>\n        findCredentialEmailWithDatabase(tx, userId, oauthCredentialId),\n      findExistingAccountId: (accountOptions) => findOAuthAccountIdWithDatabase(tx, accountOptions),\n      hasExistingCalendar: (calendarOptions) => hasExistingOAuthCalendarWithDatabase(tx, calendarOptions),\n    });\n  });\n};\n\ninterface ImportOAuthAccountDependencies {\n  canAddAccount: (userId: string, currentCount: number) => Promise<boolean>;\n  countUserAccounts: (userId: string) => Promise<number>;\n  createAccountId: (\n    options: Pick<ImportOAuthAccountOptions, \"userId\" | \"provider\" | \"oauthCredentialId\" | \"email\">,\n  ) => Promise<string>;\n  findExistingAccountId: (options: {\n    userId: string;\n    provider: string;\n    oauthCredentialId: string;\n  }) => Promise<string | null>;\n  getUnimportedExternalCalendars: (\n    userId: string,\n    accountId: string,\n    externalCalendars: ExternalCalendar[],\n  ) => Promise<ExternalCalendar[]>;\n  insertCalendars: (\n    userId: string,\n    accountId: string,\n    calendars: ExternalCalendar[],\n  ) => Promise<void>;\n  listCalendars: (provider: string, accessToken: string) => Promise<ExternalCalendar[]>;\n  triggerSync: (userId: string, provider: string) => void;\n}\n\nconst createDefaultImportOAuthAccountDependencies = (): ImportOAuthAccountDependencies => ({\n  canAddAccount: async (userId, currentCount) => {\n    const { premiumService } = await import(\"@/context\");\n    return premiumService.canAddAccount(userId, currentCount);\n  },\n  countUserAccounts,\n  createAccountId: async ({ userId, provider, oauthCredentialId, email }) => {\n    const { database } = await import(\"@/context\");\n    const [insertedAccount] = await database\n      .insert(calendarAccountsTable)\n      .values({\n        authType: \"oauth\",\n        displayName: email,\n        email,\n        oauthCredentialId,\n        provider,\n        userId,\n      })\n      .returning({ id: calendarAccountsTable.id });\n\n    if (!insertedAccount?.id) {\n      throw new Error(\"Failed to find or create calendar account\");\n    }\n\n    return insertedAccount.id;\n  },\n  findExistingAccountId: findOAuthAccountId,\n  getUnimportedExternalCalendars: async (userId, accountId, externalCalendars) => {\n    const { database } = await import(\"@/context\");\n    const existingCalendars = await database\n      .select({ externalCalendarId: calendarsTable.externalCalendarId })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.accountId, accountId),\n          eq(calendarsTable.userId, userId),\n        ),\n      );\n\n    const existingExternalIds = new Set(\n      existingCalendars.map((calendar) => calendar.externalCalendarId),\n    );\n\n    return externalCalendars.filter(\n      (externalCalendar) => !existingExternalIds.has(externalCalendar.externalId),\n    );\n  },\n  insertCalendars: async (userId, accountId, calendars) => {\n    if (calendars.length === 0) {\n      return;\n    }\n\n    const { database } = await import(\"@/context\");\n    await database\n      .insert(calendarsTable)\n      .values(\n        calendars.map((calendar) => applySourceSyncDefaults({\n          accountId,\n          calendarType: OAUTH_CALENDAR_TYPE,\n          capabilities: [\"pull\", \"push\"],\n          externalCalendarId: calendar.externalId,\n          name: calendar.name,\n          originalName: calendar.name,\n          userId,\n        })),\n      );\n  },\n  listCalendars: async (provider, accessToken) => {\n    try {\n      if (provider === \"google\") {\n        const calendars = await listGoogleCalendars(accessToken);\n        return calendars.map((calendar) => ({ externalId: calendar.id, name: calendar.summary }));\n      }\n      if (provider === \"outlook\") {\n        const calendars = await listOutlookCalendars(accessToken);\n        return calendars.map((calendar) => ({ externalId: calendar.id, name: calendar.name }));\n      }\n      throw new Error(`No calendar listing support for provider: ${provider}`);\n    } catch (error) {\n      if (error instanceof Error && \"authRequired\" in error && error.authRequired === true) {\n        return [];\n      }\n      throw error;\n    }\n  },\n  triggerSync: (userId, provider) => {\n    spawnBackgroundJob(\"oauth-account-import\", { userId, provider }, async () => {\n      await syncOAuthSourcesByProvider(provider);\n      const { premiumService } = await import(\"@/context\");\n      const plan = await premiumService.getUserPlan(userId);\n      if (!plan) {\n        throw new Error(\"Unable to resolve user plan for sync enqueue\");\n      }\n      await enqueuePushSync(userId, plan);\n    });\n  },\n});\n\nconst importOAuthAccountCalendarsWithDependencies = async (\n  options: ImportOAuthAccountOptions,\n  dependencies: ImportOAuthAccountDependencies,\n): Promise<string> => {\n  const { userId, provider, oauthCredentialId, accessToken, email } = options;\n\n  const existingAccountId = await dependencies.findExistingAccountId({\n    oauthCredentialId,\n    provider,\n    userId,\n  });\n  let accountId = existingAccountId;\n\n  if (!accountId) {\n    const existingAccountCount = await dependencies.countUserAccounts(userId);\n    const allowed = await dependencies.canAddAccount(userId, existingAccountCount);\n    if (!allowed) {\n      throw new OAuthSourceLimitError();\n    }\n\n    accountId = await dependencies.createAccountId({\n      email,\n      oauthCredentialId,\n      provider,\n      userId,\n    });\n  }\n\n  const externalCalendars = await dependencies.listCalendars(provider, accessToken);\n  const newCalendars = await dependencies.getUnimportedExternalCalendars(\n    userId,\n    accountId,\n    externalCalendars,\n  );\n\n  if (newCalendars.length === 0) {\n    return accountId;\n  }\n\n  await dependencies.insertCalendars(userId, accountId, newCalendars);\n  dependencies.triggerSync(userId, provider);\n\n  return accountId;\n};\n\ninterface ExternalCalendar {\n  externalId: string;\n  name: string;\n}\n\ninterface ImportOAuthAccountOptions {\n  userId: string;\n  provider: string;\n  oauthCredentialId: string;\n  accessToken: string;\n  email: string | null;\n}\n\nconst createOAuthAccountIdWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  options: Pick<ImportOAuthAccountOptions, \"userId\" | \"provider\" | \"oauthCredentialId\" | \"email\">,\n): Promise<string> => {\n  const { userId, provider, oauthCredentialId, email } = options;\n\n  const [insertedAccount] = await databaseClient\n    .insert(calendarAccountsTable)\n    .values({\n      authType: \"oauth\",\n      displayName: email,\n      email,\n      oauthCredentialId,\n      provider,\n      userId,\n    })\n    .returning({ id: calendarAccountsTable.id });\n\n  if (!insertedAccount?.id) {\n    throw new Error(\"Failed to find or create calendar account\");\n  }\n\n  return insertedAccount.id;\n};\n\nconst getUnimportedExternalCalendarsWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  userId: string,\n  accountId: string,\n  externalCalendars: ExternalCalendar[],\n): Promise<ExternalCalendar[]> => {\n  const existingCalendars = await databaseClient\n    .select({ externalCalendarId: calendarsTable.externalCalendarId })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.accountId, accountId),\n        eq(calendarsTable.userId, userId),\n      ),\n    );\n\n  const existingExternalIds = new Set(\n    existingCalendars.map((calendar) => calendar.externalCalendarId),\n  );\n\n  return externalCalendars.filter(\n    (externalCalendar) => !existingExternalIds.has(externalCalendar.externalId),\n  );\n};\n\nconst insertOAuthCalendarsWithDatabase = async (\n  databaseClient: OAuthSourceDatabase,\n  userId: string,\n  accountId: string,\n  calendars: ExternalCalendar[],\n): Promise<void> => {\n  if (calendars.length === 0) {\n    return;\n  }\n\n  await databaseClient\n    .insert(calendarsTable)\n    .values(\n      calendars.map((calendar) => applySourceSyncDefaults({\n        accountId,\n        calendarType: OAUTH_CALENDAR_TYPE,\n        capabilities: [\"pull\", \"push\"],\n        externalCalendarId: calendar.externalId,\n        name: calendar.name,\n        originalName: calendar.name,\n        userId,\n      })),\n    );\n};\n\nconst importOAuthAccountCalendars = async (\n  options: ImportOAuthAccountOptions,\n): Promise<string> => {\n  const { database } = await import(\"@/context\");\n\n  return database.transaction(async (tx) => {\n    await tx.execute(\n      sql`select pg_advisory_xact_lock(${USER_ACCOUNT_LOCK_NAMESPACE}, hashtext(${options.userId}))`,\n    );\n\n    const dependencies = createDefaultImportOAuthAccountDependencies();\n\n    return importOAuthAccountCalendarsWithDependencies(options, {\n      ...dependencies,\n      countUserAccounts: (userId) => countUserAccountsWithDatabase(tx, userId),\n      createAccountId: (accountOptions) => createOAuthAccountIdWithDatabase(tx, accountOptions),\n      findExistingAccountId: (accountOptions) => findOAuthAccountIdWithDatabase(tx, accountOptions),\n      getUnimportedExternalCalendars: (userId, accountId, calendars) =>\n        getUnimportedExternalCalendarsWithDatabase(tx, userId, accountId, calendars),\n      insertCalendars: (userId, accountId, calendars) =>\n        insertOAuthCalendarsWithDatabase(tx, userId, accountId, calendars),\n    });\n  });\n};\n\nexport {\n  OAuthSourceLimitError,\n  DestinationNotFoundError,\n  DestinationProviderMismatchError,\n  DuplicateSourceError,\n  SourceCredentialNotFoundError,\n  SourceCredentialProviderMismatchError,\n  getUserOAuthSources,\n  verifyOAuthSourceOwnership,\n  getOAuthDestinationCredentials,\n  getOAuthSourceCredentials,\n  createOAuthSource,\n  createOAuthSourceWithDependencies,\n  importOAuthAccountCalendars,\n  importOAuthAccountCalendarsWithDependencies,\n};\n"
  },
  {
    "path": "services/api/src/utils/oauth.ts",
    "content": "import {\n  calendarAccountsTable,\n} from \"@keeper.sh/database/schema\";\nimport type { ValidatedState } from \"@keeper.sh/calendar\";\nimport { and, count, eq, sql } from \"drizzle-orm\";\nimport type { database as contextDatabase } from \"@/context\";\nimport { oauthCallbackQuerySchema } from \"./request-query\";\n\nconst MS_PER_SECOND = 1000;\nconst USER_ACCOUNT_LOCK_NAMESPACE = 9002;\n\ninterface OAuthCallbackParams {\n  code: string | null;\n  state: string | null;\n  error: string | null;\n  provider: string;\n}\n\nconst parseOAuthCallback = (request: Request, provider: string): OAuthCallbackParams => {\n  const url = new URL(request.url);\n  const query = Object.fromEntries(url.searchParams.entries());\n  let parsedQuery: Record<string, string> = {};\n  if (oauthCallbackQuerySchema.allows(query)) {\n    parsedQuery = query;\n  }\n\n  return {\n    code: parsedQuery.code ?? null,\n    error: parsedQuery.error ?? null,\n    provider,\n    state: parsedQuery.state ?? null,\n  };\n};\n\nconst buildRedirectUrl = (\n  path: string,\n  baseUrl: string,\n  params?: Record<string, string>,\n): URL => {\n  const url = new URL(path, baseUrl);\n  if (params) {\n    for (const [key, value] of Object.entries(params)) {\n      url.searchParams.set(key, value);\n    }\n  }\n  return url;\n};\n\nclass OAuthError extends Error {\n  redirectUrl: URL;\n\n  constructor(\n    message: string,\n    redirectUrl: URL,\n  ) {\n    super(message);\n    this.name = \"OAuthError\";\n    this.redirectUrl = redirectUrl;\n  }\n}\n\nconst ACCOUNT_LIMIT_ERROR_MESSAGE = \"Account limit reached. Upgrade to Pro for unlimited accounts.\";\n\ninterface OAuthUserInfo {\n  email: string | null;\n  id: string;\n}\n\ninterface OAuthTokenResponse {\n  access_token: string;\n  expires_in: number;\n  refresh_token?: string;\n  scope: string;\n}\n\ninterface HandleOAuthCallbackDependencies {\n  baseUrl: string;\n  exchangeCodeForTokens: (\n    provider: string,\n    code: string,\n    callbackUrl: string,\n  ) => Promise<OAuthTokenResponse>;\n  fetchUserInfo: (provider: string, accessToken: string) => Promise<OAuthUserInfo>;\n  getDestinationAccountId: (userId: string, destinationId: string) => Promise<string | null>;\n  hasRequiredScopes: (provider: string, scope: string) => boolean | Promise<boolean>;\n  persistCalendarDestination: (payload: {\n    accountId: string;\n    accessToken: string;\n    destinationId?: string;\n    email: string | null;\n    expiresAt: Date;\n    needsReauthentication: boolean;\n    provider: string;\n    refreshToken: string;\n    userId: string;\n  }) => Promise<void>;\n  enqueuePushSync: (userId: string) => Promise<void>;\n  validateState: (state: string) => Promise<ValidatedState | null>;\n}\n\nconst getExistingDestinationAccount = async (\n  databaseClient: Pick<typeof contextDatabase, \"select\">,\n  provider: string,\n  accountId: string,\n): Promise<{ id: string } | undefined> => {\n  const [account] = await databaseClient\n    .select({ id: calendarAccountsTable.id })\n    .from(calendarAccountsTable)\n    .where(\n      and(\n        eq(calendarAccountsTable.provider, provider),\n        eq(calendarAccountsTable.accountId, accountId),\n      ),\n    )\n    .limit(1);\n\n  return account;\n};\n\nconst handleOAuthCallbackWithDependencies = async (\n  params: OAuthCallbackParams,\n  dependencies: HandleOAuthCallbackDependencies,\n): Promise<{ userId: string; redirectUrl: URL }> => {\n  const successUrl = new URL(\"/dashboard/integrations\", dependencies.baseUrl);\n  successUrl.searchParams.set(\"destination\", \"connected\");\n  const errorUrl = new URL(\"/dashboard/integrations\", dependencies.baseUrl);\n  errorUrl.searchParams.set(\"destination\", \"error\");\n\n  if (!params.provider) {\n    throw new OAuthError(\"Missing provider\", errorUrl);\n  }\n\n  if (params.error) {\n    throw new OAuthError(\"OAuth error from provider\", errorUrl);\n  }\n\n  if (!params.code || !params.state) {\n    throw new OAuthError(\"Missing code or state\", errorUrl);\n  }\n\n  const validatedState = await dependencies.validateState(params.state);\n  if (!validatedState) {\n    throw new OAuthError(\"Invalid or expired state\", errorUrl);\n  }\n\n  const { userId, destinationId } = validatedState;\n\n  const callbackUrl = new URL(`/api/destinations/callback/${params.provider}`, dependencies.baseUrl);\n  const tokens = await dependencies.exchangeCodeForTokens(\n    params.provider,\n    params.code,\n    callbackUrl.toString(),\n  );\n\n  if (!tokens.refresh_token) {\n    throw new OAuthError(\"No refresh token\", errorUrl);\n  }\n\n  const userInfo = await dependencies.fetchUserInfo(params.provider, tokens.access_token);\n  const expiresAt = new Date(Date.now() + tokens.expires_in * MS_PER_SECOND);\n\n  if (destinationId) {\n    const existingAccountId = await dependencies.getDestinationAccountId(userId, destinationId);\n    if (existingAccountId && existingAccountId !== userInfo.id) {\n      const reauthUrl = new URL(\"/dashboard/integrations\", dependencies.baseUrl);\n      reauthUrl.searchParams.set(\n        \"error\",\n        \"Please reauthenticate with the same account that was originally connected.\",\n      );\n      throw new OAuthError(\"Please reauthenticate with the same account\", reauthUrl);\n    }\n  }\n\n  const needsReauthentication = !(await dependencies.hasRequiredScopes(params.provider, tokens.scope));\n  const destinationPayload: { destinationId?: string } = {};\n  if (destinationId !== null) {\n    destinationPayload.destinationId = destinationId;\n  }\n\n  await dependencies.persistCalendarDestination({\n    accountId: userInfo.id,\n    accessToken: tokens.access_token,\n    ...destinationPayload,\n    email: userInfo.email,\n    expiresAt,\n    needsReauthentication,\n    provider: params.provider,\n    refreshToken: tokens.refresh_token,\n    userId,\n  });\n\n  await dependencies.enqueuePushSync(userId);\n\n  return { redirectUrl: successUrl, userId };\n};\n\nconst handleOAuthCallback = async (\n  params: OAuthCallbackParams,\n): Promise<{ userId: string; redirectUrl: URL }> => {\n  const [{ baseUrl, database, premiumService }, destinationsModule, { enqueuePushSync }] = await Promise.all([\n    import(\"@/context\"),\n    import(\"./destinations\"),\n    import(\"./enqueue-push-sync\"),\n  ]);\n\n  const persistCalendarDestination = async (payload: {\n    accountId: string;\n    accessToken: string;\n    destinationId?: string;\n    email: string | null;\n    expiresAt: Date;\n    needsReauthentication: boolean;\n    provider: string;\n    refreshToken: string;\n    userId: string;\n  }): Promise<void> => {\n    await database.transaction(async (tx) => {\n      await tx.execute(\n        sql`select pg_advisory_xact_lock(${USER_ACCOUNT_LOCK_NAMESPACE}, hashtext(${payload.userId}))`,\n      );\n\n      if (!payload.destinationId) {\n        const existingAccount = await getExistingDestinationAccount(tx, payload.provider, payload.accountId);\n        if (!existingAccount) {\n          const [accountCount] = await tx\n            .select({ value: count() })\n            .from(calendarAccountsTable)\n            .where(eq(calendarAccountsTable.userId, payload.userId));\n\n          const allowed = await premiumService.canAddAccount(payload.userId, accountCount?.value ?? 0);\n          if (!allowed) {\n            throw new OAuthError(\n              \"Account limit reached\",\n              buildRedirectUrl(\"/dashboard/integrations\", baseUrl, {\n                destination: \"error\",\n                error: ACCOUNT_LIMIT_ERROR_MESSAGE,\n              }),\n            );\n          }\n        }\n      }\n\n      await destinationsModule.saveCalendarDestinationWithDatabase(\n        tx,\n        payload.userId,\n        payload.provider,\n        payload.accountId,\n        payload.email,\n        payload.accessToken,\n        payload.refreshToken,\n        payload.expiresAt,\n        payload.needsReauthentication,\n      );\n    });\n  };\n\n  return handleOAuthCallbackWithDependencies(params, {\n    baseUrl,\n    exchangeCodeForTokens: destinationsModule.exchangeCodeForTokens,\n    fetchUserInfo: destinationsModule.fetchUserInfo,\n    getDestinationAccountId: destinationsModule.getDestinationAccountId,\n    hasRequiredScopes: destinationsModule.hasRequiredScopes,\n    persistCalendarDestination,\n    enqueuePushSync: async (userId) => {\n      const plan = await premiumService.getUserPlan(userId);\n      if (!plan) {\n        throw new Error(\"Unable to resolve user plan for sync enqueue\");\n      }\n      await enqueuePushSync(userId, plan);\n    },\n    validateState: destinationsModule.validateState,\n  });\n};\n\nexport {\n  parseOAuthCallback,\n  buildRedirectUrl,\n  handleOAuthCallback,\n  handleOAuthCallbackWithDependencies,\n  OAuthError,\n};\n"
  },
  {
    "path": "services/api/src/utils/provider-display.ts",
    "content": "import { getProvider } from \"@keeper.sh/calendar\";\n\ninterface AccountDisplayInput {\n  displayName: string | null;\n  email: string | null;\n  accountIdentifier: string | null;\n  provider: string;\n}\n\nconst toNonEmptyValue = (value: string | null | undefined): string | null => {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  const normalizedValue = value.trim();\n  if (normalizedValue.length > 0) {\n    return normalizedValue;\n  }\n\n  return null;\n};\n\nconst getProviderName = (providerId: string): string =>\n  toNonEmptyValue(getProvider(providerId)?.name) ?? providerId;\n\nconst getProviderIcon = (providerId: string): string | null =>\n  toNonEmptyValue(getProvider(providerId)?.icon);\n\nconst getAccountIdentifier = (input: AccountDisplayInput): string | null =>\n  toNonEmptyValue(input.email)\n  ?? toNonEmptyValue(input.accountIdentifier)\n  ?? toNonEmptyValue(input.displayName);\n\nconst getAccountLabel = (input: AccountDisplayInput): string =>\n  getAccountIdentifier(input) ?? getProviderName(input.provider);\n\nconst withProviderMetadata = <DisplayValue extends { provider: string }>(value: DisplayValue): DisplayValue & {\n  providerName: string;\n  providerIcon: string | null;\n} => ({\n  ...value,\n  providerName: getProviderName(value.provider),\n  providerIcon: getProviderIcon(value.provider),\n});\n\nconst withAccountDisplay = <DisplayValue extends AccountDisplayInput>(value: DisplayValue): DisplayValue & {\n  accountLabel: string;\n  accountIdentifier: string | null;\n  providerName: string;\n  providerIcon: string | null;\n} => ({\n  ...withProviderMetadata(value),\n  accountLabel: getAccountLabel(value),\n  accountIdentifier: getAccountIdentifier(value),\n});\n\nexport { withProviderMetadata, withAccountDisplay };\n"
  },
  {
    "path": "services/api/src/utils/request-body.ts",
    "content": "import { type } from \"arktype\";\n\nconst calendarIdsBodySchema = type({\n  calendarIds: \"string[]\",\n  \"+\": \"reject\",\n});\ntype CalendarIdsBody = typeof calendarIdsBodySchema.infer;\n\nconst sourcePatchBodySchema = type({\n  \"name?\": \"string\",\n  \"customEventName?\": \"string\",\n  \"excludeAllDayEvents?\": \"boolean\",\n  \"excludeEventDescription?\": \"boolean\",\n  \"excludeEventLocation?\": \"boolean\",\n  \"excludeEventName?\": \"boolean\",\n  \"excludeFocusTime?\": \"boolean\",\n  \"excludeOutOfOffice?\": \"boolean\",\n  \"includeInIcalFeed?\": \"boolean\",\n  \"+\": \"reject\",\n});\ntype SourcePatchBody = typeof sourcePatchBodySchema.infer;\n\nconst icalSettingsPatchBodySchema = type({\n  \"includeEventName?\": \"boolean\",\n  \"includeEventDescription?\": \"boolean\",\n  \"includeEventLocation?\": \"boolean\",\n  \"excludeAllDayEvents?\": \"boolean\",\n  \"customEventName?\": \"string\",\n  \"+\": \"reject\",\n});\ntype IcalSettingsPatchBody = typeof icalSettingsPatchBodySchema.infer;\n\nconst eventCreateBodySchema = type({\n  calendarId: \"string\",\n  title: \"string\",\n  \"description?\": \"string\",\n  \"location?\": \"string\",\n  startTime: \"string\",\n  endTime: \"string\",\n  \"isAllDay?\": \"boolean\",\n  \"availability?\": \"'busy' | 'free'\",\n  \"+\": \"reject\",\n});\ntype EventCreateBody = typeof eventCreateBodySchema.infer;\n\nconst eventPatchBodySchema = type({\n  \"title?\": \"string\",\n  \"description?\": \"string\",\n  \"location?\": \"string\",\n  \"startTime?\": \"string\",\n  \"endTime?\": \"string\",\n  \"isAllDay?\": \"boolean\",\n  \"availability?\": \"'busy' | 'free'\",\n  \"rsvpStatus?\": \"'accepted' | 'declined' | 'tentative'\",\n  \"+\": \"reject\",\n});\ntype EventPatchBody = typeof eventPatchBodySchema.infer;\n\nconst tokenCreateBodySchema = type({\n  name: \"string\",\n  \"+\": \"reject\",\n});\ntype TokenCreateBody = typeof tokenCreateBodySchema.infer;\n\nexport {\n  calendarIdsBodySchema,\n  sourcePatchBodySchema,\n  icalSettingsPatchBodySchema,\n  eventCreateBodySchema,\n  eventPatchBodySchema,\n  tokenCreateBodySchema,\n};\nexport type {\n  CalendarIdsBody,\n  SourcePatchBody,\n  IcalSettingsPatchBody,\n  EventCreateBody,\n  EventPatchBody,\n  TokenCreateBody,\n};\n"
  },
  {
    "path": "services/api/src/utils/request-query.ts",
    "content": "import { type } from \"arktype\";\n\nconst sourceAuthorizeQuerySchema = type({\n  provider: \"string\",\n  \"credentialId?\": \"string\",\n  \"+\": \"reject\",\n});\ntype SourceAuthorizeQuery = typeof sourceAuthorizeQuerySchema.infer;\n\nconst destinationAuthorizeQuerySchema = type({\n  provider: \"string\",\n  \"destinationId?\": \"string\",\n  \"+\": \"reject\",\n});\ntype DestinationAuthorizeQuery = typeof destinationAuthorizeQuerySchema.infer;\n\nconst callbackStateQuerySchema = type({\n  token: \"string\",\n  \"+\": \"reject\",\n});\ntype CallbackStateQuery = typeof callbackStateQuerySchema.infer;\n\nconst socketQuerySchema = type({\n  token: \"string\",\n  \"+\": \"reject\",\n});\ntype SocketQuery = typeof socketQuerySchema.infer;\n\nconst oauthCallbackQuerySchema = type({\n  \"code?\": \"string\",\n  \"state?\": \"string\",\n  \"error?\": \"string\",\n});\ntype OAuthCallbackQuery = typeof oauthCallbackQuerySchema.infer;\n\nconst oauthCalendarListingQuerySchema = type([\n  {\n    destinationId: \"string\",\n    \"credentialId?\": \"string\",\n    \"+\": \"reject\",\n  },\n  {\n    credentialId: \"string\",\n    \"destinationId?\": \"string\",\n    \"+\": \"reject\",\n  },\n]);\ntype OAuthCalendarListingQuery = typeof oauthCalendarListingQuerySchema.infer;\n\nconst caldavSourcesQuerySchema = type({\n  \"provider?\": \"string\",\n  \"+\": \"reject\",\n});\ntype CaldavSourcesQuery = typeof caldavSourcesQuerySchema.infer;\n\nconst providerParamSchema = type({\n  provider: \"string\",\n  \"+\": \"reject\",\n});\ntype ProviderParam = typeof providerParamSchema.infer;\n\nconst idParamSchema = type({\n  id: \"string\",\n  \"+\": \"reject\",\n});\ntype IdParam = typeof idParamSchema.infer;\n\nexport {\n  sourceAuthorizeQuerySchema,\n  destinationAuthorizeQuerySchema,\n  callbackStateQuerySchema,\n  socketQuerySchema,\n  oauthCallbackQuerySchema,\n  oauthCalendarListingQuerySchema,\n  caldavSourcesQuerySchema,\n  providerParamSchema,\n  idParamSchema,\n};\nexport type {\n  SourceAuthorizeQuery,\n  DestinationAuthorizeQuery,\n  CallbackStateQuery,\n  SocketQuery,\n  OAuthCallbackQuery,\n  OAuthCalendarListingQuery,\n  CaldavSourcesQuery,\n  ProviderParam,\n  IdParam,\n};\n"
  },
  {
    "path": "services/api/src/utils/responses.ts",
    "content": "import { HTTP_STATUS } from \"@keeper.sh/constants\";\n\nclass ErrorResponse {\n  private readonly status: number;\n  private readonly message: string | null;\n\n  constructor(status: number, message: string | null = null) {\n    this.status = status;\n    this.message = message;\n  }\n\n  toResponse(): Response {\n    return Response.json({ error: this.message }, { status: this.status });\n  }\n\n  static badRequest(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.BAD_REQUEST, message);\n  }\n\n  static unauthorized(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.UNAUTHORIZED, message);\n  }\n\n  static paymentRequired(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.PAYMENT_REQUIRED, message);\n  }\n\n  static forbidden(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.FORBIDDEN, message);\n  }\n\n  static notFound(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.NOT_FOUND, message);\n  }\n\n  static conflict(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.CONFLICT, message);\n  }\n\n  static tooManyRequests(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.TOO_MANY_REQUESTS, message);\n  }\n\n  static notImplemented(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.NOT_IMPLEMENTED, message);\n  }\n\n  static internal(message: string | null = null): ErrorResponse {\n    return new ErrorResponse(HTTP_STATUS.INTERNAL_SERVER_ERROR, message);\n  }\n}\n\nexport { ErrorResponse };\n"
  },
  {
    "path": "services/api/src/utils/route-handler.ts",
    "content": "import type { RouteHandler } from \"./middleware\";\n\ntype HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"HEAD\";\n\ninterface RouteModule {\n  GET?: RouteHandler;\n  POST?: RouteHandler;\n  PUT?: RouteHandler;\n  PATCH?: RouteHandler;\n  DELETE?: RouteHandler;\n  HEAD?: RouteHandler;\n}\n\nconst HTTP_METHODS: HttpMethod[] = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\"];\n\nconst isHttpMethod = (method: string): method is HttpMethod =>\n  HTTP_METHODS.some((httpMethod) => httpMethod === method);\n\nconst isRouteModule = (module: unknown): module is RouteModule => {\n  if (typeof module !== \"object\" || module === null) {\n    return false;\n  }\n\n  const record: Record<string, unknown> = { ...module };\n\n  return HTTP_METHODS.some(\n    (method) => isHttpMethod(method) && typeof record[method] === \"function\",\n  );\n};\n\nexport { isHttpMethod, isRouteModule };\n"
  },
  {
    "path": "services/api/src/utils/safe-fetch-options.ts",
    "content": "import type { SafeFetchOptions } from \"@keeper.sh/calendar/safe-fetch\";\nimport env from \"@/env\";\n\nconst parseSafeFetchOptions = (): SafeFetchOptions => {\n  const options: SafeFetchOptions = {\n    blockPrivateResolution: env.BLOCK_PRIVATE_RESOLUTION === true,\n  };\n\n  if (env.PRIVATE_RESOLUTION_WHITELIST) {\n    const hosts = env.PRIVATE_RESOLUTION_WHITELIST\n      .split(\",\")\n      .map((host) => host.trim())\n      .filter((host) => host.length > 0);\n\n    options.allowedPrivateHosts = new Set(hosts);\n  }\n\n  return options;\n};\n\nconst safeFetchOptions = parseSafeFetchOptions();\n\nexport { safeFetchOptions };\n"
  },
  {
    "path": "services/api/src/utils/source-destination-mappings.ts",
    "content": "import {\n  calendarsTable,\n  sourceDestinationMappingsTable,\n  syncStatusTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, eq, inArray, sql } from \"drizzle-orm\";\nimport type { database as databaseInstance } from \"@/context\";\nconst EMPTY_LIST_COUNT = 0;\nconst USER_MAPPING_LOCK_NAMESPACE = 9001;\nconst MAPPING_LIMIT_ERROR_MESSAGE = \"Mapping limit reached. Upgrade to Pro for unlimited sync mappings.\";\n\ntype DatabaseClient = typeof databaseInstance;\ntype DatabaseTransactionCallback = Parameters<DatabaseClient[\"transaction\"]>[0];\ntype DatabaseTransactionClient = Parameters<DatabaseTransactionCallback>[0];\n\ninterface SourceDestinationMapping {\n  id: string;\n  sourceCalendarId: string;\n  destinationCalendarId: string;\n  createdAt: Date;\n  calendarType: string;\n}\n\ninterface SetDestinationsTransaction {\n  acquireUserLock: (userId: string) => Promise<void>;\n  sourceExists: (userId: string, sourceCalendarId: string) => Promise<boolean>;\n  countUserMappings?: (userId: string) => Promise<number>;\n  countMappingsForSource?: (sourceCalendarId: string) => Promise<number>;\n  findOwnedDestinationIds: (\n    userId: string,\n    destinationCalendarIds: string[],\n  ) => Promise<string[]>;\n  replaceSourceMappings: (\n    sourceCalendarId: string,\n    destinationCalendarIds: string[],\n  ) => Promise<void>;\n  ensureDestinationSyncStatuses: (destinationCalendarIds: string[]) => Promise<void>;\n}\n\ninterface SetDestinationsDependencies {\n  withTransaction: <TResult>(\n    callback: (transaction: SetDestinationsTransaction) => Promise<TResult>,\n  ) => Promise<TResult>;\n  isMappingCountAllowed?: (userId: string, nextMappingCount: number) => Promise<boolean>;\n}\n\ninterface SetSourcesTransaction {\n  acquireUserLock: (userId: string) => Promise<void>;\n  destinationExists: (userId: string, destinationCalendarId: string) => Promise<boolean>;\n  countUserMappings?: (userId: string) => Promise<number>;\n  countMappingsForDestination?: (destinationCalendarId: string) => Promise<number>;\n  findOwnedSourceIds: (userId: string, sourceCalendarIds: string[]) => Promise<string[]>;\n  replaceDestinationMappings: (\n    destinationCalendarId: string,\n    sourceCalendarIds: string[],\n  ) => Promise<void>;\n  ensureDestinationSyncStatus: (destinationCalendarId: string) => Promise<void>;\n}\n\ninterface SetSourcesDependencies {\n  withTransaction: <TResult>(\n    callback: (transaction: SetSourcesTransaction) => Promise<TResult>,\n  ) => Promise<TResult>;\n  isMappingCountAllowed?: (userId: string, nextMappingCount: number) => Promise<boolean>;\n}\n\nconst assertAllIdsOwned = (\n  requestedIds: string[],\n  validIds: string[],\n  errorMessage: string,\n): void => {\n  const validIdSet = new Set(validIds);\n  const invalidIds = requestedIds.filter((requestedId) => !validIdSet.has(requestedId));\n  if (invalidIds.length > EMPTY_LIST_COUNT) {\n    throw new Error(errorMessage);\n  }\n};\n\nconst createSetDestinationsTransaction = (\n  transactionClient: DatabaseTransactionClient,\n): SetDestinationsTransaction => ({\n  acquireUserLock: async (userId) => {\n    await transactionClient.execute(\n      sql`select pg_advisory_xact_lock(${USER_MAPPING_LOCK_NAMESPACE}, hashtext(${userId}))`,\n    );\n  },\n  sourceExists: async (userId, sourceCalendarId) => {\n    const [source] = await transactionClient\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.id, sourceCalendarId),\n          eq(calendarsTable.userId, userId),\n        ),\n      )\n      .limit(1);\n\n    return Boolean(source);\n  },\n  countUserMappings: async (userId) => {\n    const [result] = await transactionClient\n      .select({ value: sql<number>`count(*)` })\n      .from(sourceDestinationMappingsTable)\n      .innerJoin(\n        calendarsTable,\n        eq(sourceDestinationMappingsTable.sourceCalendarId, calendarsTable.id),\n      )\n      .where(eq(calendarsTable.userId, userId));\n\n    return Number(result?.value ?? EMPTY_LIST_COUNT);\n  },\n  countMappingsForSource: async (sourceCalendarId) => {\n    const [result] = await transactionClient\n      .select({ value: sql<number>`count(*)` })\n      .from(sourceDestinationMappingsTable)\n      .where(eq(sourceDestinationMappingsTable.sourceCalendarId, sourceCalendarId));\n\n    return Number(result?.value ?? EMPTY_LIST_COUNT);\n  },\n  findOwnedDestinationIds: async (userId, destinationCalendarIds) => {\n    if (destinationCalendarIds.length === EMPTY_LIST_COUNT) {\n      return [];\n    }\n\n    const ownedDestinations = await transactionClient\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.userId, userId),\n          inArray(calendarsTable.id, destinationCalendarIds),\n        ),\n      );\n\n    return ownedDestinations.map(({ id }) => id);\n  },\n  replaceSourceMappings: async (sourceCalendarId, destinationCalendarIds) => {\n    await transactionClient\n      .delete(sourceDestinationMappingsTable)\n      .where(eq(sourceDestinationMappingsTable.sourceCalendarId, sourceCalendarId));\n\n    if (destinationCalendarIds.length === EMPTY_LIST_COUNT) {\n      return;\n    }\n\n    await transactionClient\n      .insert(sourceDestinationMappingsTable)\n      .values(\n        destinationCalendarIds.map((destinationCalendarId) => ({\n          destinationCalendarId,\n          sourceCalendarId,\n        })),\n      )\n      .onConflictDoNothing();\n  },\n  ensureDestinationSyncStatuses: async (destinationCalendarIds) => {\n    for (const destinationCalendarId of destinationCalendarIds) {\n      await transactionClient\n        .insert(syncStatusTable)\n        .values({ calendarId: destinationCalendarId })\n        .onConflictDoNothing();\n    }\n  },\n});\n\nconst createSetSourcesTransaction = (\n  transactionClient: DatabaseTransactionClient,\n): SetSourcesTransaction => ({\n  acquireUserLock: async (userId) => {\n    await transactionClient.execute(\n      sql`select pg_advisory_xact_lock(${USER_MAPPING_LOCK_NAMESPACE}, hashtext(${userId}))`,\n    );\n  },\n  destinationExists: async (userId, destinationCalendarId) => {\n    const [destination] = await transactionClient\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.id, destinationCalendarId),\n          eq(calendarsTable.userId, userId),\n        ),\n      )\n      .limit(1);\n\n    return Boolean(destination);\n  },\n  countUserMappings: async (userId) => {\n    const [result] = await transactionClient\n      .select({ value: sql<number>`count(*)` })\n      .from(sourceDestinationMappingsTable)\n      .innerJoin(\n        calendarsTable,\n        eq(sourceDestinationMappingsTable.sourceCalendarId, calendarsTable.id),\n      )\n      .where(eq(calendarsTable.userId, userId));\n\n    return Number(result?.value ?? EMPTY_LIST_COUNT);\n  },\n  countMappingsForDestination: async (destinationCalendarId) => {\n    const [result] = await transactionClient\n      .select({ value: sql<number>`count(*)` })\n      .from(sourceDestinationMappingsTable)\n      .where(\n        eq(sourceDestinationMappingsTable.destinationCalendarId, destinationCalendarId),\n      );\n\n    return Number(result?.value ?? EMPTY_LIST_COUNT);\n  },\n  findOwnedSourceIds: async (userId, sourceCalendarIds) => {\n    if (sourceCalendarIds.length === EMPTY_LIST_COUNT) {\n      return [];\n    }\n\n    const ownedSources = await transactionClient\n      .select({ id: calendarsTable.id })\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.userId, userId),\n          inArray(calendarsTable.id, sourceCalendarIds),\n        ),\n      );\n\n    return ownedSources.map(({ id }) => id);\n  },\n  replaceDestinationMappings: async (destinationCalendarId, sourceCalendarIds) => {\n    await transactionClient\n      .delete(sourceDestinationMappingsTable)\n      .where(\n        eq(sourceDestinationMappingsTable.destinationCalendarId, destinationCalendarId),\n      );\n\n    if (sourceCalendarIds.length === EMPTY_LIST_COUNT) {\n      return;\n    }\n\n    await transactionClient\n      .insert(sourceDestinationMappingsTable)\n      .values(\n        sourceCalendarIds.map((sourceCalendarId) => ({\n          sourceCalendarId,\n          destinationCalendarId,\n        })),\n      )\n      .onConflictDoNothing();\n  },\n  ensureDestinationSyncStatus: async (destinationCalendarId) => {\n    await transactionClient\n      .insert(syncStatusTable)\n      .values({ calendarId: destinationCalendarId })\n      .onConflictDoNothing();\n  },\n});\n\nconst createSetDestinationsDependencies = async (): Promise<SetDestinationsDependencies> => {\n  const { database, premiumService } = await import(\"@/context\");\n\n  return {\n    isMappingCountAllowed: async (userId, nextMappingCount) => {\n      const userPlan = await premiumService.getUserPlan(userId);\n      const mappingLimit = premiumService.getMappingLimit(userPlan);\n      return nextMappingCount <= mappingLimit;\n    },\n    withTransaction: (callback) =>\n      database.transaction((transactionClient) =>\n        callback(createSetDestinationsTransaction(transactionClient))),\n  };\n};\n\nconst createSetSourcesDependencies = async (): Promise<SetSourcesDependencies> => {\n  const { database, premiumService } = await import(\"@/context\");\n\n  return {\n    isMappingCountAllowed: async (userId, nextMappingCount) => {\n      const userPlan = await premiumService.getUserPlan(userId);\n      const mappingLimit = premiumService.getMappingLimit(userPlan);\n      return nextMappingCount <= mappingLimit;\n    },\n    withTransaction: (callback) =>\n      database.transaction((transactionClient) =>\n        callback(createSetSourcesTransaction(transactionClient))),\n  };\n};\n\nconst runSetDestinationsForSource = async (\n  userId: string,\n  sourceCalendarId: string,\n  destinationCalendarIds: string[],\n  dependencies: SetDestinationsDependencies,\n): Promise<void> => {\n  const uniqueDestinationCalendarIds = [...new Set(destinationCalendarIds)];\n\n  await dependencies.withTransaction(async (transaction) => {\n    await transaction.acquireUserLock(userId);\n\n    const sourceExists = await transaction.sourceExists(userId, sourceCalendarId);\n    if (!sourceExists) {\n      throw new Error(\"Source calendar not found\");\n    }\n\n    if (uniqueDestinationCalendarIds.length > EMPTY_LIST_COUNT) {\n      const validDestinationIds = await transaction.findOwnedDestinationIds(\n        userId,\n        uniqueDestinationCalendarIds,\n      );\n      assertAllIdsOwned(\n        uniqueDestinationCalendarIds,\n        validDestinationIds,\n        \"Some destination calendars not found\",\n      );\n    }\n\n    if (\n      dependencies.isMappingCountAllowed\n      && transaction.countUserMappings\n      && transaction.countMappingsForSource\n    ) {\n      const [currentMappingCount, currentSourceMappingCount] = await Promise.all([\n        transaction.countUserMappings(userId),\n        transaction.countMappingsForSource(sourceCalendarId),\n      ]);\n      const nextMappingCount = currentMappingCount\n        - currentSourceMappingCount\n        + uniqueDestinationCalendarIds.length;\n\n      const allowed = await dependencies.isMappingCountAllowed(userId, nextMappingCount);\n      if (!allowed) {\n        throw new Error(MAPPING_LIMIT_ERROR_MESSAGE);\n      }\n    }\n\n    await transaction.replaceSourceMappings(sourceCalendarId, uniqueDestinationCalendarIds);\n\n    if (uniqueDestinationCalendarIds.length > EMPTY_LIST_COUNT) {\n      await transaction.ensureDestinationSyncStatuses(uniqueDestinationCalendarIds);\n    }\n  });\n};\n\nconst runSetSourcesForDestination = async (\n  userId: string,\n  destinationCalendarId: string,\n  sourceCalendarIds: string[],\n  dependencies: SetSourcesDependencies,\n): Promise<void> => {\n  const uniqueSourceCalendarIds = [...new Set(sourceCalendarIds)];\n\n  await dependencies.withTransaction(async (transaction) => {\n    await transaction.acquireUserLock(userId);\n\n    const destinationExists = await transaction.destinationExists(\n      userId,\n      destinationCalendarId,\n    );\n    if (!destinationExists) {\n      throw new Error(\"Destination calendar not found\");\n    }\n\n    if (uniqueSourceCalendarIds.length > EMPTY_LIST_COUNT) {\n      const validSourceIds = await transaction.findOwnedSourceIds(userId, uniqueSourceCalendarIds);\n      assertAllIdsOwned(uniqueSourceCalendarIds, validSourceIds, \"Some source calendars not found\");\n    }\n\n    if (\n      dependencies.isMappingCountAllowed\n      && transaction.countUserMappings\n      && transaction.countMappingsForDestination\n    ) {\n      const [currentMappingCount, currentDestinationMappingCount] = await Promise.all([\n        transaction.countUserMappings(userId),\n        transaction.countMappingsForDestination(destinationCalendarId),\n      ]);\n      const nextMappingCount = currentMappingCount\n        - currentDestinationMappingCount\n        + uniqueSourceCalendarIds.length;\n\n      const allowed = await dependencies.isMappingCountAllowed(userId, nextMappingCount);\n      if (!allowed) {\n        throw new Error(MAPPING_LIMIT_ERROR_MESSAGE);\n      }\n    }\n\n    await transaction.replaceDestinationMappings(destinationCalendarId, uniqueSourceCalendarIds);\n\n    if (uniqueSourceCalendarIds.length > EMPTY_LIST_COUNT) {\n      await transaction.ensureDestinationSyncStatus(destinationCalendarId);\n    }\n  });\n};\n\nconst getUserMappings = async (userId: string): Promise<SourceDestinationMapping[]> => {\n  const { database } = await import(\"@/context\");\n\n  const userSourceCalendars = await database\n    .select({\n      calendarType: calendarsTable.calendarType,\n      id: calendarsTable.id,\n    })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        inArray(\n          calendarsTable.id,\n          database\n            .selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n            .from(sourceDestinationMappingsTable),\n        ),\n      ),\n    );\n\n  if (userSourceCalendars.length === EMPTY_LIST_COUNT) {\n    return [];\n  }\n\n  const calendarIds = userSourceCalendars.map((calendar) => calendar.id);\n  const typeByCalendarId = new Map(\n    userSourceCalendars.map((calendar) => [calendar.id, calendar.calendarType]),\n  );\n\n  const mappings = await database\n    .select()\n    .from(sourceDestinationMappingsTable)\n    .where(inArray(sourceDestinationMappingsTable.sourceCalendarId, calendarIds));\n\n  return mappings.map((mapping) => ({\n    ...mapping,\n    calendarType: typeByCalendarId.get(mapping.sourceCalendarId) ?? \"unknown\",\n  }));\n};\n\nconst getDestinationsForSource = async (userId: string, sourceCalendarId: string): Promise<string[]> => {\n  const { database } = await import(\"@/context\");\n\n  const mappings = await database\n    .select({ destinationCalendarId: sourceDestinationMappingsTable.destinationCalendarId })\n    .from(sourceDestinationMappingsTable)\n    .innerJoin(calendarsTable, eq(sourceDestinationMappingsTable.sourceCalendarId, calendarsTable.id))\n    .where(\n      and(\n        eq(sourceDestinationMappingsTable.sourceCalendarId, sourceCalendarId),\n        eq(calendarsTable.userId, userId),\n      ),\n    );\n\n  return mappings.map((mapping) => mapping.destinationCalendarId);\n};\n\nconst getSourcesForDestination = async (userId: string, destinationCalendarId: string): Promise<string[]> => {\n  const { database } = await import(\"@/context\");\n\n  const mappings = await database\n    .select({ sourceCalendarId: sourceDestinationMappingsTable.sourceCalendarId })\n    .from(sourceDestinationMappingsTable)\n    .innerJoin(calendarsTable, eq(sourceDestinationMappingsTable.destinationCalendarId, calendarsTable.id))\n    .where(\n      and(\n        eq(sourceDestinationMappingsTable.destinationCalendarId, destinationCalendarId),\n        eq(calendarsTable.userId, userId),\n      ),\n    );\n\n  return mappings.map((mapping) => mapping.sourceCalendarId);\n};\n\nconst setDestinationsForSource = async (\n  userId: string,\n  sourceCalendarId: string,\n  destinationCalendarIds: string[],\n): Promise<void> => {\n  const dependencies = await createSetDestinationsDependencies();\n  await runSetDestinationsForSource(\n    userId,\n    sourceCalendarId,\n    destinationCalendarIds,\n    dependencies,\n  );\n};\n\nconst setSourcesForDestination = async (\n  userId: string,\n  destinationCalendarId: string,\n  sourceCalendarIds: string[],\n): Promise<void> => {\n  const dependencies = await createSetSourcesDependencies();\n  await runSetSourcesForDestination(\n    userId,\n    destinationCalendarId,\n    sourceCalendarIds,\n    dependencies,\n  );\n};\n\nexport {\n  getUserMappings,\n  getDestinationsForSource,\n  getSourcesForDestination,\n  MAPPING_LIMIT_ERROR_MESSAGE,\n  setDestinationsForSource,\n  setSourcesForDestination,\n  runSetDestinationsForSource,\n  runSetSourcesForDestination,\n};\n"
  },
  {
    "path": "services/api/src/utils/source-lifecycle.ts",
    "content": "import { CalendarFetchError } from \"@keeper.sh/calendar/ics\";\n\ninterface SourceReference {\n  id: string;\n}\n\ninterface CreateSourceInput {\n  userId: string;\n  name: string;\n  url: string;\n}\n\ninterface CreateSourceDependencies<TSource extends SourceReference> {\n  acquireAccountLock: (userId: string) => Promise<void>;\n  countExistingAccounts: (userId: string) => Promise<number>;\n  canAddAccount: (userId: string, existingAccountCount: number) => Promise<boolean>;\n  validateSourceUrl: (url: string) => Promise<void>;\n  createCalendarAccount: (payload: {\n    userId: string;\n    displayName: string;\n  }) => Promise<string | undefined>;\n  createSourceCalendar: (payload: {\n    accountId: string;\n    name: string;\n    url: string;\n    userId: string;\n  }) => Promise<TSource | undefined>;\n  spawnBackgroundJob: (\n    jobName: string,\n    fields: Record<string, unknown>,\n    callback: () => Promise<void>,\n  ) => void;\n  fetchAndSyncSource: (source: TSource) => Promise<void>;\n  enqueuePushSync: (userId: string) => Promise<void>;\n}\n\nclass SourceLimitError extends Error {\n  constructor() {\n    super(\"Account limit reached. Upgrade to Pro for unlimited accounts.\");\n  }\n}\n\nclass InvalidSourceUrlError extends Error {\n  public readonly authRequired: boolean;\n\n  constructor(cause?: unknown) {\n    if (cause instanceof CalendarFetchError) {\n      super(cause.message);\n      this.authRequired = cause.authRequired;\n    } else {\n      super(\"Invalid calendar URL\");\n      this.authRequired = false;\n    }\n    this.cause = cause;\n  }\n}\n\nconst runCreateSource = async <TSource extends SourceReference>(\n  input: CreateSourceInput,\n  dependencies: CreateSourceDependencies<TSource>,\n): Promise<TSource> => {\n  await dependencies.acquireAccountLock(input.userId);\n  const existingAccountCount = await dependencies.countExistingAccounts(input.userId);\n  const allowed = await dependencies.canAddAccount(input.userId, existingAccountCount);\n  if (!allowed) {\n    throw new SourceLimitError();\n  }\n\n  try {\n    await dependencies.validateSourceUrl(input.url);\n  } catch (error) {\n    throw new InvalidSourceUrlError(error);\n  }\n\n  const accountId = await dependencies.createCalendarAccount({\n    displayName: input.url,\n    userId: input.userId,\n  });\n  if (!accountId) {\n    throw new Error(\"Failed to create calendar account\");\n  }\n\n  const source = await dependencies.createSourceCalendar({\n    accountId,\n    name: input.name,\n    url: input.url,\n    userId: input.userId,\n  });\n  if (!source) {\n    throw new Error(\"Failed to create source\");\n  }\n\n  dependencies.spawnBackgroundJob(\"ical-source-sync\", { userId: input.userId, calendarId: source.id }, async () => {\n    await dependencies.fetchAndSyncSource(source);\n    await dependencies.enqueuePushSync(input.userId);\n  });\n\n  return source;\n};\n\nexport {\n  SourceLimitError,\n  InvalidSourceUrlError,\n  runCreateSource,\n};\nexport type {\n  SourceReference,\n  CreateSourceInput,\n  CreateSourceDependencies,\n};\n"
  },
  {
    "path": "services/api/src/utils/source-sync-defaults.ts",
    "content": "const DEFAULT_SOURCE_SYNC_RULES = {\n  customEventName: \"{{calendar_name}}\",\n  excludeEventDescription: true,\n  excludeEventLocation: true,\n  excludeEventName: true,\n  includeInIcalFeed: true,\n} as const;\n\nconst applySourceSyncDefaults = <TValues extends object>(\n  values: TValues,\n): TValues & typeof DEFAULT_SOURCE_SYNC_RULES => ({\n  ...DEFAULT_SOURCE_SYNC_RULES,\n  ...values,\n});\n\nexport { DEFAULT_SOURCE_SYNC_RULES, applySourceSyncDefaults };\n"
  },
  {
    "path": "services/api/src/utils/sources.ts",
    "content": "import { calendarAccountsTable, calendarsTable, eventStatesTable } from \"@keeper.sh/database/schema\";\nimport { pullRemoteCalendar, createIcsSourceFetcher } from \"@keeper.sh/calendar/ics\";\nimport { ingestSource, insertEventStatesWithConflictResolution } from \"@keeper.sh/calendar\";\nimport type { IngestionChanges } from \"@keeper.sh/calendar\";\nimport { and, count, eq, inArray, sql } from \"drizzle-orm\";\nimport { enqueuePushSync } from \"./enqueue-push-sync\";\nimport {\n  SourceLimitError,\n  InvalidSourceUrlError,\n  runCreateSource,\n} from \"./source-lifecycle\";\nimport { applySourceSyncDefaults } from \"./source-sync-defaults\";\nimport { safeFetchOptions } from \"./safe-fetch-options\";\n\nimport { spawnBackgroundJob } from \"./background-task\";\nimport { database, premiumService } from \"@/context\";\n\nconst USER_ACCOUNT_LOCK_NAMESPACE = 9002;\n\nconst FIRST_RESULT_LIMIT = 1;\nconst ICAL_CALENDAR_TYPE = \"ical\";\ntype Source = typeof calendarsTable.$inferSelect;\n\nconst serializeOptionalJson = (value: unknown): string | null => {\n  if (!value) {\n    return null;\n  }\n  return JSON.stringify(value);\n};\n\nconst createIngestionFlush = (calendarId: string) =>\n  async (changes: IngestionChanges): Promise<void> => {\n    await database.transaction(async (transaction) => {\n      if (changes.deletes.length > 0) {\n        await transaction\n          .delete(eventStatesTable)\n          .where(\n            and(\n              eq(eventStatesTable.calendarId, calendarId),\n              inArray(eventStatesTable.id, changes.deletes),\n            ),\n          );\n      }\n\n      if (changes.inserts.length > 0) {\n        await insertEventStatesWithConflictResolution(\n          transaction,\n          changes.inserts.map((event) => ({\n            availability: event.availability,\n            calendarId,\n            description: event.description,\n            endTime: event.endTime,\n            exceptionDates: serializeOptionalJson(event.exceptionDates),\n            isAllDay: event.isAllDay,\n            location: event.location,\n            recurrenceRule: serializeOptionalJson(event.recurrenceRule),\n            sourceEventType: event.sourceEventType,\n            sourceEventUid: event.uid,\n            startTime: event.startTime,\n            startTimeZone: event.startTimeZone,\n            title: event.title,\n          })),\n        );\n      }\n    });\n  };\n\nconst ingestIcsSource = async (source: Source): Promise<void> => {\n  if (!source.url) {\n    return;\n  }\n\n  const fetcher = createIcsSourceFetcher({\n    calendarId: source.id,\n    url: source.url,\n    database,\n    safeFetchOptions,\n  });\n\n  await ingestSource({\n    calendarId: source.id,\n    fetchEvents: () => fetcher.fetchEvents(),\n    readExistingEvents: () =>\n      database\n        .select({\n          availability: eventStatesTable.availability,\n          endTime: eventStatesTable.endTime,\n          id: eventStatesTable.id,\n          isAllDay: eventStatesTable.isAllDay,\n          sourceEventType: eventStatesTable.sourceEventType,\n          sourceEventUid: eventStatesTable.sourceEventUid,\n          startTime: eventStatesTable.startTime,\n        })\n        .from(eventStatesTable)\n        .where(eq(eventStatesTable.calendarId, source.id)),\n    flush: createIngestionFlush(source.id),\n  });\n};\n\nconst getUserSources = async (userId: string): Promise<Source[]> => {\n  const sources = await database\n    .select()\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.calendarType, ICAL_CALENDAR_TYPE),\n      ),\n    );\n\n  return sources;\n};\n\nconst verifySourceOwnership = async (userId: string, calendarId: string): Promise<boolean> => {\n  const [source] = await database\n    .select({ id: calendarsTable.id })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.id, calendarId),\n        eq(calendarsTable.userId, userId),\n        eq(calendarsTable.calendarType, ICAL_CALENDAR_TYPE),\n      ),\n    )\n    .limit(FIRST_RESULT_LIMIT);\n\n  return Boolean(source);\n};\n\nconst validateSourceUrl = async (url: string): Promise<void> => {\n  await pullRemoteCalendar(\"json\", url, safeFetchOptions);\n};\n\nconst createSource = (userId: string, name: string, url: string): Promise<Source> =>\n  database.transaction((tx) =>\n    runCreateSource(\n      { userId, name, url },\n      {\n        acquireAccountLock: async (userIdToLock) => {\n          await tx.execute(\n            sql`select pg_advisory_xact_lock(${USER_ACCOUNT_LOCK_NAMESPACE}, hashtext(${userIdToLock}))`,\n          );\n        },\n        canAddAccount: (userIdToCheck, existingAccountCount) =>\n          premiumService.canAddAccount(userIdToCheck, existingAccountCount),\n        countExistingAccounts: async (userIdToCount) => {\n          const [result] = await tx\n            .select({ value: count() })\n            .from(calendarAccountsTable)\n            .where(eq(calendarAccountsTable.userId, userIdToCount));\n          return result?.value ?? 0;\n        },\n        createCalendarAccount: async ({ userId: accountUserId, displayName }) => {\n          const [account] = await tx\n            .insert(calendarAccountsTable)\n            .values({\n              authType: \"none\",\n              displayName,\n              provider: \"ics\",\n              userId: accountUserId,\n            })\n            .returning({ id: calendarAccountsTable.id });\n          return account?.id;\n        },\n        createSourceCalendar: async ({ accountId, name: sourceName, url: sourceUrl, userId: sourceUserId }) => {\n          const [source] = await tx\n            .insert(calendarsTable)\n            .values(applySourceSyncDefaults({\n              accountId,\n              calendarType: ICAL_CALENDAR_TYPE,\n              name: sourceName,\n              url: sourceUrl,\n              userId: sourceUserId,\n            }))\n            .returning();\n          return source;\n        },\n        fetchAndSyncSource: async (source) => {\n          await ingestIcsSource(source);\n        },\n        spawnBackgroundJob,\n        enqueuePushSync: async (enqueuedUserId) => {\n          const plan = await premiumService.getUserPlan(enqueuedUserId);\n          if (!plan) {\n            throw new Error(\"Unable to resolve user plan for sync enqueue\");\n          }\n          await enqueuePushSync(enqueuedUserId, plan);\n        },\n        validateSourceUrl,\n      },\n    ),\n  );\n\nexport {\n  SourceLimitError,\n  InvalidSourceUrlError,\n  getUserSources,\n  verifySourceOwnership,\n  createSource,\n};\nexport type { Source };\n"
  },
  {
    "path": "services/api/src/utils/state.ts",
    "content": "import { TOKEN_TTL_MS } from \"@keeper.sh/constants\";\nimport { redis } from \"@/context\";\n\nconst SOCKET_TOKEN_PREFIX = \"socket:token:\";\nconst TOKEN_TTL_SECONDS = Math.ceil(TOKEN_TTL_MS / 1000);\n\nconst getTokenKey = (token: string): string => `${SOCKET_TOKEN_PREFIX}${token}`;\n\nconst generateSocketToken = async (userId: string): Promise<string> => {\n  const token = crypto.randomUUID();\n  const key = getTokenKey(token);\n  await redis.set(key, userId);\n  await redis.expire(key, TOKEN_TTL_SECONDS);\n  return token;\n};\n\nconst validateSocketToken = async (token: string): Promise<string | null> => {\n  const key = getTokenKey(token);\n  const userId = await redis.get(key);\n  if (!userId) {\n    return null;\n  }\n  await redis.del(key);\n  return userId;\n};\n\nexport { generateSocketToken, validateSocketToken };\n"
  },
  {
    "path": "services/api/src/utils/user.ts",
    "content": "import { user as userTable } from \"@keeper.sh/database\";\nimport { eq } from \"drizzle-orm\";\nimport { database } from \"@/context\";\n\nconst FIRST_RESULT_LIMIT = 1;\n\nconst resolveUserIdentifier = async (identifier: string): Promise<string | null> => {\n  const [userByUsername] = await database\n    .select({ id: userTable.id })\n    .from(userTable)\n    .where(eq(userTable.username, identifier))\n    .limit(FIRST_RESULT_LIMIT);\n\n  if (userByUsername) {\n    return userByUsername.id;\n  }\n\n  const [userById] = await database\n    .select({ id: userTable.id })\n    .from(userTable)\n    .where(eq(userTable.id, identifier))\n    .limit(FIRST_RESULT_LIMIT);\n\n  return userById?.id ?? null;\n};\n\nconst getUserIdentifierToken = async (userId: string): Promise<string> => {\n  const [userData] = await database\n    .select({ username: userTable.username })\n    .from(userTable)\n    .where(eq(userTable.id, userId))\n    .limit(FIRST_RESULT_LIMIT);\n\n  return userData?.username ?? userId;\n};\n\nexport { resolveUserIdentifier, getUserIdentifierToken };\n"
  },
  {
    "path": "services/api/tests/handlers/auth-oauth-resource.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { prepareOAuthTokenRequest } from \"../../src/handlers/auth-oauth-resource\";\n\ndescribe(\"prepareOAuthTokenRequest\", () => {\n  it(\"injects resource for authorization_code token exchange when missing\", async () => {\n    const request = new Request(\"https://keeper.sh/api/auth/oauth2/token\", {\n      body: new URLSearchParams({\n        grant_type: \"authorization_code\",\n        code: \"code-1\",\n      }).toString(),\n      headers: {\n        \"content-type\": \"application/x-www-form-urlencoded\",\n      },\n      method: \"POST\",\n    });\n\n    const preparedRequest = await prepareOAuthTokenRequest({\n      mcpPublicUrl: \"https://www.keeper.sh/mcp\",\n      pathname: \"/api/auth/oauth2/token\",\n      request,\n    });\n\n    const updatedBody = await preparedRequest.request.text();\n    const params = new URLSearchParams(updatedBody);\n\n    expect(preparedRequest.mcpResourceInjected).toBe(true);\n    expect(params.get(\"resource\")).toBe(\"https://www.keeper.sh/mcp\");\n  });\n\n  it(\"does not override existing resource\", async () => {\n    const request = new Request(\"https://keeper.sh/api/auth/oauth2/token\", {\n      body: new URLSearchParams({\n        grant_type: \"authorization_code\",\n        code: \"code-1\",\n        resource: \"https://custom.example/mcp\",\n      }).toString(),\n      headers: {\n        \"content-type\": \"application/x-www-form-urlencoded\",\n      },\n      method: \"POST\",\n    });\n\n    const preparedRequest = await prepareOAuthTokenRequest({\n      mcpPublicUrl: \"https://www.keeper.sh/mcp\",\n      pathname: \"/api/auth/oauth2/token\",\n      request,\n    });\n\n    const updatedBody = await preparedRequest.request.text();\n    const params = new URLSearchParams(updatedBody);\n\n    expect(preparedRequest.mcpResourceInjected).toBe(false);\n    expect(params.get(\"resource\")).toBe(\"https://custom.example/mcp\");\n  });\n\n  it(\"does nothing for non-token routes\", async () => {\n    const request = new Request(\"https://keeper.sh/api/auth/sign-in/email\", {\n      body: \"email=a%40b.com\",\n      headers: {\n        \"content-type\": \"application/x-www-form-urlencoded\",\n      },\n      method: \"POST\",\n    });\n\n    const preparedRequest = await prepareOAuthTokenRequest({\n      mcpPublicUrl: \"https://www.keeper.sh/mcp\",\n      pathname: \"/api/auth/sign-in/email\",\n      request,\n    });\n\n    const updatedBody = await preparedRequest.request.text();\n    expect(preparedRequest.mcpResourceInjected).toBe(false);\n    expect(updatedBody).toBe(\"email=a%40b.com\");\n  });\n});\n"
  },
  {
    "path": "services/api/tests/handlers/auth.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\n/**\n * The auth handler functions are not individually exported — only `handleAuthRequest` is.\n * Since `handleAuthRequest` depends on the `auth` context import, we test the pure helper\n * logic by re-implementing the exported patterns against the Response API directly.\n *\n * These tests validate the cookie manipulation and session detection logic that\n * `processAuthResponse`, `clearSessionCookies`, and `isNullSession` implement.\n */\n\nconst isNullSession = (body: unknown): body is null | { session: null } => {\n  if (body === null) {\n    return true;\n  }\n  if (typeof body !== \"object\") {\n    return false;\n  }\n  if (!(\"session\" in body)) {\n    return false;\n  }\n  return (body as { session: unknown }).session === null;\n};\n\nconst hasSessionTokenSet = (response: Response): boolean => {\n  const cookies = response.headers.getSetCookie();\n  return cookies.some(\n    (cookie) =>\n      cookie.includes(\"better-auth.session_token=\") && !cookie.includes(\"Max-Age=0\"),\n  );\n};\n\nconst hasSessionTokenCleared = (response: Response): boolean => {\n  const cookies = response.headers.getSetCookie();\n  return cookies.some(\n    (cookie) =>\n      cookie.includes(\"better-auth.session_token=\") && cookie.includes(\"Max-Age=0\"),\n  );\n};\n\ndescribe(\"isNullSession\", () => {\n  it(\"returns true for null\", () => {\n    expect(isNullSession(null)).toBe(true);\n  });\n\n  it(\"returns true for object with session: null\", () => {\n    expect(isNullSession({ session: null })).toBe(true);\n  });\n\n  it(\"returns false for non-null session\", () => {\n    expect(isNullSession({ session: { id: \"abc\" } })).toBe(false);\n  });\n\n  it(\"returns false for object without session key\", () => {\n    expect(isNullSession({ user: \"test\" })).toBe(false);\n  });\n\n  it(\"returns false for non-object values\", () => {\n    expect(isNullSession(\"string\")).toBe(false);\n    expect(isNullSession(42)).toBe(false);\n    expect(isNullSession(globalThis.undefined)).toBe(false);\n  });\n});\n\ndescribe(\"hasSessionTokenSet\", () => {\n  it(\"returns true when session token cookie is set without Max-Age=0\", () => {\n    const response = new Response(null);\n    response.headers.append(\n      \"Set-Cookie\",\n      \"better-auth.session_token=abc123; Path=/; HttpOnly; SameSite=Lax\",\n    );\n\n    expect(hasSessionTokenSet(response)).toBe(true);\n  });\n\n  it(\"returns false when session token is cleared with Max-Age=0\", () => {\n    const response = new Response(null);\n    response.headers.append(\n      \"Set-Cookie\",\n      \"better-auth.session_token=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax\",\n    );\n\n    expect(hasSessionTokenSet(response)).toBe(false);\n  });\n\n  it(\"returns false when no session token cookie exists\", () => {\n    const response = new Response(null);\n    response.headers.append(\"Set-Cookie\", \"other_cookie=value; Path=/\");\n\n    expect(hasSessionTokenSet(response)).toBe(false);\n  });\n});\n\ndescribe(\"hasSessionTokenCleared\", () => {\n  it(\"returns true when session token has Max-Age=0\", () => {\n    const response = new Response(null);\n    response.headers.append(\n      \"Set-Cookie\",\n      \"better-auth.session_token=; Path=/; Max-Age=0; HttpOnly; SameSite=Lax\",\n    );\n\n    expect(hasSessionTokenCleared(response)).toBe(true);\n  });\n\n  it(\"returns false when session token is actively set\", () => {\n    const response = new Response(null);\n    response.headers.append(\n      \"Set-Cookie\",\n      \"better-auth.session_token=abc; Path=/; HttpOnly; SameSite=Lax\",\n    );\n\n    expect(hasSessionTokenCleared(response)).toBe(false);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/handlers/websocket-initial-status.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  runSendInitialSyncStatus,\n  type OutgoingSyncAggregatePayload,\n} from \"../../src/handlers/websocket-initial-status\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst readSentPayload = (sentMessages: string[]): Record<string, unknown> => {\n  const [sentMessage] = sentMessages;\n  if (!sentMessage) {\n    throw new Error(\"Expected a websocket message\");\n  }\n\n  const parsed: unknown = JSON.parse(sentMessage);\n  if (!isRecord(parsed)) {\n    throw new Error(\"Expected JSON object payload\");\n  }\n\n  return parsed;\n};\n\ndescribe(\"runSendInitialSyncStatus\", () => {\n  it(\"sends resolved aggregate payload when resolver returns valid data\", async () => {\n    const sentMessages: string[] = [];\n    const expectedPayload: OutgoingSyncAggregatePayload = {\n      lastSyncedAt: \"2026-03-08T12:00:00.000Z\",\n      progressPercent: 70,\n      seq: 5,\n      syncEventsProcessed: 7,\n      syncEventsRemaining: 3,\n      syncEventsTotal: 10,\n      syncing: true,\n    };\n\n    await runSendInitialSyncStatus(\n      \"user-1\",\n      {\n        send: (message) => {\n          sentMessages.push(message);\n        },\n      },\n      {\n        isValidSyncAggregate: (value): value is OutgoingSyncAggregatePayload =>\n          Boolean(\n            value &&\n            typeof value === \"object\" &&\n            \"seq\" in value &&\n            typeof value.seq === \"number\",\n          ),\n        resolveSyncAggregatePayload: () => Promise.resolve(expectedPayload),\n        selectLatestDestinationSyncedAt: () =>\n          Promise.resolve(new Date(\"2026-03-08T11:59:00.000Z\")),\n      },\n    );\n\n    const sent = readSentPayload(sentMessages);\n    expect(sent.event).toBe(\"sync:aggregate\");\n    expect(sent.data).toEqual(expectedPayload);\n  });\n\n  it(\"throws when resolver fails and sends nothing\", () => {\n    const sentMessages: string[] = [];\n\n    expect(\n      runSendInitialSyncStatus(\n        \"user-1\",\n        {\n          send: (message) => {\n            sentMessages.push(message);\n          },\n        },\n        {\n          isValidSyncAggregate: (_value): _value is OutgoingSyncAggregatePayload => false,\n          resolveSyncAggregatePayload: () =>\n            Promise.reject(new Error(\"resolver failed\")),\n          selectLatestDestinationSyncedAt: () =>\n            Promise.resolve(new Date(\"2026-03-08T11:59:00.000Z\")),\n        },\n      ),\n    ).rejects.toThrow(\"resolver failed\");\n\n    expect(sentMessages).toHaveLength(0);\n  });\n\n  it(\"throws when resolved payload is invalid and sends nothing\", () => {\n    const sentMessages: string[] = [];\n\n    expect(\n      runSendInitialSyncStatus(\n        \"user-1\",\n        {\n          send: (message) => {\n            sentMessages.push(message);\n          },\n        },\n        {\n          isValidSyncAggregate: (_value): _value is OutgoingSyncAggregatePayload => false,\n          resolveSyncAggregatePayload: () => Promise.resolve({\n            progressPercent: 100,\n            syncEventsProcessed: 0,\n            syncEventsRemaining: 0,\n            syncEventsTotal: 0,\n          }),\n          selectLatestDestinationSyncedAt: () => Promise.resolve(null),\n        },\n      ),\n    ).rejects.toThrow(\"Invalid initial sync aggregate payload\");\n\n    expect(sentMessages).toHaveLength(0);\n  });\n\n  it(\"throws when synced-at query fails and sends nothing\", () => {\n    const sentMessages: string[] = [];\n\n    expect(\n      runSendInitialSyncStatus(\n        \"user-1\",\n        {\n          send: (message) => {\n            sentMessages.push(message);\n          },\n        },\n        {\n          isValidSyncAggregate: (_value): _value is OutgoingSyncAggregatePayload => false,\n          resolveSyncAggregatePayload: () =>\n            Promise.reject(new Error(\"resolver failed\")),\n          selectLatestDestinationSyncedAt: () =>\n            Promise.reject(new Error(\"query failed\")),\n        },\n      ),\n    ).rejects.toThrow(\"query failed\");\n\n    expect(sentMessages).toHaveLength(0);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/handlers/websocket-payload.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  type SyncAggregateFallbackPayload,\n  type SyncAggregatePayload,\n  resolveSyncAggregatePayload,\n} from \"../../src/handlers/websocket-payload\";\n\nconst createFallbackPayload = (): SyncAggregateFallbackPayload => ({\n  lastSyncedAt: \"2026-03-08T10:00:00.000Z\",\n  progressPercent: 100,\n  syncEventsProcessed: 0,\n  syncEventsRemaining: 0,\n  syncEventsTotal: 0,\n});\n\ndescribe(\"resolveSyncAggregatePayload\", () => {\n  it(\"prefers cached aggregate from Redis as cross-process source of truth\", async () => {\n    const fallbackPayload = createFallbackPayload();\n\n    const resolvedPayload = await resolveSyncAggregatePayload(\"user-1\", fallbackPayload, {\n      getCachedSyncAggregate: () => Promise.resolve({\n        progressPercent: 100,\n        seq: 5,\n        syncEventsProcessed: 10,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 10,\n        syncing: false,\n      }),\n      getCurrentSyncAggregate: () => ({\n        progressPercent: 40,\n        seq: 6,\n        syncEventsProcessed: 4,\n        syncEventsRemaining: 6,\n        syncEventsTotal: 10,\n        syncing: true,\n      }),\n      isValidSyncAggregate: (_value): _value is SyncAggregatePayload => true,\n    });\n\n    expect(resolvedPayload).toEqual({\n      progressPercent: 100,\n      seq: 5,\n      syncEventsProcessed: 10,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 10,\n      syncing: false,\n      lastSyncedAt: \"2026-03-08T10:00:00.000Z\",\n    });\n  });\n\n  it(\"uses cached aggregate when current state is idle and cache is valid\", async () => {\n    const fallbackPayload = createFallbackPayload();\n\n    const resolvedPayload = await resolveSyncAggregatePayload(\"user-1\", fallbackPayload, {\n      getCachedSyncAggregate: () => Promise.resolve({\n        progressPercent: 90,\n        seq: 18,\n        syncEventsProcessed: 9,\n        syncEventsRemaining: 1,\n        syncEventsTotal: 10,\n        syncing: false,\n      }),\n      getCurrentSyncAggregate: () => ({\n        progressPercent: 100,\n        seq: 19,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n        syncing: false,\n      }),\n      isValidSyncAggregate: (_value): _value is SyncAggregatePayload => true,\n    });\n\n    expect(resolvedPayload).toEqual({\n      progressPercent: 90,\n      seq: 18,\n      syncEventsProcessed: 9,\n      syncEventsRemaining: 1,\n      syncEventsTotal: 10,\n      syncing: false,\n      lastSyncedAt: \"2026-03-08T10:00:00.000Z\",\n    });\n  });\n\n  it(\"returns cached syncing aggregate so reconnecting users see active progress\", async () => {\n    const fallbackPayload = createFallbackPayload();\n\n    const resolvedPayload = await resolveSyncAggregatePayload(\"user-1\", fallbackPayload, {\n      getCachedSyncAggregate: () => Promise.resolve({\n        progressPercent: 1.6,\n        seq: 7027,\n        syncEventsProcessed: 47,\n        syncEventsRemaining: 2890,\n        syncEventsTotal: 2937,\n        syncing: true,\n      }),\n      getCurrentSyncAggregate: () => ({\n        progressPercent: 100,\n        seq: 7028,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n        syncing: false,\n      }),\n      isValidSyncAggregate: (_value): _value is SyncAggregatePayload => true,\n    });\n\n    expect(resolvedPayload).toEqual({\n      progressPercent: 1.6,\n      seq: 7027,\n      syncEventsProcessed: 47,\n      syncEventsRemaining: 2890,\n      syncEventsTotal: 2937,\n      syncing: true,\n      lastSyncedAt: \"2026-03-08T10:00:00.000Z\",\n    });\n  });\n\n  it(\"falls back to current aggregate when cached data is invalid\", async () => {\n    const fallbackPayload = createFallbackPayload();\n\n    const resolvedPayload = await resolveSyncAggregatePayload(\"user-1\", fallbackPayload, {\n      getCachedSyncAggregate: () => Promise.resolve({\n        progressPercent: \"100%\",\n      }),\n      getCurrentSyncAggregate: () => ({\n        progressPercent: 100,\n        seq: 33,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n        syncing: false,\n      }),\n      isValidSyncAggregate: (_value): _value is SyncAggregatePayload => false,\n    });\n\n    expect(resolvedPayload).toEqual({\n      progressPercent: 100,\n      seq: 33,\n      syncEventsProcessed: 0,\n      syncEventsRemaining: 0,\n      syncEventsTotal: 0,\n      syncing: false,\n    });\n  });\n\n  it(\"keeps cached lastSyncedAt when cache already includes it\", async () => {\n    const fallbackPayload = createFallbackPayload();\n\n    const resolvedPayload = await resolveSyncAggregatePayload(\"user-1\", fallbackPayload, {\n      getCachedSyncAggregate: () => Promise.resolve({\n        lastSyncedAt: \"2026-03-08T11:00:00.000Z\",\n        progressPercent: 100,\n        seq: 50,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n        syncing: false,\n      }),\n      getCurrentSyncAggregate: () => ({\n        progressPercent: 100,\n        seq: 51,\n        syncEventsProcessed: 0,\n        syncEventsRemaining: 0,\n        syncEventsTotal: 0,\n        syncing: false,\n      }),\n      isValidSyncAggregate: (_value): _value is SyncAggregatePayload => true,\n    });\n\n    expect(resolvedPayload.lastSyncedAt).toBe(\"2026-03-08T11:00:00.000Z\");\n  });\n\n  it(\"returns cached aggregate even when in-memory has remaining events\", async () => {\n    const fallbackPayload = createFallbackPayload();\n\n    const resolvedPayload = await resolveSyncAggregatePayload(\"user-1\", fallbackPayload, {\n      getCachedSyncAggregate: () => Promise.resolve({\n        progressPercent: 60,\n        seq: 12,\n        syncEventsProcessed: 6,\n        syncEventsRemaining: 4,\n        syncEventsTotal: 10,\n        syncing: false,\n      }),\n      getCurrentSyncAggregate: () => ({\n        progressPercent: 30,\n        seq: 13,\n        syncEventsProcessed: 3,\n        syncEventsRemaining: 7,\n        syncEventsTotal: 10,\n        syncing: false,\n      }),\n      isValidSyncAggregate: (_value): _value is SyncAggregatePayload => true,\n    });\n\n    expect(resolvedPayload).toEqual({\n      progressPercent: 60,\n      seq: 12,\n      syncEventsProcessed: 6,\n      syncEventsRemaining: 4,\n      syncEventsTotal: 10,\n      syncing: false,\n      lastSyncedAt: \"2026-03-08T10:00:00.000Z\",\n    });\n  });\n});\n"
  },
  {
    "path": "services/api/tests/routes/api/ical/settings.test.ts",
    "content": "import { beforeAll, describe, expect, it, vi } from \"vitest\";\nimport type { handlePatchIcalSettingsRoute as handlePatchIcalSettingsRouteFn } from \"../../../../src/routes/api/ical/settings\";\n\nlet handlePatchIcalSettingsRoute: typeof handlePatchIcalSettingsRouteFn = () =>\n  Promise.reject(new Error(\"Module not loaded\"));\n\nconst readJson = (response: Response): Promise<unknown> => response.json();\n\nbeforeAll(async () => {\n  vi.mock(\"../../../../src/utils/middleware\", () => ({\n    withAuth: (handler: unknown) => handler,\n    withWideEvent: (handler: unknown) => handler,\n  }));\n  vi.mock(\"../../../../src/context\", () => ({\n    database: {},\n    premiumService: {},\n  }));\n\n  ({ handlePatchIcalSettingsRoute } = await import(\"../../../../src/routes/api/ical/settings\"));\n});\n\ndescribe(\"handlePatchIcalSettingsRoute\", () => {\n  it(\"returns 403 when free users customize iCal feed settings\", async () => {\n    const response = await handlePatchIcalSettingsRoute(\n      {\n        body: { includeEventDescription: true },\n        userId: \"user-1\",\n      },\n      {\n        canCustomizeIcalFeed: () => Promise.resolve(false),\n        upsertSettings: () => Promise.resolve(null),\n      },\n    );\n\n    expect(response.status).toBe(403);\n    expect(await readJson(response)).toEqual({\n      error: \"iCal feed customization requires a Pro plan.\",\n    });\n  });\n\n  it(\"persists valid updates when customization is allowed\", async () => {\n    const response = await handlePatchIcalSettingsRoute(\n      {\n        body: { includeEventDescription: true },\n        userId: \"user-1\",\n      },\n      {\n        canCustomizeIcalFeed: () => Promise.resolve(true),\n        upsertSettings: (_userId, updates) => Promise.resolve({\n          customEventName: \"Busy\",\n          excludeAllDayEvents: false,\n          id: \"settings-1\",\n          includeEventDescription: updates.includeEventDescription,\n          includeEventLocation: false,\n          includeEventName: false,\n          userId: \"user-1\",\n        }),\n      },\n    );\n\n    expect(response.status).toBe(200);\n    expect(await readJson(response)).toEqual({\n      customEventName: \"Busy\",\n      excludeAllDayEvents: false,\n      id: \"settings-1\",\n      includeEventDescription: true,\n      includeEventLocation: false,\n      includeEventName: false,\n      userId: \"user-1\",\n    });\n  });\n});\n"
  },
  {
    "path": "services/api/tests/routes/api/ics/source-routes.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  handleGetIcsSourcesRoute,\n  handlePostIcsSourceRoute,\n} from \"../../../../src/routes/api/ics/source-routes\";\n\nconst readJson = (response: Response): Promise<unknown> => response.json();\n\nclass TestSourceLimitError extends Error {}\n\nclass TestInvalidSourceUrlError extends Error {\n  public readonly authRequired: boolean;\n\n  constructor(message: string, authRequired: boolean) {\n    super(message);\n    this.authRequired = authRequired;\n  }\n}\n\ndescribe(\"handleGetIcsSourcesRoute\", () => {\n  it(\"returns user sources for the authenticated user\", async () => {\n    const receivedUserIds: string[] = [];\n\n    const response = await handleGetIcsSourcesRoute(\n      { userId: \"user-1\" },\n      {\n        getUserSources: (userId) => {\n          receivedUserIds.push(userId);\n          return Promise.resolve([{ id: \"source-1\" }]);\n        },\n      },\n    );\n\n    expect(response.status).toBe(200);\n    expect(receivedUserIds).toEqual([\"user-1\"]);\n    expect(await readJson(response)).toEqual([{ id: \"source-1\" }]);\n  });\n});\n\ndescribe(\"handlePostIcsSourceRoute\", () => {\n  it(\"creates source with parsed body and returns 201\", async () => {\n    const receivedCreateCalls: { userId: string; name: string; url: string }[] = [];\n\n    const response = await handlePostIcsSourceRoute(\n      {\n        body: { name: \"Team Calendar\", url: \"https://example.com/feed.ics\" },\n        userId: \"user-1\",\n      },\n      {\n        createSource: (userId, name, url) => {\n          receivedCreateCalls.push({ userId, name, url });\n          return Promise.resolve({ id: \"source-1\", name });\n        },\n        isInvalidSourceUrlError: (_error): _error is TestInvalidSourceUrlError => false,\n        isSourceLimitError: () => false,\n        parseCreateSourceBody: (body) => {\n          if (\n            typeof body === \"object\"\n            && body !== null\n            && \"name\" in body\n            && \"url\" in body\n            && typeof body.name === \"string\"\n            && typeof body.url === \"string\"\n          ) {\n            return { name: body.name, url: body.url };\n          }\n\n          throw new Error(\"Invalid payload\");\n        },\n      },\n    );\n\n    expect(response.status).toBe(201);\n    expect(receivedCreateCalls).toEqual([\n      { name: \"Team Calendar\", url: \"https://example.com/feed.ics\", userId: \"user-1\" },\n    ]);\n    expect(await readJson(response)).toEqual({ id: \"source-1\", name: \"Team Calendar\" });\n  });\n\n  it(\"maps source-limit errors to payment required\", async () => {\n    const response = await handlePostIcsSourceRoute(\n      {\n        body: { name: \"Team Calendar\", url: \"https://example.com/feed.ics\" },\n        userId: \"user-1\",\n      },\n      {\n        createSource: () =>\n          Promise.reject(new TestSourceLimitError(\"plan limit reached\")),\n        isInvalidSourceUrlError: (_error): _error is TestInvalidSourceUrlError => false,\n        isSourceLimitError: (error) => error instanceof TestSourceLimitError,\n        parseCreateSourceBody: () => ({\n          name: \"Team Calendar\",\n          url: \"https://example.com/feed.ics\",\n        }),\n      },\n    );\n\n    expect(response.status).toBe(402);\n  });\n\n  it(\"maps invalid-source-url errors to bad request with authRequired flag\", async () => {\n    const response = await handlePostIcsSourceRoute(\n      {\n        body: { name: \"Team Calendar\", url: \"https://example.com/feed.ics\" },\n        userId: \"user-1\",\n      },\n      {\n        createSource: () =>\n          Promise.reject(new TestInvalidSourceUrlError(\"requires auth\", true)),\n        isInvalidSourceUrlError: (error): error is TestInvalidSourceUrlError =>\n          error instanceof TestInvalidSourceUrlError,\n        isSourceLimitError: () => false,\n        parseCreateSourceBody: () => ({\n          name: \"Team Calendar\",\n          url: \"https://example.com/feed.ics\",\n        }),\n      },\n    );\n\n    expect(response.status).toBe(400);\n    expect(await readJson(response)).toEqual({\n      authRequired: true,\n      error: \"requires auth\",\n    });\n  });\n\n  it(\"maps body parse failures to bad request\", async () => {\n    const response = await handlePostIcsSourceRoute(\n      {\n        body: { bad: true },\n        userId: \"user-1\",\n      },\n      {\n        createSource: () => Promise.resolve({ id: \"source-1\" }),\n        isInvalidSourceUrlError: (_error): _error is TestInvalidSourceUrlError => false,\n        isSourceLimitError: () => false,\n        parseCreateSourceBody: () => {\n          throw new Error(\"parse failed\");\n        },\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/routes/api/sources/[id]/mapping-routes.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  handleGetSourceDestinationsRoute,\n  handleGetSourcesForDestinationRoute,\n  handlePutSourceDestinationsRoute,\n  handlePutSourcesForDestinationRoute,\n} from \"../../../../../src/routes/api/sources/[id]/mapping-routes\";\nimport { MAPPING_LIMIT_ERROR_MESSAGE } from \"@/utils/source-destination-mappings\";\n\nconst readJson = (response: Response): Promise<unknown> => response.json();\n\ndescribe(\"handleGetSourceDestinationsRoute\", () => {\n  it(\"returns 400 when source id param is missing\", async () => {\n    const response = await handleGetSourceDestinationsRoute(\n      { params: {}, userId: \"user-1\" },\n      {\n        getDestinationsForSource: () => Promise.resolve([]),\n        sourceExists: () => Promise.resolve(true),\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n\n  it(\"returns 404 when source is not owned by user\", async () => {\n    const response = await handleGetSourceDestinationsRoute(\n      { params: { id: \"source-1\" }, userId: \"user-1\" },\n      {\n        getDestinationsForSource: () => Promise.resolve([]),\n        sourceExists: () => Promise.resolve(false),\n      },\n    );\n\n    expect(response.status).toBe(404);\n  });\n\n  it(\"returns linked destination IDs for valid source\", async () => {\n    const response = await handleGetSourceDestinationsRoute(\n      { params: { id: \"source-1\" }, userId: \"user-1\" },\n      {\n        getDestinationsForSource: () => Promise.resolve([\"dest-1\", \"dest-2\"]),\n        sourceExists: () => Promise.resolve(true),\n      },\n    );\n\n    expect(response.status).toBe(200);\n    expect(await readJson(response)).toEqual({ destinationIds: [\"dest-1\", \"dest-2\"] });\n  });\n});\n\ndescribe(\"handlePutSourceDestinationsRoute\", () => {\n  it(\"returns 400 when request body is invalid\", async () => {\n    const response = await handlePutSourceDestinationsRoute(\n      {\n        body: { calendarIds: \"not-an-array\" },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setDestinationsForSource: () => Promise.resolve(),\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n\n  it(\"returns 404 for missing source calendar errors\", async () => {\n    const response = await handlePutSourceDestinationsRoute(\n      {\n        body: { calendarIds: [\"dest-1\"] },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setDestinationsForSource: () =>\n          Promise.reject(new Error(\"Source calendar not found\")),\n      },\n    );\n\n    expect(response.status).toBe(404);\n  });\n\n  it(\"returns 400 for invalid destination calendar errors\", async () => {\n    const response = await handlePutSourceDestinationsRoute(\n      {\n        body: { calendarIds: [\"dest-1\"] },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setDestinationsForSource: () =>\n          Promise.reject(new Error(\"Some destination calendars not found\")),\n      },\n    );\n\n    expect(response.status).toBe(400);\n    expect(await readJson(response)).toEqual({\n      error: \"Some destination calendars not found\",\n    });\n  });\n\n  it(\"returns 402 when mapping limit is reached\", async () => {\n    const response = await handlePutSourceDestinationsRoute(\n      {\n        body: { calendarIds: [\"dest-1\"] },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setDestinationsForSource: () =>\n          Promise.reject(new Error(MAPPING_LIMIT_ERROR_MESSAGE)),\n      },\n    );\n\n    expect(response.status).toBe(402);\n    expect(await readJson(response)).toEqual({\n      error: MAPPING_LIMIT_ERROR_MESSAGE,\n    });\n  });\n});\n\ndescribe(\"handleGetSourcesForDestinationRoute\", () => {\n  it(\"returns 400 when destination id param is missing\", async () => {\n    const response = await handleGetSourcesForDestinationRoute(\n      { params: {}, userId: \"user-1\" },\n      {\n        destinationExists: () => Promise.resolve(true),\n        getSourcesForDestination: () => Promise.resolve([]),\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n\n  it(\"returns 404 when destination is not owned by user\", async () => {\n    const response = await handleGetSourcesForDestinationRoute(\n      { params: { id: \"dest-1\" }, userId: \"user-1\" },\n      {\n        destinationExists: () => Promise.resolve(false),\n        getSourcesForDestination: () => Promise.resolve([]),\n      },\n    );\n\n    expect(response.status).toBe(404);\n  });\n\n  it(\"returns linked source IDs for valid destination\", async () => {\n    const response = await handleGetSourcesForDestinationRoute(\n      { params: { id: \"dest-1\" }, userId: \"user-1\" },\n      {\n        destinationExists: () => Promise.resolve(true),\n        getSourcesForDestination: () => Promise.resolve([\"source-1\"]),\n      },\n    );\n\n    expect(response.status).toBe(200);\n    expect(await readJson(response)).toEqual({ sourceIds: [\"source-1\"] });\n  });\n});\n\ndescribe(\"handlePutSourcesForDestinationRoute\", () => {\n  it(\"returns 400 when request body is invalid\", async () => {\n    const response = await handlePutSourcesForDestinationRoute(\n      {\n        body: { calendarIds: \"bad-value\" },\n        params: { id: \"dest-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setSourcesForDestination: () => Promise.resolve(),\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n\n  it(\"returns 404 for missing destination calendar errors\", async () => {\n    const response = await handlePutSourcesForDestinationRoute(\n      {\n        body: { calendarIds: [\"source-1\"] },\n        params: { id: \"dest-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setSourcesForDestination: () =>\n          Promise.reject(new Error(\"Destination calendar not found\")),\n      },\n    );\n\n    expect(response.status).toBe(404);\n  });\n\n  it(\"returns 400 for invalid source calendar errors\", async () => {\n    const response = await handlePutSourcesForDestinationRoute(\n      {\n        body: { calendarIds: [\"source-1\"] },\n        params: { id: \"dest-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setSourcesForDestination: () =>\n          Promise.reject(new Error(\"Some source calendars not found\")),\n      },\n    );\n\n    expect(response.status).toBe(400);\n    expect(await readJson(response)).toEqual({\n      error: \"Some source calendars not found\",\n    });\n  });\n\n  it(\"returns 402 when mapping limit is reached\", async () => {\n    const response = await handlePutSourcesForDestinationRoute(\n      {\n        body: { calendarIds: [\"source-1\"] },\n        params: { id: \"dest-1\" },\n        userId: \"user-1\",\n      },\n      {\n        setSourcesForDestination: () =>\n          Promise.reject(new Error(MAPPING_LIMIT_ERROR_MESSAGE)),\n      },\n    );\n\n    expect(response.status).toBe(402);\n    expect(await readJson(response)).toEqual({\n      error: MAPPING_LIMIT_ERROR_MESSAGE,\n    });\n  });\n});\n"
  },
  {
    "path": "services/api/tests/routes/api/sources/[id]/source-item-routes.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { handlePatchSourceRoute } from \"../../../../../src/routes/api/sources/[id]/source-item-routes\";\n\nconst readJson = (response: Response): Promise<unknown> => response.json();\n\ndescribe(\"handlePatchSourceRoute\", () => {\n  it(\"returns 400 when id param is missing\", async () => {\n    const response = await handlePatchSourceRoute(\n      { body: {}, params: {}, userId: \"user-1\" },\n      {\n        canUseEventFilters: () => Promise.resolve(true),\n        updateSource: () => Promise.resolve(null),\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n\n  it(\"returns 400 when no valid fields are provided\", async () => {\n    const response = await handlePatchSourceRoute(\n      { body: { unknown: true }, params: { id: \"source-1\" }, userId: \"user-1\" },\n      {\n        canUseEventFilters: () => Promise.resolve(true),\n        updateSource: () => Promise.resolve(null),\n      },\n    );\n\n    expect(response.status).toBe(400);\n  });\n\n  it(\"returns 404 when source update target is missing\", async () => {\n    const response = await handlePatchSourceRoute(\n      {\n        body: { name: \"Updated Name\" },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        canUseEventFilters: () => Promise.resolve(true),\n        updateSource: () => Promise.resolve(null),\n      },\n    );\n\n    expect(response.status).toBe(404);\n  });\n\n  it(\"returns 403 when free users update the event name template\", async () => {\n    const response = await handlePatchSourceRoute(\n      {\n        body: { customEventName: \"{{calendar_name}}\" },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        canUseEventFilters: () => Promise.resolve(false),\n        updateSource: () => Promise.resolve(null),\n      },\n    );\n\n    expect(response.status).toBe(403);\n    expect(await readJson(response)).toEqual({\n      error: \"Event filters require a Pro plan.\",\n    });\n  });\n\n  it(\"returns updated source for valid name update\", async () => {\n    const response = await handlePatchSourceRoute(\n      {\n        body: { name: \"Updated Name\" },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        canUseEventFilters: () => Promise.resolve(true),\n        updateSource: (_userId, _sourceId, updates) => Promise.resolve({\n          id: \"source-1\",\n          ...updates,\n        }),\n      },\n    );\n\n    expect(response.status).toBe(200);\n  });\n\n  it(\"returns updated source for exclusion filter update\", async () => {\n    const response = await handlePatchSourceRoute(\n      {\n        body: { excludeEventDescription: true },\n        params: { id: \"source-1\" },\n        userId: \"user-1\",\n      },\n      {\n        canUseEventFilters: () => Promise.resolve(true),\n        updateSource: (_userId, _sourceId, updates) => Promise.resolve({\n          id: \"source-1\",\n          ...updates,\n        }),\n      },\n    );\n\n    expect(response.status).toBe(200);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/account-locks.test.ts",
    "content": "import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { createCalDAVDestination as createCalDAVDestinationFn } from \"../../src/utils/caldav\";\nimport type { createCalDAVSource as createCalDAVSourceFn } from \"../../src/utils/caldav-sources\";\nimport type { handleOAuthCallback as handleOAuthCallbackFn } from \"../../src/utils/oauth\";\nimport type {\n  createOAuthSource as createOAuthSourceFn,\n  importOAuthAccountCalendars as importOAuthAccountCalendarsFn,\n} from \"../../src/utils/oauth-sources\";\n\nlet createCalDAVDestination: typeof createCalDAVDestinationFn = () =>\n  Promise.reject(new Error(\"Module not loaded\"));\nlet createCalDAVSource: typeof createCalDAVSourceFn = () =>\n  Promise.reject(new Error(\"Module not loaded\"));\nlet createOAuthSource: typeof createOAuthSourceFn = () =>\n  Promise.reject(new Error(\"Module not loaded\"));\nlet handleOAuthCallback: typeof handleOAuthCallbackFn = () =>\n  Promise.reject(new Error(\"Module not loaded\"));\nlet importOAuthAccountCalendars: typeof importOAuthAccountCalendarsFn = () =>\n  Promise.reject(new Error(\"Module not loaded\"));\n\nlet canAddAccountResult = true;\nlet destinationAccountId: string | null = null;\nlet googleCalendars = [{ id: \"external-1\", summary: \"Team Calendar\" }];\nlet hasRequiredScopesResult = true;\nlet insertCalls: unknown[] = [];\nlet saveCalDAVDestinationCalls: { accountId: string; transactionOpen: boolean; tx: object }[] = [];\nlet saveCalendarDestinationCalls: { accountId: string; needsReauthentication: boolean; transactionOpen: boolean; tx: object }[] = [];\nlet selectResults: unknown[][] = [];\nlet transactionOpen = false;\nlet triggerSyncCalls: string[] = [];\nlet txInstance: object = {};\n\ntype SelectPromise = Promise<unknown[]> & {\n  from: () => SelectPromise;\n  innerJoin: () => SelectPromise;\n  leftJoin: () => SelectPromise;\n  where: () => SelectPromise;\n  limit: () => Promise<unknown[]>;\n};\n\nconst createSelectBuilder = (result: unknown[]): SelectPromise => {\n  const chain = Promise.resolve(result) as SelectPromise;\n  chain.from = () => chain;\n  chain.innerJoin = () => chain;\n  chain.leftJoin = () => chain;\n  chain.where = () => chain;\n  chain.limit = () => Promise.resolve(result);\n  return chain;\n};\n\nconst createInsertBuilder = (result: unknown) => ({\n  values: (values: unknown) => {\n    insertCalls.push(values);\n\n    const valueChain = Promise.resolve() as Promise<void> & {\n      onConflictDoNothing: () => Promise<void>;\n      onConflictDoUpdate: () => { returning: () => Promise<unknown> };\n      returning: () => Promise<unknown>;\n    };\n    valueChain.onConflictDoNothing = () => Promise.resolve();\n    valueChain.onConflictDoUpdate = () => ({\n      returning: () => Promise.resolve(result),\n    });\n    valueChain.returning = () => Promise.resolve(result);\n\n    return valueChain;\n  },\n});\n\nconst createTxInstance = (): object => ({\n  execute: () => Promise.resolve(),\n  insert: () => createInsertBuilder([]),\n  select: () => createSelectBuilder(selectResults.shift() ?? []),\n  selectDistinct: () => ({\n    from: () => ({}),\n  }),\n});\n\nbeforeAll(async () => {\n  vi.mock(\"../../src/env\", () => ({\n    default: {},\n    schema: {},\n  }));\n\n  vi.mock(\"../../src/context\", () => ({\n    baseUrl: \"https://keeper.test\",\n    database: {\n      insert: () => {\n        throw new Error(\"global database.insert should not be used\");\n      },\n      select: () => {\n        throw new Error(\"global database.select should not be used\");\n      },\n      selectDistinct: () => ({\n        from: () => ({}),\n      }),\n      transaction: async (callback: (tx: object) => Promise<unknown>) => {\n        transactionOpen = true;\n        try {\n          return await callback(txInstance);\n        } finally {\n          transactionOpen = false;\n        }\n      },\n    },\n    encryptionKey: \"encryption-key\",\n    premiumService: {\n      canAddAccount: () => Promise.resolve(canAddAccountResult),\n      getUserPlan: () => Promise.resolve(\"free\"),\n    },\n  }));\n\n  vi.mock(\"../../src/utils/background-task\", () => ({\n    spawnBackgroundJob: (_jobName: string, fields: { userId: string }, _callback: () => Promise<void>) => {\n      triggerSyncCalls.push(fields.userId);\n    },\n  }));\n\n  vi.mock(\"../../src/utils/destinations\", () => ({\n    exchangeCodeForTokens: () =>\n      Promise.resolve((() => {\n        let scope = \"calendar.read\";\n        if (hasRequiredScopesResult) {\n          scope = \"calendar.read calendar.write\";\n        }\n\n        return {\n        access_token: \"access-token\",\n        expires_in: 3600,\n        refresh_token: \"refresh-token\",\n          scope,\n        };\n      })()),\n    fetchUserInfo: () =>\n      Promise.resolve({\n        email: \"person@example.com\",\n        id: \"external-account-1\",\n      }),\n    getDestinationAccountId: () => Promise.resolve(destinationAccountId),\n    hasRequiredScopes: () => Promise.resolve(hasRequiredScopesResult),\n    saveCalDAVDestinationWithDatabase: (tx: object, _userId: string, _provider: string, accountId: string) => {\n      saveCalDAVDestinationCalls.push({ accountId, transactionOpen, tx });\n      return Promise.resolve();\n    },\n    saveCalendarDestinationWithDatabase: (\n      tx: object,\n      _userId: string,\n      _provider: string,\n      accountId: string,\n      _email: string | null,\n      _accessToken: string,\n      _refreshToken: string,\n      _expiresAt: Date,\n      needsReauthentication = false,\n    ) => {\n      saveCalendarDestinationCalls.push({ accountId, needsReauthentication, transactionOpen, tx });\n      return Promise.resolve();\n    },\n    validateState: () => {\n      if (destinationAccountId) {\n        return {\n          destinationId: destinationAccountId,\n          userId: \"user-1\",\n        };\n      }\n\n      return { userId: \"user-1\" };\n    },\n  }));\n\n  vi.mock(\"../../src/utils/enqueue-push-sync\", () => ({\n    enqueuePushSync: (userId: string) => {\n      triggerSyncCalls.push(userId);\n    },\n  }));\n\n  vi.mock(\"@keeper.sh/database\", () => ({\n    encryptPassword: () => \"encrypted-password\",\n  }));\n\n  vi.mock(\"@keeper.sh/calendar/caldav\", () => ({\n    createCalDAVClient: () => ({\n      discoverCalendars: () => Promise.resolve([]),\n      getResolvedAuthMethod: () => \"basic\",\n    }),\n    createCalDAVProvider: () => ({\n      id: \"icloud\",\n    }),\n    createCalDAVSourceProvider: () => ({\n      id: \"icloud\",\n    }),\n  }));\n\n  vi.mock(\"@keeper.sh/calendar/google\", () => ({\n    createGoogleCalendarProvider: () => ({\n      id: \"google\",\n    }),\n    createGoogleCalendarSourceProvider: () => ({\n      id: \"google\",\n    }),\n    listUserCalendars: () => Promise.resolve(googleCalendars),\n  }));\n\n  vi.mock(\"@keeper.sh/calendar/outlook\", () => ({\n    createOutlookCalendarProvider: () => ({\n      id: \"outlook\",\n    }),\n    createOutlookSourceProvider: () => ({\n      id: \"outlook\",\n    }),\n    listUserCalendars: () => Promise.resolve([]),\n  }));\n\n  vi.mock(\"@keeper.sh/calendar\", () => ({\n    PROVIDER_DEFINITIONS: [],\n    getActiveProviders: () => [],\n    getCalDAVProviders: () => [],\n    getOAuthProviders: () => [],\n    getProvider: () => globalThis.undefined,\n    getProvidersByAuthType: () => [],\n    isCalDAVProvider: () => true,\n    isOAuthProvider: () => false,\n    isProviderId: () => false,\n  }));\n\n  ({\n    handleOAuthCallback,\n  } = await import(\"../../src/utils/oauth\"));\n  ({\n    createOAuthSource,\n    importOAuthAccountCalendars,\n  } = await import(\"../../src/utils/oauth-sources\"));\n  ({\n    createCalDAVDestination,\n  } = await import(\"../../src/utils/caldav\"));\n  ({\n    createCalDAVSource,\n  } = await import(\"../../src/utils/caldav-sources\"));\n});\n\nafterAll(() => {\n  vi.restoreAllMocks();\n});\n\nbeforeEach(() => {\n  canAddAccountResult = true;\n  destinationAccountId = null;\n  googleCalendars = [{ id: \"external-1\", summary: \"Team Calendar\" }];\n  hasRequiredScopesResult = true;\n  insertCalls = [];\n  saveCalDAVDestinationCalls = [];\n  saveCalendarDestinationCalls = [];\n  selectResults = [];\n  transactionOpen = false;\n  triggerSyncCalls = [];\n  txInstance = createTxInstance();\n});\n\ndescribe(\"Account locks\", () => {\n  it(\"rechecks the OAuth destination cap inside the locked transaction\", async () => {\n    canAddAccountResult = false;\n    selectResults = [\n      [],\n      [{ id: \"existing-account\" }],\n    ];\n\n    await expect(\n      handleOAuthCallback({\n        code: \"oauth-code\",\n        error: null,\n        provider: \"google\",\n        state: \"oauth-state\",\n      }),\n    ).rejects.toMatchObject({\n      message: \"Account limit reached\",\n    });\n\n    expect(saveCalendarDestinationCalls).toHaveLength(0);\n  });\n\n  it(\"persists OAuth reauthentication updates while the transaction lock is held\", async () => {\n    destinationAccountId = \"external-account-1\";\n    hasRequiredScopesResult = false;\n\n    await handleOAuthCallback({\n      code: \"oauth-code\",\n      error: null,\n      provider: \"google\",\n      state: \"oauth-state\",\n    });\n\n    expect(saveCalendarDestinationCalls).toEqual([\n      {\n        accountId: \"external-account-1\",\n        needsReauthentication: true,\n        transactionOpen: true,\n        tx: txInstance,\n      },\n    ]);\n  });\n\n  it(\"creates OAuth sources without escaping the locked transaction\", async () => {\n    selectResults = [\n      [{ email: \"person@example.com\" }],\n      [],\n      [],\n      [],\n    ];\n\n    let insertStep = 0;\n    txInstance = {\n      execute: () => Promise.resolve(),\n      insert: () => {\n        insertStep += 1;\n        if (insertStep === 1) {\n          return createInsertBuilder([{ id: \"account-1\" }]);\n        }\n\n        return createInsertBuilder([{ id: \"source-1\", name: \"Team Calendar\" }]);\n      },\n      select: () => createSelectBuilder(selectResults.shift() ?? []),\n      selectDistinct: () => ({\n        from: () => ({}),\n      }),\n    };\n\n    const source = await createOAuthSource({\n      externalCalendarId: \"external-1\",\n      name: \"Team Calendar\",\n      oauthCredentialId: \"credential-1\",\n      provider: \"google\",\n      userId: \"user-1\",\n    });\n\n    expect(source).toEqual({\n      email: \"person@example.com\",\n      id: \"source-1\",\n      name: \"Team Calendar\",\n      provider: \"google\",\n    });\n    expect(insertCalls).toHaveLength(2);\n    expect(triggerSyncCalls).toEqual([\"user-1\"]);\n  });\n\n  it(\"imports OAuth calendars without escaping the locked transaction\", async () => {\n    selectResults = [\n      [],\n      [],\n      [],\n    ];\n\n    let insertStep = 0;\n    txInstance = {\n      execute: () => Promise.resolve(),\n      insert: () => {\n        insertStep += 1;\n        if (insertStep === 1) {\n          return createInsertBuilder([{ id: \"account-1\" }]);\n        }\n\n        return createInsertBuilder(null);\n      },\n      select: () => createSelectBuilder(selectResults.shift() ?? []),\n      selectDistinct: () => ({\n        from: () => ({}),\n      }),\n    };\n\n    const accountId = await importOAuthAccountCalendars({\n      accessToken: \"access-token\",\n      email: \"person@example.com\",\n      oauthCredentialId: \"credential-1\",\n      provider: \"google\",\n      userId: \"user-1\",\n    });\n\n    expect(accountId).toBe(\"account-1\");\n    expect(insertCalls).toHaveLength(2);\n    expect(triggerSyncCalls).toEqual([\"user-1\"]);\n  });\n\n  it(\"creates CalDAV destinations before releasing the transaction lock\", async () => {\n    selectResults = [\n      [],\n      [],\n    ];\n\n    await createCalDAVDestination(\n      \"user-1\",\n      \"icloud\",\n      \"https://caldav.test\",\n      {\n        password: \"secret\",\n        username: \"person@example.com\",\n      },\n      \"https://caldav.test/team\",\n    );\n\n    expect(saveCalDAVDestinationCalls).toEqual([\n      {\n        accountId: \"person@example.com@caldav.test\",\n        transactionOpen: true,\n        tx: txInstance,\n      },\n    ]);\n    expect(triggerSyncCalls).toEqual([\"user-1\"]);\n  });\n\n  it(\"creates CalDAV sources through the locked transaction client\", async () => {\n    selectResults = [\n      [],\n      [],\n      [],\n    ];\n\n    let insertStep = 0;\n    txInstance = {\n      execute: () => Promise.resolve(),\n      insert: () => {\n        insertStep += 1;\n        if (insertStep === 1) {\n          return createInsertBuilder([{ id: \"credential-1\" }]);\n        }\n        if (insertStep === 2) {\n          return createInsertBuilder([{ id: \"account-1\" }]);\n        }\n\n        return createInsertBuilder([{\n          createdAt: new Date(\"2026-03-10T12:00:00.000Z\"),\n          id: \"source-1\",\n          name: \"Team CalDAV\",\n          userId: \"user-1\",\n        }]);\n      },\n      select: () => createSelectBuilder(selectResults.shift() ?? []),\n      selectDistinct: () => ({\n        from: () => ({}),\n      }),\n    };\n\n    const source = await createCalDAVSource(\"user-1\", {\n      authMethod: \"basic\",\n      calendarUrl: \"https://caldav.test/team\",\n      name: \"Team CalDAV\",\n      password: \"secret\",\n      provider: \"icloud\",\n      serverUrl: \"https://caldav.test\",\n      username: \"person@example.com\",\n    });\n\n    expect(source).toMatchObject({\n      accountId: \"account-1\",\n      calendarUrl: \"https://caldav.test/team\",\n      id: \"source-1\",\n      name: \"Team CalDAV\",\n      provider: \"icloud\",\n      userId: \"user-1\",\n    });\n    expect(triggerSyncCalls).toEqual([\"user-1\"]);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/api-rate-limit.test.ts",
    "content": "import { describe, expect, it, beforeEach } from \"vitest\";\nimport { checkAndIncrementApiUsage, FREE_DAILY_LIMIT } from \"../../src/utils/api-rate-limit\";\n\nconst createMockRedis = () => {\n  const store = new Map<string, number>();\n  const expiries = new Map<string, number>();\n\n  return {\n    store,\n    expiries,\n    incr: (key: string): Promise<number> => {\n      const current = store.get(key) ?? 0;\n      const next = current + 1;\n      store.set(key, next);\n      return Promise.resolve(next);\n    },\n    expire: (key: string, seconds: number): Promise<number> => {\n      expiries.set(key, seconds);\n      return Promise.resolve(1);\n    },\n  };\n};\n\ndescribe(\"checkAndIncrementApiUsage\", () => {\n  let mockRedis = createMockRedis();\n\n  beforeEach(() => {\n    mockRedis = createMockRedis();\n  });\n\n  it(\"allows pro users without checking redis\", async () => {\n    const result = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"pro\");\n\n    expect(result.allowed).toBe(true);\n    expect(result.remaining).toBe(-1);\n    expect(result.limit).toBe(-1);\n    expect(mockRedis.store.size).toBe(0);\n  });\n\n  it(\"allows free users under the limit\", async () => {\n    const result = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n\n    expect(result.allowed).toBe(true);\n    expect(result.remaining).toBe(FREE_DAILY_LIMIT - 1);\n    expect(result.limit).toBe(FREE_DAILY_LIMIT);\n  });\n\n  it(\"sets expiry on first call\", async () => {\n    await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n\n    const expiryKeys = [...mockRedis.expiries.keys()];\n    expect(expiryKeys).toHaveLength(1);\n    const firstKey = expiryKeys[0] as string;\n    expect(mockRedis.expiries.get(firstKey)).toBe(86_400);\n  });\n\n  it(\"does not reset expiry on subsequent calls\", async () => {\n    await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n    mockRedis.expiries.clear();\n\n    await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n\n    expect(mockRedis.expiries.size).toBe(0);\n  });\n\n  it(\"tracks remaining count correctly\", async () => {\n    for (let call = 0; call < 10; call++) {\n      await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n    }\n\n    const result = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n\n    expect(result.allowed).toBe(true);\n    expect(result.remaining).toBe(FREE_DAILY_LIMIT - 11);\n  });\n\n  it(\"blocks free users at the limit\", async () => {\n    for (let call = 0; call < FREE_DAILY_LIMIT; call++) {\n      await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n    }\n\n    const result = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n\n    expect(result.allowed).toBe(false);\n    expect(result.remaining).toBe(0);\n    expect(result.limit).toBe(FREE_DAILY_LIMIT);\n  });\n\n  it(\"blocks free users over the limit\", async () => {\n    for (let call = 0; call < FREE_DAILY_LIMIT + 5; call++) {\n      await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n    }\n\n    const result = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n\n    expect(result.allowed).toBe(false);\n    expect(result.remaining).toBe(0);\n  });\n\n  it(\"treats null plan as free\", async () => {\n    for (let call = 0; call < FREE_DAILY_LIMIT; call++) {\n      await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", null);\n    }\n\n    const result = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", null);\n\n    expect(result.allowed).toBe(false);\n  });\n\n  it(\"tracks users independently\", async () => {\n    for (let call = 0; call < FREE_DAILY_LIMIT; call++) {\n      await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n    }\n\n    const blockedResult = await checkAndIncrementApiUsage(mockRedis as never, \"user-1\", \"free\");\n    const allowedResult = await checkAndIncrementApiUsage(mockRedis as never, \"user-2\", \"free\");\n\n    expect(blockedResult.allowed).toBe(false);\n    expect(allowedResult.allowed).toBe(true);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/enqueue-push-sync.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { runEnqueuePushSync } from \"../../src/utils/enqueue-push-sync\";\nimport type { EnqueuePushSyncDependencies, PushSyncQueue } from \"../../src/utils/enqueue-push-sync\";\nimport type { PushSyncJobPayload } from \"@keeper.sh/queue\";\n\ninterface AddedJob {\n  name: string;\n  data: PushSyncJobPayload;\n}\n\nconst createMockQueue = (): { queue: PushSyncQueue; addedJobs: AddedJob[]; closed: boolean } => {\n  const state = { addedJobs: [] as AddedJob[], closed: false };\n\n  const queue: PushSyncQueue = {\n    add: (name, data) => {\n      state.addedJobs.push({ name, data });\n      return Promise.resolve();\n    },\n    close: () => {\n      state.closed = true;\n      return Promise.resolve();\n    },\n  };\n\n  return { queue, get addedJobs() { return state.addedJobs; }, get closed() { return state.closed; } };\n};\n\nconst createDependencies = (\n  queue: PushSyncQueue,\n  correlationId: string,\n): EnqueuePushSyncDependencies => ({\n  createQueue: () => queue,\n  generateCorrelationId: () => correlationId,\n});\n\ndescribe(\"runEnqueuePushSync\", () => {\n  it(\"enqueues a job with the correct name and payload\", async () => {\n    const mock = createMockQueue();\n    const dependencies = createDependencies(mock.queue, \"correlation-123\");\n\n    await runEnqueuePushSync(\"user-42\", \"pro\", dependencies);\n\n    expect(mock.addedJobs).toHaveLength(1);\n    expect(mock.addedJobs[0]).toEqual({\n      name: \"sync-user-42\",\n      data: {\n        userId: \"user-42\",\n        plan: \"pro\",\n        correlationId: \"correlation-123\",\n      },\n    });\n  });\n\n  it(\"uses the provided plan in the job payload\", async () => {\n    const mock = createMockQueue();\n    const dependencies = createDependencies(mock.queue, \"correlation-456\");\n\n    await runEnqueuePushSync(\"user-1\", \"free\", dependencies);\n\n    expect(mock.addedJobs[0]?.data.plan).toBe(\"free\");\n  });\n\n  it(\"closes the queue after enqueuing\", async () => {\n    const mock = createMockQueue();\n    const dependencies = createDependencies(mock.queue, \"correlation-789\");\n\n    await runEnqueuePushSync(\"user-1\", \"free\", dependencies);\n\n    expect(mock.closed).toBe(true);\n  });\n\n  it(\"closes the queue even when add fails\", async () => {\n    let closeCalled = false;\n\n    const failingQueue: PushSyncQueue = {\n      add: () => Promise.reject(new Error(\"queue unavailable\")),\n      close: () => {\n        closeCalled = true;\n        return Promise.resolve();\n      },\n    };\n    try {\n      await runEnqueuePushSync(\"user-1\", \"free\", createDependencies(failingQueue, \"id\"));\n    } catch {\n      // Expected\n    }\n\n    expect(closeCalled).toBe(true);\n  });\n\n  it(\"propagates the error from a failed add\", () => {\n    const failingQueue: PushSyncQueue = {\n      add: () => Promise.reject(new Error(\"queue unavailable\")),\n      close: () => Promise.resolve(),\n    };\n\n    expect(\n      runEnqueuePushSync(\"user-1\", \"free\", createDependencies(failingQueue, \"id\")),\n    ).rejects.toThrow(\"queue unavailable\");\n  });\n\n  it(\"generates a unique correlation ID per enqueue via the dependency\", async () => {\n    const mock = createMockQueue();\n    let callCount = 0;\n    const dependencies: EnqueuePushSyncDependencies = {\n      createQueue: () => mock.queue,\n      generateCorrelationId: () => {\n        callCount += 1;\n        return `correlation-${callCount}`;\n      },\n    };\n\n    await runEnqueuePushSync(\"user-1\", \"free\", dependencies);\n    await runEnqueuePushSync(\"user-2\", \"pro\", dependencies);\n\n    expect(mock.addedJobs[0]?.data.correlationId).toBe(\"correlation-1\");\n    expect(mock.addedJobs[1]?.data.correlationId).toBe(\"correlation-2\");\n  });\n\n  it(\"formats the job name as sync-{userId}\", async () => {\n    const mock = createMockQueue();\n    const dependencies = createDependencies(mock.queue, \"id\");\n\n    await runEnqueuePushSync(\"user-abc-123\", \"free\", dependencies);\n\n    expect(mock.addedJobs[0]?.name).toBe(\"sync-user-abc-123\");\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/ical.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { formatEventsAsIcal } from \"../../src/utils/ical-format\";\nimport type { CalendarEvent } from \"../../src/utils/ical-format\";\n\nconst resolveTemplate = (template: string, variables: Record<string, string>): string =>\n  template.replaceAll(/\\{\\{(\\w+)\\}\\}/g, (match, name: string) => variables[name] ?? match);\n\ninterface SummaryEvent {\n  title: string | null;\n  calendarName: string;\n}\n\ninterface SummarySettings {\n  includeEventName: boolean;\n  customEventName: string;\n}\n\nconst resolveEventSummary = (event: SummaryEvent, settings: SummarySettings): string => {\n  let template = settings.customEventName;\n  if (settings.includeEventName) {\n    template = event.title || settings.customEventName;\n  }\n\n  return resolveTemplate(template, {\n    event_name: event.title || \"Untitled\",\n    calendar_name: event.calendarName,\n  });\n};\n\nconst DEFAULT_SETTINGS = {\n  includeEventName: false,\n  includeEventDescription: false,\n  includeEventLocation: false,\n  excludeAllDayEvents: false,\n  customEventName: \"Busy\",\n};\n\nconst makeEvent = (overrides: Partial<CalendarEvent> = {}): CalendarEvent => ({\n  id: \"test-event-id\",\n  title: \"Test Event\",\n  description: null,\n  location: null,\n  startTime: new Date(\"2026-03-28T00:00:00Z\"),\n  endTime: new Date(\"2026-03-29T00:00:00Z\"),\n  isAllDay: false,\n  calendarName: \"Work\",\n  ...overrides,\n});\n\ndescribe(\"formatEventsAsIcal\", () => {\n  describe(\"all-day events\", () => {\n    it(\"emits VALUE=DATE for all-day events instead of datetime\", () => {\n      const ics = formatEventsAsIcal(\n        [makeEvent({ isAllDay: true })],\n        DEFAULT_SETTINGS,\n      );\n\n      expect(ics).toContain(\"DTSTART;VALUE=DATE:20260328\");\n      expect(ics).toContain(\"DTEND;VALUE=DATE:20260329\");\n      expect(ics).not.toContain(\"DTSTART:20260328T000000Z\");\n      expect(ics).not.toContain(\"DTEND:20260329T000000Z\");\n    });\n\n    it(\"emits datetime format for non-all-day events\", () => {\n      const ics = formatEventsAsIcal(\n        [makeEvent({\n          isAllDay: false,\n          startTime: new Date(\"2026-03-28T09:00:00Z\"),\n          endTime: new Date(\"2026-03-28T17:00:00Z\"),\n        })],\n        DEFAULT_SETTINGS,\n      );\n\n      expect(ics).toContain(\"DTSTART:20260328T090000Z\");\n      expect(ics).toContain(\"DTEND:20260328T170000Z\");\n    });\n\n    it(\"infers all-day when isAllDay is null and times are midnight UTC\", () => {\n      const ics = formatEventsAsIcal(\n        [makeEvent({ isAllDay: null })],\n        DEFAULT_SETTINGS,\n      );\n\n      expect(ics).toContain(\"DTSTART;VALUE=DATE:20260328\");\n      expect(ics).toContain(\"DTEND;VALUE=DATE:20260329\");\n    });\n\n    it(\"filters all-day events when excludeAllDayEvents is true\", () => {\n      const ics = formatEventsAsIcal(\n        [makeEvent({ isAllDay: true })],\n        { ...DEFAULT_SETTINGS, excludeAllDayEvents: true },\n      );\n\n      expect(ics).not.toContain(\"Test Event\");\n      expect(ics).not.toContain(\"test-event-id\");\n    });\n  });\n});\n\ndescribe(\"resolveTemplate\", () => {\n  it(\"replaces known variables in template\", () => {\n    expect(resolveTemplate(\"{{calendar_name}}\", { calendar_name: \"Work\" })).toBe(\"Work\");\n  });\n\n  it(\"replaces multiple variables\", () => {\n    expect(\n      resolveTemplate(\"{{event_name}} - {{calendar_name}}\", {\n        calendar_name: \"Work\",\n        event_name: \"Meeting\",\n      }),\n    ).toBe(\"Meeting - Work\");\n  });\n\n  it(\"leaves unknown tokens unchanged\", () => {\n    expect(resolveTemplate(\"{{unknown}}\", {})).toBe(\"{{unknown}}\");\n  });\n\n  it(\"returns template as-is when no tokens present\", () => {\n    expect(resolveTemplate(\"Busy\", { calendar_name: \"Work\" })).toBe(\"Busy\");\n  });\n});\n\ndescribe(\"resolveEventSummary\", () => {\n  it(\"uses custom event name when includeEventName is false\", () => {\n    const result = resolveEventSummary(\n      { title: \"Team Meeting\", calendarName: \"Work\" },\n      { includeEventName: false, customEventName: \"Busy\" },\n    );\n    expect(result).toBe(\"Busy\");\n  });\n\n  it(\"uses event title when includeEventName is true\", () => {\n    const result = resolveEventSummary(\n      { title: \"Team Meeting\", calendarName: \"Work\" },\n      { includeEventName: true, customEventName: \"Busy\" },\n    );\n    expect(result).toBe(\"Team Meeting\");\n  });\n\n  it(\"falls back to custom event name when title is null and includeEventName is true\", () => {\n    const result = resolveEventSummary(\n      { title: null, calendarName: \"Work\" },\n      { includeEventName: true, customEventName: \"Busy\" },\n    );\n    expect(result).toBe(\"Busy\");\n  });\n\n  it(\"resolves template variables in custom event name\", () => {\n    const result = resolveEventSummary(\n      { title: \"Sprint Planning\", calendarName: \"Engineering\" },\n      { includeEventName: false, customEventName: \"{{calendar_name}}: {{event_name}}\" },\n    );\n    expect(result).toBe(\"Engineering: Sprint Planning\");\n  });\n\n  it(\"uses 'Untitled' for event_name variable when title is null\", () => {\n    const result = resolveEventSummary(\n      { title: null, calendarName: \"Work\" },\n      { includeEventName: false, customEventName: \"{{event_name}}\" },\n    );\n    expect(result).toBe(\"Untitled\");\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/oauth-sources.test.ts",
    "content": "import { beforeEach, describe, expect, it } from \"vitest\";\nimport {\n  createOAuthSourceWithDependencies,\n  importOAuthAccountCalendarsWithDependencies,\n} from \"../../src/utils/oauth-sources\";\n\nlet canAddAccountCalls: [string, number][] = [];\nlet canAddAccountResult = true;\nlet createAccountCalls: unknown[] = [];\nlet createSourceCalls: unknown[] = [];\nlet insertCalendarsCalls: unknown[] = [];\nlet triggerSyncCalls: { provider: string; userId: string }[] = [];\nlet listedCalendars: { externalId: string; name: string }[] = [];\n\nbeforeEach(() => {\n  canAddAccountCalls = [];\n  canAddAccountResult = true;\n  createAccountCalls = [];\n  createSourceCalls = [];\n  insertCalendarsCalls = [];\n  triggerSyncCalls = [];\n  listedCalendars = [];\n});\n\ndescribe(\"importOAuthAccountCalendarsWithDependencies\", () => {\n  it(\"rejects creating a new OAuth account when the user is at the account limit\", async () => {\n    canAddAccountResult = false;\n\n    await expect(\n      importOAuthAccountCalendarsWithDependencies(\n        {\n          accessToken: \"token\",\n          email: \"person@example.com\",\n          oauthCredentialId: \"credential-1\",\n          provider: \"google\",\n          userId: \"user-1\",\n        },\n        {\n          canAddAccount: (userId, currentCount) => {\n            canAddAccountCalls.push([userId, currentCount]);\n            return Promise.resolve(canAddAccountResult);\n          },\n          countUserAccounts: () => Promise.resolve(2),\n          createAccountId: () => Promise.resolve(\"account-1\"),\n          findExistingAccountId: () => Promise.resolve(null),\n          getUnimportedExternalCalendars: () => Promise.resolve([]),\n          insertCalendars: () => Promise.resolve(),\n          listCalendars: () => Promise.resolve([]),\n          triggerSync: () => null,\n        },\n      ),\n    ).rejects.toThrow(\"Account limit reached\");\n\n    expect(canAddAccountCalls).toEqual([[\"user-1\", 2]]);\n    expect(insertCalendarsCalls).toHaveLength(0);\n    expect(triggerSyncCalls).toHaveLength(0);\n  });\n\n  it(\"reuses an existing OAuth account without checking the account limit\", async () => {\n    listedCalendars = [{ externalId: \"external-1\", name: \"Team Calendar\" }];\n\n    const accountId = await importOAuthAccountCalendarsWithDependencies(\n      {\n        accessToken: \"token\",\n        email: \"person@example.com\",\n        oauthCredentialId: \"credential-1\",\n        provider: \"google\",\n        userId: \"user-1\",\n      },\n      {\n        canAddAccount: (userId, currentCount) => {\n          canAddAccountCalls.push([userId, currentCount]);\n          return Promise.resolve(false);\n        },\n        countUserAccounts: () => Promise.resolve(2),\n        createAccountId: () => Promise.resolve(\"new-account\"),\n        findExistingAccountId: () => Promise.resolve(\"account-1\"),\n        getUnimportedExternalCalendars: (_userId, _accountId, calendars) => Promise.resolve(calendars),\n        insertCalendars: (_userId, _accountId, calendars) => {\n          insertCalendarsCalls.push(calendars);\n          return Promise.resolve();\n        },\n        listCalendars: () => Promise.resolve(listedCalendars),\n        triggerSync: (userId, provider) => {\n          triggerSyncCalls.push({ provider, userId });\n        },\n      },\n    );\n\n    expect(accountId).toBe(\"account-1\");\n    expect(canAddAccountCalls).toHaveLength(0);\n    expect(insertCalendarsCalls).toEqual([[{ externalId: \"external-1\", name: \"Team Calendar\" }]]);\n    expect(triggerSyncCalls).toEqual([{ provider: \"google\", userId: \"user-1\" }]);\n  });\n});\n\ndescribe(\"createOAuthSourceWithDependencies\", () => {\n  it(\"allows source credentials whose email is null\", async () => {\n    const source = await createOAuthSourceWithDependencies(\n      {\n        externalCalendarId: \"external-1\",\n        name: \"Team Calendar\",\n        oauthCredentialId: \"credential-1\",\n        provider: \"google\",\n        userId: \"user-1\",\n      },\n      {\n        canAddAccount: (userId, currentCount) => {\n          canAddAccountCalls.push([userId, currentCount]);\n          return Promise.resolve(true);\n        },\n        countUserAccounts: () => Promise.resolve(0),\n        createCalendarAccount: (payload) => {\n          createAccountCalls.push(payload);\n          return Promise.resolve(\"account-1\");\n        },\n        createSource: (payload) => {\n          createSourceCalls.push(payload);\n          return Promise.resolve({ id: \"source-1\", name: \"Team Calendar\" });\n        },\n        findCredentialEmail: () => Promise.resolve({ email: null, exists: true }),\n        findExistingAccountId: () => Promise.resolve(null),\n        hasExistingCalendar: () => Promise.resolve(false),\n        triggerSync: (userId, provider) => {\n          triggerSyncCalls.push({ provider, userId });\n        },\n      },\n    );\n\n    expect(source).toEqual({\n      email: null,\n      id: \"source-1\",\n      name: \"Team Calendar\",\n      provider: \"google\",\n    });\n    expect(createAccountCalls).toEqual([\n      expect.objectContaining({\n        displayName: null,\n        email: null,\n      }),\n    ]);\n  });\n\n  it(\"reuses an existing OAuth account without checking the account limit\", async () => {\n    const source = await createOAuthSourceWithDependencies(\n      {\n        externalCalendarId: \"external-1\",\n        name: \"Team Calendar\",\n        oauthCredentialId: \"credential-1\",\n        provider: \"google\",\n        userId: \"user-1\",\n      },\n      {\n        canAddAccount: (userId, currentCount) => {\n          canAddAccountCalls.push([userId, currentCount]);\n          return Promise.resolve(false);\n        },\n        countUserAccounts: () => Promise.resolve(2),\n        createCalendarAccount: (payload) => {\n          createAccountCalls.push(payload);\n          return Promise.resolve(\"new-account\");\n        },\n        createSource: (payload) => {\n          createSourceCalls.push(payload);\n          return Promise.resolve({ id: \"source-1\", name: \"Team Calendar\" });\n        },\n        findCredentialEmail: () => Promise.resolve({ email: \"person@example.com\", exists: true }),\n        findExistingAccountId: () => Promise.resolve(\"account-1\"),\n        hasExistingCalendar: () => Promise.resolve(false),\n        triggerSync: (userId, provider) => {\n          triggerSyncCalls.push({ provider, userId });\n        },\n      },\n    );\n\n    expect(source).toEqual({\n      email: \"person@example.com\",\n      id: \"source-1\",\n      name: \"Team Calendar\",\n      provider: \"google\",\n    });\n    expect(canAddAccountCalls).toHaveLength(0);\n    expect(createAccountCalls).toHaveLength(0);\n    expect(createSourceCalls).toEqual([\n      expect.objectContaining({\n        accountId: \"account-1\",\n        externalCalendarId: \"external-1\",\n        name: \"Team Calendar\",\n        userId: \"user-1\",\n      }),\n    ]);\n    expect(triggerSyncCalls).toEqual([{ provider: \"google\", userId: \"user-1\" }]);\n  });\n\n  it(\"checks the account limit before creating a new OAuth account\", async () => {\n    canAddAccountResult = false;\n\n    await expect(\n      createOAuthSourceWithDependencies(\n        {\n          externalCalendarId: \"external-1\",\n          name: \"Team Calendar\",\n          oauthCredentialId: \"credential-1\",\n          provider: \"google\",\n          userId: \"user-1\",\n        },\n        {\n          canAddAccount: (userId, currentCount) => {\n            canAddAccountCalls.push([userId, currentCount]);\n            return Promise.resolve(canAddAccountResult);\n          },\n          countUserAccounts: () => Promise.resolve(2),\n          createCalendarAccount: () => Promise.resolve(\"new-account\"),\n          createSource: () => Promise.resolve({ id: \"source-1\", name: \"Team Calendar\" }),\n          findCredentialEmail: () => Promise.resolve({ email: \"person@example.com\", exists: true }),\n          findExistingAccountId: () => Promise.resolve(null),\n          hasExistingCalendar: () => Promise.resolve(false),\n          triggerSync: () => null,\n        },\n      ),\n    ).rejects.toThrow(\"Account limit reached\");\n\n    expect(canAddAccountCalls).toEqual([[\"user-1\", 2]]);\n    expect(createAccountCalls).toHaveLength(0);\n    expect(createSourceCalls).toHaveLength(0);\n    expect(triggerSyncCalls).toHaveLength(0);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/oauth.test.ts",
    "content": "import { beforeEach, describe, expect, it } from \"vitest\";\nimport {\n  handleOAuthCallbackWithDependencies,\n  OAuthError,\n} from \"../../src/utils/oauth\";\n\nlet persistCalendarDestinationCalls: {\n  accessToken: string;\n  accountId: string;\n  destinationId?: string;\n  email: string | null;\n  expiresAt: Date;\n  needsReauthentication: boolean;\n  provider: string;\n  refreshToken: string;\n  userId: string;\n}[] = [];\nlet enqueuePushSyncCalls: string[] = [];\n\nbeforeEach(() => {\n  persistCalendarDestinationCalls = [];\n  enqueuePushSyncCalls = [];\n});\n\ndescribe(\"handleOAuthCallbackWithDependencies\", () => {\n  it(\"accepts validated state objects with a null destinationId\", async () => {\n    const result = await handleOAuthCallbackWithDependencies(\n      {\n        code: \"oauth-code\",\n        error: null,\n        provider: \"google\",\n        state: \"oauth-state\",\n      },\n      {\n        baseUrl: \"https://keeper.test\",\n        exchangeCodeForTokens: () =>\n          Promise.resolve({\n            access_token: \"access-token\",\n            expires_in: 3600,\n            refresh_token: \"refresh-token\",\n            scope: \"calendar.read calendar.write\",\n          }),\n        fetchUserInfo: () =>\n          Promise.resolve({\n            email: \"person@example.com\",\n            id: \"external-account-1\",\n          }),\n        getDestinationAccountId: () => Promise.resolve(null),\n        hasRequiredScopes: () => true,\n        persistCalendarDestination: (payload) => {\n          persistCalendarDestinationCalls.push(payload);\n          return Promise.resolve();\n        },\n        enqueuePushSync: (userId: string) => {\n          enqueuePushSyncCalls.push(userId)\n          return Promise.resolve();\n        },\n        validateState: () => Promise.resolve({ destinationId: null, sourceCredentialId: null, userId: \"user-1\" }),\n      },\n    );\n\n    expect(result.redirectUrl.pathname).toBe(\"/dashboard/integrations\");\n    expect(persistCalendarDestinationCalls).toHaveLength(1);\n    expect(persistCalendarDestinationCalls[0]?.destinationId).toBeUndefined();\n  });\n\n  it(\"persists a new destination exactly once with the evaluated scope state\", async () => {\n    const result = await handleOAuthCallbackWithDependencies(\n      {\n        code: \"oauth-code\",\n        error: null,\n        provider: \"google\",\n        state: \"oauth-state\",\n      },\n      {\n        baseUrl: \"https://keeper.test\",\n        exchangeCodeForTokens: () =>\n          Promise.resolve({\n            access_token: \"access-token\",\n            expires_in: 3600,\n            refresh_token: \"refresh-token\",\n            scope: \"calendar.read\",\n          }),\n        fetchUserInfo: () =>\n          Promise.resolve({\n            email: \"person@example.com\",\n            id: \"external-account-1\",\n          }),\n        getDestinationAccountId: () => Promise.resolve(null),\n        hasRequiredScopes: () => false,\n        persistCalendarDestination: (payload) => {\n          persistCalendarDestinationCalls.push(payload);\n          return Promise.resolve();\n        },\n        enqueuePushSync: (userId: string) => {\n          enqueuePushSyncCalls.push(userId);\n          return Promise.resolve();\n        },\n        validateState: () => Promise.resolve({ destinationId: null, sourceCredentialId: null, userId: \"user-1\" }),\n      },\n    );\n\n    expect(result.redirectUrl.pathname).toBe(\"/dashboard/integrations\");\n    expect(result.redirectUrl.searchParams.get(\"destination\")).toBe(\"connected\");\n    expect(persistCalendarDestinationCalls).toHaveLength(1);\n    expect(persistCalendarDestinationCalls[0]).toMatchObject({\n      accountId: \"external-account-1\",\n      email: \"person@example.com\",\n      needsReauthentication: true,\n      provider: \"google\",\n      userId: \"user-1\",\n    });\n    expect(enqueuePushSyncCalls).toEqual([\"user-1\"]);\n  });\n\n  it(\"allows reconnecting an existing destination account without duplicating persistence\", async () => {\n    const result = await handleOAuthCallbackWithDependencies(\n      {\n        code: \"oauth-code\",\n        error: null,\n        provider: \"google\",\n        state: \"oauth-state\",\n      },\n      {\n        baseUrl: \"https://keeper.test\",\n        exchangeCodeForTokens: () =>\n          Promise.resolve({\n            access_token: \"access-token\",\n            expires_in: 3600,\n            refresh_token: \"refresh-token\",\n            scope: \"calendar.read calendar.write\",\n          }),\n        fetchUserInfo: () =>\n          Promise.resolve({\n            email: \"person@example.com\",\n            id: \"external-account-1\",\n          }),\n        getDestinationAccountId: () => Promise.resolve(\"external-account-1\"),\n        hasRequiredScopes: () => true,\n        persistCalendarDestination: (payload) => {\n          persistCalendarDestinationCalls.push(payload);\n          return Promise.resolve();\n        },\n        enqueuePushSync: (userId: string) => {\n          enqueuePushSyncCalls.push(userId);\n          return Promise.resolve();\n        },\n        validateState: () => Promise.resolve({ destinationId: \"destination-1\", sourceCredentialId: null, userId: \"user-1\" }),\n      },\n    );\n\n    expect(result.redirectUrl.pathname).toBe(\"/dashboard/integrations\");\n    expect(persistCalendarDestinationCalls).toHaveLength(1);\n    expect(persistCalendarDestinationCalls[0]).toMatchObject({\n      accountId: \"external-account-1\",\n      destinationId: \"destination-1\",\n      needsReauthentication: false,\n      provider: \"google\",\n      userId: \"user-1\",\n    });\n    expect(enqueuePushSyncCalls).toEqual([\"user-1\"]);\n  });\n\n  it(\"rejects reauthentication with a different external account\", async () => {\n    await expect(\n      handleOAuthCallbackWithDependencies(\n        {\n          code: \"oauth-code\",\n          error: null,\n          provider: \"google\",\n          state: \"oauth-state\",\n        },\n        {\n          baseUrl: \"https://keeper.test\",\n          exchangeCodeForTokens: () =>\n            Promise.resolve({\n              access_token: \"access-token\",\n              expires_in: 3600,\n              refresh_token: \"refresh-token\",\n              scope: \"calendar.read calendar.write\",\n            }),\n          fetchUserInfo: () =>\n            Promise.resolve({\n              email: \"person@example.com\",\n              id: \"external-account-2\",\n            }),\n          getDestinationAccountId: () => Promise.resolve(\"external-account-1\"),\n          hasRequiredScopes: () => true,\n          persistCalendarDestination: () => Promise.resolve(),\n          enqueuePushSync: () => Promise.resolve(),\n          validateState: () => Promise.resolve({ destinationId: \"destination-1\", sourceCredentialId: null, userId: \"user-1\" }),\n        },\n      ),\n    ).rejects.toBeInstanceOf(OAuthError);\n\n    expect(persistCalendarDestinationCalls).toHaveLength(0);\n    expect(enqueuePushSyncCalls).toHaveLength(0);\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/request-body.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { type } from \"arktype\";\nimport {\n  calendarIdsBodySchema,\n  sourcePatchBodySchema,\n  icalSettingsPatchBodySchema,\n  eventCreateBodySchema,\n  eventPatchBodySchema,\n  tokenCreateBodySchema,\n} from \"../../src/utils/request-body\";\n\ndescribe(\"calendarIdsBodySchema\", () => {\n  it(\"accepts valid calendarIds array\", () => {\n    const result = calendarIdsBodySchema({ calendarIds: [\"id-1\", \"id-2\"] });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"rejects missing calendarIds\", () => {\n    const result = calendarIdsBodySchema({});\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects non-string array elements\", () => {\n    const result = calendarIdsBodySchema({ calendarIds: [123] });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects extra properties\", () => {\n    const result = calendarIdsBodySchema({ calendarIds: [\"id-1\"], extra: true });\n    expect(result instanceof type.errors).toBe(true);\n  });\n});\n\ndescribe(\"sourcePatchBodySchema\", () => {\n  it(\"accepts valid partial source update\", () => {\n    const result = sourcePatchBodySchema({ name: \"New Name\" });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"accepts empty object (all fields optional)\", () => {\n    const result = sourcePatchBodySchema({});\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"accepts boolean exclude fields\", () => {\n    const result = sourcePatchBodySchema({\n      excludeAllDayEvents: true,\n      excludeEventDescription: false,\n    });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"rejects extra properties\", () => {\n    const result = sourcePatchBodySchema({ name: \"ok\", hacker: true });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects wrong types\", () => {\n    const result = sourcePatchBodySchema({ name: 123 });\n    expect(result instanceof type.errors).toBe(true);\n  });\n});\n\ndescribe(\"icalSettingsPatchBodySchema\", () => {\n  it(\"accepts valid ical settings\", () => {\n    const result = icalSettingsPatchBodySchema({\n      includeEventName: true,\n      customEventName: \"Busy\",\n    });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"rejects extra properties\", () => {\n    const result = icalSettingsPatchBodySchema({ foo: \"bar\" });\n    expect(result instanceof type.errors).toBe(true);\n  });\n});\n\ndescribe(\"eventCreateBodySchema\", () => {\n  it(\"accepts valid event creation body\", () => {\n    const result = eventCreateBodySchema({\n      calendarId: \"abc-123\",\n      title: \"Team Meeting\",\n      startTime: \"2026-03-15T14:00:00Z\",\n      endTime: \"2026-03-15T15:00:00Z\",\n    });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"accepts optional fields\", () => {\n    const result = eventCreateBodySchema({\n      calendarId: \"abc-123\",\n      title: \"Lunch\",\n      startTime: \"2026-03-15T12:00:00Z\",\n      endTime: \"2026-03-15T13:00:00Z\",\n      description: \"Team lunch\",\n      location: \"Cafe\",\n      isAllDay: false,\n      availability: \"busy\",\n    });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"rejects missing required fields\", () => {\n    const result = eventCreateBodySchema({ title: \"Missing fields\" });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects invalid availability value\", () => {\n    const result = eventCreateBodySchema({\n      calendarId: \"abc-123\",\n      title: \"Test\",\n      startTime: \"2026-03-15T14:00:00Z\",\n      endTime: \"2026-03-15T15:00:00Z\",\n      availability: \"maybe\",\n    });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects extra properties\", () => {\n    const result = eventCreateBodySchema({\n      calendarId: \"abc-123\",\n      title: \"Test\",\n      startTime: \"2026-03-15T14:00:00Z\",\n      endTime: \"2026-03-15T15:00:00Z\",\n      hacker: true,\n    });\n    expect(result instanceof type.errors).toBe(true);\n  });\n});\n\ndescribe(\"eventPatchBodySchema\", () => {\n  it(\"accepts partial event update\", () => {\n    const result = eventPatchBodySchema({ title: \"Updated Title\" });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"accepts empty object (all fields optional)\", () => {\n    const result = eventPatchBodySchema({});\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"accepts rsvpStatus field\", () => {\n    const result = eventPatchBodySchema({ rsvpStatus: \"accepted\" });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"rejects invalid rsvpStatus\", () => {\n    const result = eventPatchBodySchema({ rsvpStatus: \"maybe\" });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects extra properties\", () => {\n    const result = eventPatchBodySchema({ title: \"ok\", inject: true });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects wrong types\", () => {\n    const result = eventPatchBodySchema({ title: 123 });\n    expect(result instanceof type.errors).toBe(true);\n  });\n});\n\ndescribe(\"tokenCreateBodySchema\", () => {\n  it(\"accepts valid token name\", () => {\n    const result = tokenCreateBodySchema({ name: \"My API Token\" });\n    expect(result instanceof type.errors).toBe(false);\n  });\n\n  it(\"rejects missing name\", () => {\n    const result = tokenCreateBodySchema({});\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects non-string name\", () => {\n    const result = tokenCreateBodySchema({ name: 123 });\n    expect(result instanceof type.errors).toBe(true);\n  });\n\n  it(\"rejects extra properties\", () => {\n    const result = tokenCreateBodySchema({ name: \"ok\", extra: true });\n    expect(result instanceof type.errors).toBe(true);\n  });\n});\n\n"
  },
  {
    "path": "services/api/tests/utils/source-destination-mappings.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  runSetDestinationsForSource,\n  runSetSourcesForDestination,\n} from \"../../src/utils/source-destination-mappings\";\n\nconst createMappingKey = (sourceCalendarId: string, destinationCalendarId: string): string =>\n  `${sourceCalendarId}::${destinationCalendarId}`;\n\nconst parseMappingKey = (\n  mappingKey: string,\n): { sourceCalendarId: string; destinationCalendarId: string } => {\n  const [sourceCalendarId, destinationCalendarId] = mappingKey.split(\"::\");\n  if (!sourceCalendarId || !destinationCalendarId) {\n    throw new Error(\"Invalid mapping key\");\n  }\n\n  return { destinationCalendarId, sourceCalendarId };\n};\n\nconst collectDestinationIds = (\n  mappings: Set<string>,\n  sourceCalendarId: string,\n): string[] => {\n  const destinationIds: string[] = [];\n  for (const mappingKey of mappings) {\n    const mapping = parseMappingKey(mappingKey);\n    if (mapping.sourceCalendarId === sourceCalendarId) {\n      destinationIds.push(mapping.destinationCalendarId);\n    }\n  }\n\n  return destinationIds.toSorted();\n};\n\nconst collectSourceIds = (\n  mappings: Set<string>,\n  destinationCalendarId: string,\n): string[] => {\n  const sourceIds: string[] = [];\n  for (const mappingKey of mappings) {\n    const mapping = parseMappingKey(mappingKey);\n    if (mapping.destinationCalendarId === destinationCalendarId) {\n      sourceIds.push(mapping.sourceCalendarId);\n    }\n  }\n\n  return sourceIds.toSorted();\n};\n\ninterface UserLockManager {\n  acquire: (userId: string) => Promise<() => void>;\n}\n\nconst releaseLockNoop = (): void => {\n  Number.isFinite(0);\n};\n\nconst createUserLockManager = (): UserLockManager => {\n  const lockQueueByUserId = new Map<string, Promise<unknown>>();\n\n  return {\n    acquire: async (userId) => {\n      const previousLock = lockQueueByUserId.get(userId) ?? Promise.resolve();\n\n      const lockResolver = Promise.withResolvers<null>();\n      const currentLock = lockResolver.promise;\n\n      lockQueueByUserId.set(userId, previousLock.then(() => currentLock));\n      await previousLock;\n\n      return () => {\n        lockResolver.resolve(null);\n      };\n    },\n  };\n};\n\ndescribe(\"runSetDestinationsForSource\", () => {\n  it(\"throws when source calendar is not found and does not trigger sync\", () => {\n    expect(\n      runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-1\"], {\n        withTransaction: (transactionCallback) =>\n          transactionCallback({\n            acquireUserLock: () => Promise.resolve(),\n            findOwnedDestinationIds: () => Promise.resolve([\"dest-1\"]),\n            replaceSourceMappings: () => Promise.resolve(),\n            ensureDestinationSyncStatuses: () => Promise.resolve(),\n            sourceExists: () => Promise.resolve(false),\n          }),\n      }),\n    ).rejects.toThrow(\"Source calendar not found\");\n\n\n  });\n\n  it(\"throws when destination calendars include invalid IDs\", () => {\n    expect(\n      runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-1\", \"dest-2\"], {\n        withTransaction: (transactionCallback) =>\n          transactionCallback({\n            acquireUserLock: () => Promise.resolve(),\n            findOwnedDestinationIds: () => Promise.resolve([\"dest-1\"]),\n            replaceSourceMappings: () => Promise.resolve(),\n            ensureDestinationSyncStatuses: () => Promise.resolve(),\n            sourceExists: () => Promise.resolve(true),\n          }),\n      }),\n    ).rejects.toThrow(\"Some destination calendars not found\");\n  });\n\n  it(\"replaces mappings, ensures statuses, and triggers sync on success\", async () => {\n    const operationLog: string[] = [];\n\n    await runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-1\", \"dest-2\"], {\n      withTransaction: (transactionCallback) =>\n        transactionCallback({\n          acquireUserLock: (userId) => {\n            operationLog.push(`lock:${userId}`);\n            return Promise.resolve();\n          },\n          ensureDestinationSyncStatuses: (destinationIds) => {\n            operationLog.push(`status:${destinationIds.join(\",\")}`);\n            return Promise.resolve();\n          },\n          findOwnedDestinationIds: () => Promise.resolve([\"dest-1\", \"dest-2\"]),\n          replaceSourceMappings: (_sourceCalendarId, destinationIds) => {\n            operationLog.push(`replace:${destinationIds.join(\",\")}`);\n            return Promise.resolve();\n          },\n          sourceExists: () => Promise.resolve(true),\n        }),\n    });\n\n    expect(operationLog).toEqual([\n      \"lock:user-1\",\n      \"replace:dest-1,dest-2\",\n      \"status:dest-1,dest-2\",\n    ]);\n  });\n\n  it(\"throws when projected mappings exceed entitlement limit\", () => {\n    let replaceCalled = false;\n    expect(\n      runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-1\", \"dest-2\", \"dest-3\"], {\n        isMappingCountAllowed: () => Promise.resolve(false),\n        withTransaction: (transactionCallback) =>\n          transactionCallback({\n            acquireUserLock: () => Promise.resolve(),\n            countMappingsForSource: () => Promise.resolve(1),\n            countUserMappings: () => Promise.resolve(3),\n            ensureDestinationSyncStatuses: () => Promise.resolve(),\n            findOwnedDestinationIds: () => Promise.resolve([\"dest-1\", \"dest-2\", \"dest-3\"]),\n            replaceSourceMappings: () => {\n              replaceCalled = true;\n              return Promise.resolve();\n            },\n            sourceExists: () => Promise.resolve(true),\n          }),\n      }),\n    ).rejects.toThrow(\"Mapping limit reached\");\n\n    expect(replaceCalled).toBe(false);\n\n  });\n});\n\ndescribe(\"mapping transaction adversarial behavior\", () => {\n  it(\"serializes concurrent destination writes for the same source\", async () => {\n    let mappings = new Set<string>([\n      createMappingKey(\"source-1\", \"dest-0\"),\n    ]);\n    const lockManager = createUserLockManager();\n\n    const withTransaction = async <TResult>(\n      transactionCallback: (transaction: {\n        acquireUserLock: (userId: string) => Promise<void>;\n        sourceExists: (userId: string, sourceCalendarId: string) => Promise<boolean>;\n        findOwnedDestinationIds: (\n          userId: string,\n          destinationCalendarIds: string[],\n        ) => Promise<string[]>;\n        replaceSourceMappings: (\n          sourceCalendarId: string,\n          destinationCalendarIds: string[],\n        ) => Promise<void>;\n        ensureDestinationSyncStatuses: (destinationCalendarIds: string[]) => Promise<void>;\n      }) => Promise<TResult>,\n    ): Promise<TResult> => {\n      const draftMappings = new Set(mappings);\n      let releaseLock: () => void = releaseLockNoop;\n\n      try {\n        const result = await transactionCallback({\n          acquireUserLock: async (userId) => {\n            releaseLock = await lockManager.acquire(userId);\n          },\n          ensureDestinationSyncStatuses: () => Promise.resolve(),\n          findOwnedDestinationIds: (_userId, destinationCalendarIds) =>\n            Promise.resolve(destinationCalendarIds),\n          replaceSourceMappings: async (sourceCalendarId, destinationCalendarIds) => {\n            const mappingKeys = [...draftMappings];\n            for (const mappingKey of mappingKeys) {\n              const mapping = parseMappingKey(mappingKey);\n              if (mapping.sourceCalendarId === sourceCalendarId) {\n                draftMappings.delete(mappingKey);\n              }\n            }\n\n            await new Promise((resolve) => { setTimeout(resolve, 5); });\n\n            for (const destinationCalendarId of destinationCalendarIds) {\n              draftMappings.add(createMappingKey(sourceCalendarId, destinationCalendarId));\n            }\n          },\n          sourceExists: () => Promise.resolve(true),\n        });\n\n        mappings = draftMappings;\n        return result;\n      } finally {\n        releaseLock();\n      }\n    };\n\n    const firstWrite = runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-1\", \"dest-2\"], {\n      withTransaction,\n    });\n    await new Promise((resolve) => { setTimeout(resolve, 1); });\n    const secondWrite = runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-3\"], {\n      withTransaction,\n    });\n\n    await Promise.all([firstWrite, secondWrite]);\n\n    expect(collectDestinationIds(mappings, \"source-1\")).toEqual([\"dest-3\"]);\n\n  });\n\n  it(\"rolls back destination mapping writes when transaction fails mid-flight\", () => {\n    let mappings = new Set<string>([\n      createMappingKey(\"source-1\", \"dest-0\"),\n    ]);\n    const withTransaction = async <TResult>(\n      transactionCallback: (transaction: {\n        acquireUserLock: (userId: string) => Promise<void>;\n        sourceExists: (userId: string, sourceCalendarId: string) => Promise<boolean>;\n        findOwnedDestinationIds: (\n          userId: string,\n          destinationCalendarIds: string[],\n        ) => Promise<string[]>;\n        replaceSourceMappings: (\n          sourceCalendarId: string,\n          destinationCalendarIds: string[],\n        ) => Promise<void>;\n        ensureDestinationSyncStatuses: (destinationCalendarIds: string[]) => Promise<void>;\n      }) => Promise<TResult>,\n    ): Promise<TResult> => {\n      const draftMappings = new Set(mappings);\n      const result = await transactionCallback({\n        acquireUserLock: () => Promise.resolve(),\n        ensureDestinationSyncStatuses: () =>\n          Promise.reject(new Error(\"status upsert failed\")),\n        findOwnedDestinationIds: (_userId, destinationCalendarIds) =>\n          Promise.resolve(destinationCalendarIds),\n        replaceSourceMappings: (sourceCalendarId, destinationCalendarIds) => {\n          const mappingKeys = [...draftMappings];\n          for (const mappingKey of mappingKeys) {\n            const mapping = parseMappingKey(mappingKey);\n            if (mapping.sourceCalendarId === sourceCalendarId) {\n              draftMappings.delete(mappingKey);\n            }\n          }\n          for (const destinationCalendarId of destinationCalendarIds) {\n            draftMappings.add(createMappingKey(sourceCalendarId, destinationCalendarId));\n          }\n          return Promise.resolve();\n        },\n        sourceExists: () => Promise.resolve(true),\n      });\n      mappings = draftMappings;\n      return result;\n    };\n\n    expect(\n      runSetDestinationsForSource(\"user-1\", \"source-1\", [\"dest-1\"], {\n        withTransaction,\n      }),\n    ).rejects.toThrow(\"status upsert failed\");\n\n    expect(collectDestinationIds(mappings, \"source-1\")).toEqual([\"dest-0\"]);\n\n  });\n\n  it(\"serializes cross-endpoint writes for the same user\", async () => {\n    const mappings = new Set<string>([\n      createMappingKey(\"source-a\", \"dest-legacy\"),\n      createMappingKey(\"source-b\", \"dest-1\"),\n    ]);\n    const lockManager = createUserLockManager();\n\n    const withDestinationTransaction = async <TResult>(\n      transactionCallback: (transaction: {\n        acquireUserLock: (userId: string) => Promise<void>;\n        sourceExists: (userId: string, sourceCalendarId: string) => Promise<boolean>;\n        findOwnedDestinationIds: (\n          userId: string,\n          destinationCalendarIds: string[],\n        ) => Promise<string[]>;\n        replaceSourceMappings: (\n          sourceCalendarId: string,\n          destinationCalendarIds: string[],\n        ) => Promise<void>;\n        ensureDestinationSyncStatuses: (destinationCalendarIds: string[]) => Promise<void>;\n      }) => Promise<TResult>,\n    ): Promise<TResult> => {\n      let releaseLock: () => void = releaseLockNoop;\n\n      try {\n        const result = await transactionCallback({\n          acquireUserLock: async (userId) => {\n            releaseLock = await lockManager.acquire(userId);\n          },\n          ensureDestinationSyncStatuses: () => Promise.resolve(),\n          findOwnedDestinationIds: (_userId, destinationCalendarIds) =>\n            Promise.resolve(destinationCalendarIds),\n          replaceSourceMappings: async (sourceCalendarId, destinationCalendarIds) => {\n            const mappingKeys = [...mappings];\n            for (const mappingKey of mappingKeys) {\n              const mapping = parseMappingKey(mappingKey);\n              if (mapping.sourceCalendarId === sourceCalendarId) {\n                mappings.delete(mappingKey);\n              }\n            }\n\n            await new Promise((resolve) => { setTimeout(resolve, 5); });\n\n            for (const destinationCalendarId of destinationCalendarIds) {\n              mappings.add(createMappingKey(sourceCalendarId, destinationCalendarId));\n            }\n          },\n          sourceExists: () => Promise.resolve(true),\n        });\n        return result;\n      } finally {\n        releaseLock();\n      }\n    };\n\n    const withSourceTransaction = async <TResult>(\n      transactionCallback: (transaction: {\n        acquireUserLock: (userId: string) => Promise<void>;\n        destinationExists: (userId: string, destinationCalendarId: string) => Promise<boolean>;\n        findOwnedSourceIds: (\n          userId: string,\n          sourceCalendarIds: string[],\n        ) => Promise<string[]>;\n        replaceDestinationMappings: (\n          destinationCalendarId: string,\n          sourceCalendarIds: string[],\n        ) => Promise<void>;\n        ensureDestinationSyncStatus: (destinationCalendarId: string) => Promise<void>;\n      }) => Promise<TResult>,\n    ): Promise<TResult> => {\n      let releaseLock: () => void = releaseLockNoop;\n\n      try {\n        const result = await transactionCallback({\n          acquireUserLock: async (userId) => {\n            releaseLock = await lockManager.acquire(userId);\n          },\n          destinationExists: () => Promise.resolve(true),\n          ensureDestinationSyncStatus: () => Promise.resolve(),\n          findOwnedSourceIds: (_userId, sourceCalendarIds) =>\n            Promise.resolve(sourceCalendarIds),\n          replaceDestinationMappings: async (destinationCalendarId, sourceCalendarIds) => {\n            const mappingKeys = [...mappings];\n            for (const mappingKey of mappingKeys) {\n              const mapping = parseMappingKey(mappingKey);\n              if (mapping.destinationCalendarId === destinationCalendarId) {\n                mappings.delete(mappingKey);\n              }\n            }\n\n            await new Promise((resolve) => { setTimeout(resolve, 5); });\n\n            for (const sourceCalendarId of sourceCalendarIds) {\n              mappings.add(createMappingKey(sourceCalendarId, destinationCalendarId));\n            }\n          },\n        });\n        return result;\n      } finally {\n        releaseLock();\n      }\n    };\n\n    const destinationWrite = runSetDestinationsForSource(\n      \"user-1\",\n      \"source-a\",\n      [\"dest-1\", \"dest-2\"],\n      {\n        withTransaction: withDestinationTransaction,\n      },\n    );\n    await new Promise((resolve) => { setTimeout(resolve, 1); });\n    const sourceWrite = runSetSourcesForDestination(\n      \"user-1\",\n      \"dest-1\",\n      [\"source-b\"],\n      {\n        withTransaction: withSourceTransaction,\n      },\n    );\n\n    await Promise.all([destinationWrite, sourceWrite]);\n\n    expect(collectDestinationIds(mappings, \"source-a\")).toEqual([\"dest-2\"]);\n    expect(collectSourceIds(mappings, \"dest-1\")).toEqual([\"source-b\"]);\n  });\n});\n\ndescribe(\"runSetSourcesForDestination\", () => {\n  it(\"throws when destination calendar is not found\", () => {\n    expect(\n      runSetSourcesForDestination(\"user-1\", \"dest-1\", [\"source-1\"], {\n        withTransaction: (transactionCallback) =>\n          transactionCallback({\n            acquireUserLock: () => Promise.resolve(),\n            destinationExists: () => Promise.resolve(false),\n            ensureDestinationSyncStatus: () => Promise.resolve(),\n            findOwnedSourceIds: () => Promise.resolve([\"source-1\"]),\n            replaceDestinationMappings: () => Promise.resolve(),\n          }),\n      }),\n    ).rejects.toThrow(\"Destination calendar not found\");\n  });\n\n  it(\"throws when source calendars include invalid IDs\", () => {\n    expect(\n      runSetSourcesForDestination(\"user-1\", \"dest-1\", [\"source-1\", \"source-2\"], {\n        withTransaction: (transactionCallback) =>\n          transactionCallback({\n            acquireUserLock: () => Promise.resolve(),\n            destinationExists: () => Promise.resolve(true),\n            ensureDestinationSyncStatus: () => Promise.resolve(),\n            findOwnedSourceIds: () => Promise.resolve([\"source-1\"]),\n            replaceDestinationMappings: () => Promise.resolve(),\n          }),\n      }),\n    ).rejects.toThrow(\"Some source calendars not found\");\n  });\n\n  it(\"replaces mappings and triggers sync without status upsert for empty sources\", async () => {\n    const operationLog: string[] = [];\n\n    await runSetSourcesForDestination(\"user-1\", \"dest-1\", [], {\n      withTransaction: (transactionCallback) =>\n        transactionCallback({\n          acquireUserLock: (userId) => {\n            operationLog.push(`lock:${userId}`);\n            return Promise.resolve();\n          },\n          destinationExists: () => Promise.resolve(true),\n          ensureDestinationSyncStatus: () => {\n            operationLog.push(\"status\");\n            return Promise.resolve();\n          },\n          findOwnedSourceIds: () => Promise.resolve([]),\n          replaceDestinationMappings: (_destinationCalendarId, sourceCalendarIds) => {\n            operationLog.push(`replace:${sourceCalendarIds.length}`);\n            return Promise.resolve();\n          },\n        }),\n    });\n\n    expect(operationLog).toEqual([\n      \"lock:user-1\",\n      \"replace:0\",\n    ]);\n  });\n\n  it(\"upserts destination sync status when assigning non-empty sources\", async () => {\n    const operationLog: string[] = [];\n\n    await runSetSourcesForDestination(\"user-1\", \"dest-1\", [\"source-1\"], {\n      withTransaction: (transactionCallback) =>\n        transactionCallback({\n          acquireUserLock: () => Promise.resolve(),\n          destinationExists: () => Promise.resolve(true),\n          ensureDestinationSyncStatus: (destinationCalendarId) => {\n            operationLog.push(`status:${destinationCalendarId}`);\n            return Promise.resolve();\n          },\n          findOwnedSourceIds: () => Promise.resolve([\"source-1\"]),\n          replaceDestinationMappings: (_destinationCalendarId, sourceCalendarIds) => {\n            operationLog.push(`replace:${sourceCalendarIds.join(\",\")}`);\n            return Promise.resolve();\n          },\n        }),\n    });\n\n    expect(operationLog).toEqual([\n      \"replace:source-1\",\n      \"status:dest-1\",\n    ]);\n  });\n\n  it(\"throws when projected mappings exceed entitlement limit\", () => {\n    let replaceCalled = false;\n    expect(\n      runSetSourcesForDestination(\"user-1\", \"dest-1\", [\"source-1\", \"source-2\"], {\n        isMappingCountAllowed: () => Promise.resolve(false),\n        withTransaction: (transactionCallback) =>\n          transactionCallback({\n            acquireUserLock: () => Promise.resolve(),\n            countMappingsForDestination: () => Promise.resolve(1),\n            countUserMappings: () => Promise.resolve(3),\n            destinationExists: () => Promise.resolve(true),\n            ensureDestinationSyncStatus: () => Promise.resolve(),\n            findOwnedSourceIds: () => Promise.resolve([\"source-1\", \"source-2\"]),\n            replaceDestinationMappings: () => {\n              replaceCalled = true;\n              return Promise.resolve();\n            },\n          }),\n      }),\n    ).rejects.toThrow(\"Mapping limit reached\");\n\n    expect(replaceCalled).toBe(false);\n\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/source-lifecycle.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { CalendarFetchError } from \"@keeper.sh/calendar/ics\";\nimport {\n  SourceLimitError,\n  runCreateSource,\n} from \"../../src/utils/source-lifecycle\";\n\ninterface TestSource {\n  id: string;\n  accountId: string;\n  userId: string;\n  name: string;\n  url: string | null;\n  createdAt: Date;\n}\n\nconst createSourceRecord = (overrides: Partial<TestSource> = {}): TestSource => ({\n  accountId: \"account-1\",\n  createdAt: new Date(\"2026-03-08T12:00:00.000Z\"),\n  id: \"source-1\",\n  name: \"My Calendar\",\n  url: \"https://example.com/calendar.ics\",\n  userId: \"user-1\",\n  ...overrides,\n});\n\nconst missingSourceLifecycleCallback = (): Promise<void> =>\n  Promise.reject(new Error(\"Expected background callback\"));\n\ndescribe(\"runCreateSource\", () => {\n  it(\"rejects source creation when plan limit is exceeded\", async () => {\n    await expect(\n      runCreateSource(\n        {\n          name: \"Team Feed\",\n          url: \"https://example.com/team.ics\",\n          userId: \"user-1\",\n        },\n        {\n          acquireAccountLock: () => Promise.resolve(),\n          canAddAccount: () => Promise.resolve(false),\n          countExistingAccounts: () => Promise.resolve(3),\n          createCalendarAccount: () => Promise.resolve(\"account-1\"),\n          createSourceCalendar: () => Promise.resolve(createSourceRecord()),\n          fetchAndSyncSource: () => Promise.resolve(),\n          spawnBackgroundJob: Boolean,\n          enqueuePushSync: () => Promise.resolve(),\n          validateSourceUrl: () => Promise.resolve(),\n        },\n      ),\n    ).rejects.toBeInstanceOf(SourceLimitError);\n  });\n\n  it(\"wraps CalendarFetchError details in InvalidSourceUrlError\", async () => {\n    const rejection = new CalendarFetchError(\"auth needed\", 401);\n\n    await expect(\n      runCreateSource(\n        {\n          name: \"Team Feed\",\n          url: \"https://example.com/private.ics\",\n          userId: \"user-1\",\n        },\n        {\n          acquireAccountLock: () => Promise.resolve(),\n          canAddAccount: () => Promise.resolve(true),\n          countExistingAccounts: () => Promise.resolve(0),\n          createCalendarAccount: () => Promise.resolve(\"account-1\"),\n          createSourceCalendar: () => Promise.resolve(createSourceRecord()),\n          fetchAndSyncSource: () => Promise.resolve(),\n          spawnBackgroundJob: Boolean,\n          enqueuePushSync: () => Promise.resolve(),\n          validateSourceUrl: () => Promise.reject(rejection),\n        },\n      ),\n    ).rejects.toMatchObject({\n      authRequired: true,\n      message: \"auth needed\",\n    });\n  });\n\n  it(\"creates source and schedules background fetch-sync callback\", async () => {\n    const createdSource = createSourceRecord({\n      accountId: \"account-42\",\n      id: \"source-99\",\n      name: \"Team Feed\",\n      url: \"https://example.com/feed.ics\",\n      userId: \"user-42\",\n    });\n    let backgroundCallback: () => Promise<void> = missingSourceLifecycleCallback;\n    const fetchSyncedSourceIds: string[] = [];\n    const syncedUserIds: string[] = [];\n\n    const result = await runCreateSource(\n      {\n        name: \"Team Feed\",\n        url: \"https://example.com/feed.ics\",\n        userId: \"user-42\",\n      },\n      {\n        acquireAccountLock: () => Promise.resolve(),\n        canAddAccount: () => Promise.resolve(true),\n        countExistingAccounts: () => Promise.resolve(2),\n        createCalendarAccount: () => Promise.resolve(\"account-42\"),\n        createSourceCalendar: (payload) => Promise.resolve(createSourceRecord({\n            accountId: payload.accountId,\n            id: \"source-99\",\n            name: payload.name,\n            url: payload.url,\n            userId: payload.userId,\n          })),\n        fetchAndSyncSource: (source) => {\n          fetchSyncedSourceIds.push(source.id);\n          return Promise.resolve();\n        },\n        spawnBackgroundJob: (jobName, fields, callback) => {\n          expect(jobName).toBe(\"ical-source-sync\");\n          expect(fields).toEqual({ calendarId: \"source-99\", userId: \"user-42\" });\n          backgroundCallback = callback;\n        },\n        enqueuePushSync: (userId: string) => {\n          syncedUserIds.push(userId);\n          return Promise.resolve();\n        },\n        validateSourceUrl: () => Promise.resolve(),\n      },\n    );\n\n    expect(result).toEqual(createdSource);\n    expect(backgroundCallback).not.toBe(missingSourceLifecycleCallback);\n\n    await backgroundCallback();\n\n    expect(fetchSyncedSourceIds).toEqual([\"source-99\"]);\n    expect(syncedUserIds).toEqual([\"user-42\"]);\n  });\n\n  it(\"throws when calendar account creation fails\", async () => {\n    await expect(\n      runCreateSource(\n        {\n          name: \"Team Feed\",\n          url: \"https://example.com/feed.ics\",\n          userId: \"user-1\",\n        },\n        {\n          acquireAccountLock: () => Promise.resolve(),\n          canAddAccount: () => Promise.resolve(true),\n          countExistingAccounts: () => Promise.resolve(0),\n          createCalendarAccount: () => Promise.resolve(\"\"),\n          createSourceCalendar: () => Promise.resolve(createSourceRecord()),\n          fetchAndSyncSource: () => Promise.resolve(),\n          spawnBackgroundJob: Boolean,\n          enqueuePushSync: () => Promise.resolve(),\n          validateSourceUrl: () => Promise.resolve(),\n        },\n      ),\n    ).rejects.toThrow(\"Failed to create calendar account\");\n  });\n\n  it(\"throws when source calendar creation fails\", async () => {\n    await expect(\n      runCreateSource(\n        {\n          name: \"Team Feed\",\n          url: \"https://example.com/feed.ics\",\n          userId: \"user-1\",\n        },\n        {\n          acquireAccountLock: () => Promise.resolve(),\n          canAddAccount: () => Promise.resolve(true),\n          countExistingAccounts: () => Promise.resolve(0),\n          createCalendarAccount: () => Promise.resolve(\"account-1\"),\n          createSourceCalendar: () =>\n            Promise.resolve<TestSource | undefined>(globalThis.undefined),\n          fetchAndSyncSource: () => Promise.resolve(),\n          spawnBackgroundJob: Boolean,\n          enqueuePushSync: () => Promise.resolve(),\n          validateSourceUrl: () => Promise.resolve(),\n        },\n      ),\n    ).rejects.toThrow(\"Failed to create source\");\n  });\n});\n"
  },
  {
    "path": "services/api/tests/utils/source-sync-defaults.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport {\n  DEFAULT_SOURCE_SYNC_RULES,\n  applySourceSyncDefaults,\n} from \"../../src/utils/source-sync-defaults\";\n\ndescribe(\"DEFAULT_SOURCE_SYNC_RULES\", () => {\n  it(\"disables event title, description, and location sync and includes sources in iCal by default\", () => {\n    expect(DEFAULT_SOURCE_SYNC_RULES).toEqual({\n      customEventName: \"{{calendar_name}}\",\n      excludeEventDescription: true,\n      excludeEventLocation: true,\n      excludeEventName: true,\n      includeInIcalFeed: true,\n    });\n  });\n\n  it(\"applies source defaults while preserving additional calendar fields\", () => {\n    const values = applySourceSyncDefaults({\n      accountId: \"account-1\",\n      name: \"Team Calendar\",\n      userId: \"user-1\",\n    });\n\n    expect(values).toEqual({\n      accountId: \"account-1\",\n      customEventName: \"{{calendar_name}}\",\n      excludeEventDescription: true,\n      excludeEventLocation: true,\n      excludeEventName: true,\n      includeInIcalFeed: true,\n      name: \"Team Calendar\",\n      userId: \"user-1\",\n    });\n  });\n});\n"
  },
  {
    "path": "services/api/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "services/api/turbo.json",
    "content": "{\n  \"$schema\": \"https://v2-9-0.turborepo.dev/schema.json\",\n  \"extends\": [\"//\"],\n  \"tasks\": {\n    \"dev\": {\n      \"passThroughEnv\": [\n        \"LOG_LEVEL\",\n        \"API_PORT\",\n        \"DATABASE_URL\",\n        \"REDIS_URL\",\n        \"BETTER_AUTH_URL\",\n        \"BETTER_AUTH_SECRET\",\n        \"COMMERCIAL_MODE\",\n        \"GOOGLE_CLIENT_ID\",\n        \"GOOGLE_CLIENT_SECRET\",\n        \"MICROSOFT_CLIENT_ID\",\n        \"MICROSOFT_CLIENT_SECRET\",\n        \"POLAR_ACCESS_TOKEN\",\n        \"POLAR_MODE\",\n        \"POLAR_WEBHOOK_SECRET\",\n        \"RESEND_API_KEY\",\n        \"PASSKEY_RP_ID\",\n        \"PASSKEY_RP_NAME\",\n        \"PASSKEY_ORIGIN\",\n        \"ENCRYPTION_KEY\",\n        \"WEBSOCKET_URL\",\n        \"TRUSTED_ORIGINS\",\n        \"BLOCK_PRIVATE_RESOLUTION\",\n        \"PRIVATE_RESOLUTION_WHITELIST\"\n      ]\n    },\n    \"start\": {\n      \"passThroughEnv\": [\n        \"LOG_LEVEL\",\n        \"API_PORT\",\n        \"DATABASE_URL\",\n        \"REDIS_URL\",\n        \"BETTER_AUTH_URL\",\n        \"BETTER_AUTH_SECRET\",\n        \"COMMERCIAL_MODE\",\n        \"GOOGLE_CLIENT_ID\",\n        \"GOOGLE_CLIENT_SECRET\",\n        \"MICROSOFT_CLIENT_ID\",\n        \"MICROSOFT_CLIENT_SECRET\",\n        \"POLAR_ACCESS_TOKEN\",\n        \"POLAR_MODE\",\n        \"POLAR_WEBHOOK_SECRET\",\n        \"RESEND_API_KEY\",\n        \"PASSKEY_RP_ID\",\n        \"PASSKEY_RP_NAME\",\n        \"PASSKEY_ORIGIN\",\n        \"ENCRYPTION_KEY\",\n        \"WEBSOCKET_URL\",\n        \"TRUSTED_ORIGINS\",\n        \"BLOCK_PRIVATE_RESOLUTION\",\n        \"PRIVATE_RESOLUTION_WHITELIST\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "services/api/vitest.config.ts",
    "content": "import { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      \"@\": resolve(fileURLToPath(import.meta.url), \"../src\"),\n    },\n  },\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\", \"./tests/**/*.test.tsx\"],\n  },\n});\n"
  },
  {
    "path": "services/cron/Dockerfile",
    "content": "FROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/cron --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd services/cron build\n\nFROM base AS runtime\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\nCOPY --from=prune /app/out/full/packages/otelemetry ./packages/otelemetry\nRUN bun link --cwd packages/otelemetry\nCOPY --from=build /app/services/cron/dist ./services/cron/dist\nCOPY --from=source /app/services/cron/entrypoint.sh ./services/cron/entrypoint.sh\nRUN chmod +x ./services/cron/entrypoint.sh\n\nENV ENV=production\n\nENTRYPOINT [\"./services/cron/entrypoint.sh\"]\n"
  },
  {
    "path": "services/cron/entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\nexec bun services/cron/dist/index.js 2>&1 | keeper-otelemetry\n"
  },
  {
    "path": "services/cron/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/cron\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"dev\": \"bun run --watch .\",\n    \"build\": \"bun scripts/build\",\n    \"start\": \"bun run dist/index.js\",\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"bun x --bun vitest run\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/calendar\": \"workspace:*\",\n    \"@keeper.sh/data-schemas\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"@keeper.sh/otelemetry\": \"workspace:*\",\n    \"@keeper.sh/premium\": \"workspace:*\",\n    \"@keeper.sh/queue\": \"workspace:*\",\n    \"@polar-sh/sdk\": \"^0.42.1\",\n    \"arkenv\": \"^0.11.0\",\n    \"cronbake\": \"0.4.0\",\n    \"drizzle-orm\": \"^0.45.1\",\n    \"entrykit\": \"^0.1.3\",\n    \"ioredis\": \"^5.10.0\",\n    \"widelogger\": \"^0.7.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "services/cron/scripts/build.ts",
    "content": "import { Glob, build } from \"bun\";\n\nconst ROUTES_GLOB = new Glob(\"src/jobs/**/*.ts\");\nconst ENTRY_POINT_GLOB = new Glob(\"src/index.ts\");\n\nconst entrypoints = [\n  ...ROUTES_GLOB.scanSync().filter((filePath) => !/\\.(test|spec)\\.ts$/.test(filePath)),\n  ...ENTRY_POINT_GLOB.scanSync(),\n];\n\nawait build({\n  entrypoints,\n  outdir: \"./dist\",\n  root: \"src\",\n  target: \"bun\",\n  external: [\"msgpackr-extract\", \"pino-opentelemetry-transport\"],\n});\n"
  },
  {
    "path": "services/cron/src/context.ts",
    "content": "import env from \"./env\";\nimport { createDatabase } from \"@keeper.sh/database\";\nimport Redis from \"ioredis\";\nimport { createPremiumService } from \"@keeper.sh/premium\";\nimport type { RefreshLockStore } from \"@keeper.sh/calendar\";\nimport { Polar } from \"@polar-sh/sdk\";\n\nconst database = await createDatabase(env.DATABASE_URL);\n\nconst premiumService = createPremiumService({\n  commercialMode: env.COMMERCIAL_MODE ?? false,\n  database,\n});\n\nconst REDIS_COMMAND_TIMEOUT_MS = 10_000;\n\nconst createRedisRefreshLockStore = (redisClient: Redis): RefreshLockStore => ({\n  async tryAcquire(key, ttlSeconds) {\n    const result = await redisClient.set(key, \"1\", \"EX\", ttlSeconds, \"NX\");\n    return result !== null;\n  },\n  async release(key) {\n    await redisClient.del(key);\n  },\n});\n\nconst refreshLockRedis = new Redis(env.REDIS_URL, {\n  commandTimeout: REDIS_COMMAND_TIMEOUT_MS,\n  maxRetriesPerRequest: 3,\n  lazyConnect: true,\n});\n\nconst refreshLockStore = createRedisRefreshLockStore(refreshLockRedis);\n\nconst shutdownRefreshLockRedis = (): void => {\n  refreshLockRedis.disconnect();\n};\n\nconst createPolarClient = (): Polar | null => {\n  if (env.POLAR_ACCESS_TOKEN && env.POLAR_MODE) {\n    return new Polar({\n      accessToken: env.POLAR_ACCESS_TOKEN,\n      server: env.POLAR_MODE,\n    });\n  }\n  return null;\n};\n\nconst polarClient = createPolarClient();\n\nexport { database, premiumService, polarClient, refreshLockRedis, refreshLockStore, shutdownRefreshLockRedis };\n"
  },
  {
    "path": "services/cron/src/env.ts",
    "content": "import arkenv from \"arkenv\";\n\nconst schema = {\n  PRIVATE_RESOLUTION_WHITELIST: \"string?\",\n  BLOCK_PRIVATE_RESOLUTION: \"boolean?\",\n  COMMERCIAL_MODE: \"boolean?\",\n  DATABASE_URL: \"string.url\",\n  ENCRYPTION_KEY: \"string?\",\n  GOOGLE_CLIENT_ID: \"string?\",\n  GOOGLE_CLIENT_SECRET: \"string?\",\n  MICROSOFT_CLIENT_ID: \"string?\",\n  MICROSOFT_CLIENT_SECRET: \"string?\",\n  POLAR_ACCESS_TOKEN: \"string?\",\n  POLAR_MODE: \"'sandbox' | 'production' | undefined?\",\n  REDIS_URL: \"string.url\",\n  WORKER_JOB_QUEUE_ENABLED: \"boolean?\",\n} as const;\n\nexport { schema };\nexport default arkenv(schema);\n"
  },
  {
    "path": "services/cron/src/index.ts",
    "content": "import { entry } from \"entrykit\";\nimport { join } from \"node:path\";\nimport { getAllJobs } from \"./utils/get-jobs\";\nimport { injectJobs } from \"./utils/inject-jobs\";\nimport { registerJobs } from \"./utils/register-jobs\";\nimport { closeDatabase } from \"@keeper.sh/database\";\nimport { destroy } from \"./utils/logging\";\nimport { checkWorkerMigrationStatus } from \"./migration-check\";\nimport env from \"./env\";\n\ncheckWorkerMigrationStatus(env.WORKER_JOB_QUEUE_ENABLED);\n\nconst jobsFolderPathname = join(import.meta.dirname, \"jobs\");\n\nawait entry({\n  main: async () => {\n    const { database, shutdownRefreshLockRedis } = await import(\"./context\");\n\n    const jobs = await getAllJobs(jobsFolderPathname);\n    const injectedJobs = injectJobs(jobs);\n    registerJobs(injectedJobs);\n\n    return () => {\n      destroy();\n      shutdownRefreshLockRedis();\n      closeDatabase(database);\n    };\n  },\n  name: \"cron\",\n});\n"
  },
  {
    "path": "services/cron/src/jobs/ingest-sources.ts",
    "content": "import type { CronOptions } from \"cronbake\";\nimport {\n  ingestSource,\n  allSettledWithConcurrency,\n  insertEventStatesWithConflictResolution,\n  createGoogleTokenRefresher,\n  createMicrosoftTokenRefresher,\n  createCoordinatedRefresher,\n  createRedisRateLimiter,\n  ensureValidToken,\n} from \"@keeper.sh/calendar\";\nimport type { IngestionChanges, IngestionFetchEventsResult, RedisRateLimiter, TokenState } from \"@keeper.sh/calendar\";\nimport { createIcsSourceFetcher } from \"@keeper.sh/calendar/ics\";\nimport { createGoogleSourceFetcher } from \"@keeper.sh/calendar/google\";\nimport { createOutlookSourceFetcher } from \"@keeper.sh/calendar/outlook\";\nimport { createCalDAVSourceFetcher, isCalDAVAuthenticationError } from \"@keeper.sh/calendar/caldav\";\nimport { decryptPassword } from \"@keeper.sh/database\";\nimport {\n  calendarAccountsTable,\n  calendarsTable,\n  caldavCredentialsTable,\n  eventStatesTable,\n  oauthCredentialsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, eq, inArray } from \"drizzle-orm\";\nimport { withCronWideEvent } from \"@/utils/with-wide-event\";\nimport { context, widelog } from \"@/utils/logging\";\nimport { database, refreshLockRedis, refreshLockStore } from \"@/context\";\nimport env from \"@/env\";\nimport { safeFetchOptions } from \"@/utils/safe-fetch-options\";\n\nconst SOURCE_TIMEOUT_MS = 60_000;\nconst SOURCE_CONCURRENCY = 5;\nconst GOOGLE_REQUESTS_PER_MINUTE = 500;\n\nconst serializeOptionalJson = (value: unknown): string | null => {\n  if (!value) {\n    return null;\n  }\n  return JSON.stringify(value);\n};\n\nconst withTimeout = <TResult>(\n  operation: () => Promise<TResult>,\n  timeoutMs: number,\n): Promise<TResult> =>\n  Promise.race([\n    Promise.resolve().then(operation),\n    Bun.sleep(timeoutMs).then((): never => {\n      throw new Error(`Source ingestion timed out after ${timeoutMs}ms`);\n    }),\n  ]);\n\nconst createIngestionFlush = (calendarId: string) =>\n  async (changes: IngestionChanges): Promise<void> => {\n    await database.transaction(async (transaction) => {\n      if (changes.deletes.length > 0) {\n        await transaction\n          .delete(eventStatesTable)\n          .where(\n            and(\n              eq(eventStatesTable.calendarId, calendarId),\n              inArray(eventStatesTable.id, changes.deletes),\n            ),\n          );\n      }\n\n      if (changes.inserts.length > 0) {\n        await insertEventStatesWithConflictResolution(\n          transaction,\n          changes.inserts.map((event) => ({\n            availability: event.availability,\n            calendarId,\n            description: event.description,\n            endTime: event.endTime,\n            exceptionDates: serializeOptionalJson(event.exceptionDates),\n            isAllDay: event.isAllDay,\n            location: event.location,\n            recurrenceRule: serializeOptionalJson(event.recurrenceRule),\n            sourceEventType: event.sourceEventType,\n            sourceEventUid: event.uid,\n            startTime: event.startTime,\n            startTimeZone: event.startTimeZone,\n            title: event.title,\n          })),\n        );\n      }\n\n      if (\"syncToken\" in changes) {\n        await transaction\n          .update(calendarsTable)\n          .set({ syncToken: changes.syncToken })\n          .where(eq(calendarsTable.id, calendarId));\n      }\n    });\n  };\n\nconst readExistingEvents = (calendarId: string) =>\n  database\n    .select({\n      availability: eventStatesTable.availability,\n      endTime: eventStatesTable.endTime,\n      id: eventStatesTable.id,\n      isAllDay: eventStatesTable.isAllDay,\n      sourceEventType: eventStatesTable.sourceEventType,\n      sourceEventUid: eventStatesTable.sourceEventUid,\n      startTime: eventStatesTable.startTime,\n    })\n    .from(eventStatesTable)\n    .where(eq(eventStatesTable.calendarId, calendarId));\n\nconst resolveTokenRefresher = (provider: string) => {\n  if (provider === \"google\" && env.GOOGLE_CLIENT_ID && env.GOOGLE_CLIENT_SECRET) {\n    return createGoogleTokenRefresher({\n      clientId: env.GOOGLE_CLIENT_ID,\n      clientSecret: env.GOOGLE_CLIENT_SECRET,\n    });\n  }\n\n  if (provider === \"outlook\" && env.MICROSOFT_CLIENT_ID && env.MICROSOFT_CLIENT_SECRET) {\n    return createMicrosoftTokenRefresher({\n      clientId: env.MICROSOFT_CLIENT_ID,\n      clientSecret: env.MICROSOFT_CLIENT_SECRET,\n    });\n  }\n\n  return null;\n};\n\nconst resolveRateLimiter = (provider: string, userId: string): RedisRateLimiter | undefined => {\n  if (provider !== \"google\") {\n    return;\n  }\n\n  return createRedisRateLimiter(\n    refreshLockRedis,\n    `ratelimit:${userId}:google`,\n    { requestsPerMinute: GOOGLE_REQUESTS_PER_MINUTE },\n  );\n};\n\ninterface OAuthFetcherParams {\n  accessToken: string;\n  externalCalendarId: string;\n  syncToken: string | null;\n  rateLimiter?: RedisRateLimiter;\n}\n\nconst resolveOAuthFetcher = (\n  provider: string,\n  params: OAuthFetcherParams,\n): { fetchEvents: () => Promise<IngestionFetchEventsResult> } | null => {\n  if (provider === \"google\") {\n    return createGoogleSourceFetcher(params);\n  }\n  if (provider === \"outlook\") {\n    return createOutlookSourceFetcher(params);\n  }\n  return null;\n};\n\ninterface IngestionSourceResult {\n  eventsAdded: number;\n  eventsRemoved: number;\n  ingestEvents: Record<string, unknown>[];\n}\n\nconst ingestOAuthSources = async (): Promise<{ added: number; removed: number; errors: number; ingestEvents: Record<string, unknown>[] }> => {\n  const oauthSources = await database\n    .select({\n      accountId: calendarAccountsTable.id,\n      calendarId: calendarsTable.id,\n      provider: calendarAccountsTable.provider,\n      externalCalendarId: calendarsTable.externalCalendarId,\n      syncToken: calendarsTable.syncToken,\n      oauthCredentialId: oauthCredentialsTable.id,\n      accessToken: oauthCredentialsTable.accessToken,\n      refreshToken: oauthCredentialsTable.refreshToken,\n      expiresAt: oauthCredentialsTable.expiresAt,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(oauthCredentialsTable, eq(calendarAccountsTable.oauthCredentialId, oauthCredentialsTable.id))\n    .where(\n      and(\n        arrayContains(calendarsTable.capabilities, [\"pull\"]),\n        eq(calendarsTable.disabled, false),\n      ),\n    );\n\n  let added = 0;\n  let removed = 0;\n  let errors = 0;\n  const allIngestEvents: Record<string, unknown>[] = [];\n\n  const settlements = await allSettledWithConcurrency(\n    oauthSources.map((source) => () =>\n      withTimeout((): Promise<IngestionSourceResult> =>\n        context(async () => {\n          widelog.set(\"operation.name\", \"ingest-source\");\n          widelog.set(\"operation.type\", \"job\");\n          widelog.set(\"sync.direction\", \"ingest\");\n          widelog.set(\"user.id\", source.userId);\n          widelog.set(\"provider.name\", source.provider);\n          widelog.set(\"provider.account_id\", source.accountId);\n          widelog.set(\"provider.calendar_id\", source.calendarId);\n          if (source.externalCalendarId) {\n            widelog.set(\"provider.external_calendar_id\", source.externalCalendarId);\n          }\n\n          try {\n            if (!source.externalCalendarId) {\n  \n              widelog.set(\"outcome\", \"success\");\n              widelog.set(\"sync.events_added\", 0);\n              widelog.set(\"sync.events_removed\", 0);\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            const rawRefresher = resolveTokenRefresher(source.provider);\n            const tokenState: TokenState = {\n              accessToken: source.accessToken,\n              accessTokenExpiresAt: source.expiresAt,\n              refreshToken: source.refreshToken,\n            };\n\n            if (rawRefresher) {\n              const tokenRefresher = createCoordinatedRefresher({\n                database,\n                oauthCredentialId: source.oauthCredentialId,\n                calendarAccountId: source.accountId,\n                refreshLockStore,\n                rawRefresh: rawRefresher,\n              });\n              await ensureValidToken(tokenState, tokenRefresher);\n            }\n\n            const rateLimiter = resolveRateLimiter(source.provider, source.userId);\n\n            const resolvedFetcher = resolveOAuthFetcher(source.provider, {\n              accessToken: tokenState.accessToken,\n              externalCalendarId: source.externalCalendarId,\n              syncToken: source.syncToken,\n              rateLimiter,\n            });\n\n            if (!resolvedFetcher) {\n  \n              widelog.set(\"outcome\", \"success\");\n              widelog.set(\"sync.events_added\", 0);\n              widelog.set(\"sync.events_removed\", 0);\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            const fetcher = resolvedFetcher;\n            const ingestEvents: Record<string, unknown>[] = [];\n\n            const result = await widelog.time.measure(\"duration_ms\", () =>\n              ingestSource({\n                calendarId: source.calendarId,\n                fetchEvents: () => fetcher.fetchEvents(),\n                readExistingEvents: () => readExistingEvents(source.calendarId),\n                flush: createIngestionFlush(source.calendarId),\n                onIngestEvent: (event) => {\n                  ingestEvents.push({\n                    ...event,\n                    \"source.provider\": source.provider,\n                  });\n                },\n              }),\n            );\n\n            widelog.set(\"sync.events_added\", result.eventsAdded);\n            widelog.set(\"sync.events_removed\", result.eventsRemoved);\n\n            widelog.set(\"outcome\", \"success\");\n\n            return { eventsAdded: result.eventsAdded, eventsRemoved: result.eventsRemoved, ingestEvents };\n          } catch (error) {\n\n            widelog.set(\"outcome\", \"error\");\n\n            if (error instanceof Error && \"status\" in error && error.status === 404) {\n              widelog.errorFields(error, { slug: \"provider-calendar-not-found\", retriable: false });\n\n              await database\n                .update(calendarsTable)\n                .set({ disabled: true })\n                .where(eq(calendarsTable.id, source.calendarId));\n\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            if (error instanceof Error && \"authRequired\" in error && error.authRequired === true) {\n              widelog.errorFields(error, { slug: \"provider-auth-failed\", retriable: false, requiresReauth: true });\n\n              await database\n                .update(calendarAccountsTable)\n                .set({ needsReauthentication: true })\n                .where(eq(calendarAccountsTable.id, source.accountId));\n\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            if (error instanceof Error && \"oauthReauthRequired\" in error && error.oauthReauthRequired === true) {\n              widelog.errorFields(error, { slug: \"provider-token-refresh-failed\", retriable: false, requiresReauth: true });\n\n              await database\n                .update(calendarAccountsTable)\n                .set({ needsReauthentication: true })\n                .where(eq(calendarAccountsTable.id, source.accountId));\n\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            widelog.errorFields(error, { slug: \"provider-api-error\", retriable: true });\n            throw error;\n          } finally {\n            widelog.flush();\n          }\n        }),\n      SOURCE_TIMEOUT_MS),\n    ),\n    { concurrency: SOURCE_CONCURRENCY },\n  );\n\n  for (const settlement of settlements) {\n    if (settlement.status === \"fulfilled\") {\n      added += settlement.value.eventsAdded;\n      removed += settlement.value.eventsRemoved;\n      allIngestEvents.push(...settlement.value.ingestEvents);\n    } else {\n      errors += 1;\n    }\n  }\n\n  return { added, removed, errors, ingestEvents: allIngestEvents };\n};\n\nconst ingestCalDAVSources = async (): Promise<{ added: number; removed: number; errors: number; ingestEvents: Record<string, unknown>[] }> => {\n  if (!env.ENCRYPTION_KEY) {\n    return { added: 0, removed: 0, errors: 0, ingestEvents: [] };\n  }\n\n  const encryptionKey = env.ENCRYPTION_KEY;\n\n  const caldavSources = await database\n    .select({\n      accountId: calendarAccountsTable.id,\n      calendarId: calendarsTable.id,\n      calendarUrl: calendarsTable.calendarUrl,\n      provider: calendarAccountsTable.provider,\n      username: caldavCredentialsTable.username,\n      encryptedPassword: caldavCredentialsTable.encryptedPassword,\n      serverUrl: caldavCredentialsTable.serverUrl,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .innerJoin(calendarAccountsTable, eq(calendarsTable.accountId, calendarAccountsTable.id))\n    .innerJoin(caldavCredentialsTable, eq(calendarAccountsTable.caldavCredentialId, caldavCredentialsTable.id))\n    .where(\n      and(\n        arrayContains(calendarsTable.capabilities, [\"pull\"]),\n        eq(calendarsTable.disabled, false),\n      ),\n    );\n\n  let added = 0;\n  let removed = 0;\n  let errors = 0;\n  const allIngestEvents: Record<string, unknown>[] = [];\n\n  const settlements = await allSettledWithConcurrency(\n    caldavSources.map((source) => () =>\n      withTimeout((): Promise<IngestionSourceResult> =>\n        context(async () => {\n          widelog.set(\"operation.name\", \"ingest-source\");\n          widelog.set(\"operation.type\", \"job\");\n          widelog.set(\"sync.direction\", \"ingest\");\n          widelog.set(\"user.id\", source.userId);\n          widelog.set(\"provider.name\", source.provider);\n          widelog.set(\"provider.account_id\", source.accountId);\n          widelog.set(\"provider.calendar_id\", source.calendarId);\n\n          try {\n            const password = decryptPassword(source.encryptedPassword, encryptionKey);\n\n            const fetcher = createCalDAVSourceFetcher({\n              calendarUrl: source.calendarUrl ?? source.serverUrl,\n              serverUrl: source.serverUrl,\n              username: source.username,\n              password,\n              safeFetchOptions,\n            });\n\n            const ingestEvents: Record<string, unknown>[] = [];\n\n            const result = await widelog.time.measure(\"duration_ms\", () =>\n              ingestSource({\n                calendarId: source.calendarId,\n                fetchEvents: () => fetcher.fetchEvents(),\n                readExistingEvents: () => readExistingEvents(source.calendarId),\n                flush: createIngestionFlush(source.calendarId),\n                onIngestEvent: (event) => {\n                  ingestEvents.push({\n                    ...event,\n                    \"source.provider\": source.provider,\n                  });\n                },\n              }),\n            );\n\n            widelog.set(\"sync.events_added\", result.eventsAdded);\n            widelog.set(\"sync.events_removed\", result.eventsRemoved);\n\n            widelog.set(\"outcome\", \"success\");\n\n            return { eventsAdded: result.eventsAdded, eventsRemoved: result.eventsRemoved, ingestEvents };\n          } catch (error) {\n\n            widelog.set(\"outcome\", \"error\");\n\n            if (isCalDAVAuthenticationError(error)) {\n              widelog.errorFields(error, { slug: \"provider-auth-failed\", retriable: false, requiresReauth: true });\n\n              await database\n                .update(calendarAccountsTable)\n                .set({ needsReauthentication: true })\n                .where(eq(calendarAccountsTable.id, source.accountId));\n\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            if (error instanceof Error && error.message.includes(\"404\")) {\n              widelog.errorFields(error, { slug: \"provider-calendar-not-found\", retriable: false });\n\n              await database\n                .update(calendarsTable)\n                .set({ disabled: true })\n                .where(eq(calendarsTable.id, source.calendarId));\n            } else {\n              widelog.errorFields(error, { slug: \"provider-api-error\", retriable: true });\n            }\n\n            throw error;\n          } finally {\n            widelog.flush();\n          }\n        }),\n      SOURCE_TIMEOUT_MS),\n    ),\n    { concurrency: SOURCE_CONCURRENCY },\n  );\n\n  for (const settlement of settlements) {\n    if (settlement.status === \"fulfilled\") {\n      added += settlement.value.eventsAdded;\n      removed += settlement.value.eventsRemoved;\n      allIngestEvents.push(...settlement.value.ingestEvents);\n    } else {\n      errors += 1;\n    }\n  }\n\n  return { added, removed, errors, ingestEvents: allIngestEvents };\n};\n\nconst ingestIcsSources = async (): Promise<{ added: number; removed: number; errors: number; ingestEvents: Record<string, unknown>[] }> => {\n  const icsSources = await database\n    .select({\n      calendarId: calendarsTable.id,\n      url: calendarsTable.url,\n      userId: calendarsTable.userId,\n    })\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.calendarType, \"ical\"),\n        eq(calendarsTable.disabled, false),\n      ),\n    );\n\n  let added = 0;\n  let removed = 0;\n  let errors = 0;\n  const allIngestEvents: Record<string, unknown>[] = [];\n\n  const settlements = await allSettledWithConcurrency(\n    icsSources.map((source) => () =>\n      withTimeout((): Promise<IngestionSourceResult> =>\n        context(async () => {\n          widelog.set(\"operation.name\", \"ingest-source\");\n          widelog.set(\"operation.type\", \"job\");\n          widelog.set(\"sync.direction\", \"ingest\");\n          widelog.set(\"user.id\", source.userId);\n          widelog.set(\"provider.name\", \"ical\");\n          widelog.set(\"provider.calendar_id\", source.calendarId);\n\n          try {\n            if (!source.url) {\n  \n              widelog.set(\"outcome\", \"success\");\n              widelog.set(\"sync.events_added\", 0);\n              widelog.set(\"sync.events_removed\", 0);\n              return { eventsAdded: 0, eventsRemoved: 0, ingestEvents: [] };\n            }\n\n            const fetcher = createIcsSourceFetcher({\n              calendarId: source.calendarId,\n              url: source.url,\n              database,\n              safeFetchOptions,\n            });\n\n            const ingestEvents: Record<string, unknown>[] = [];\n\n            const result = await widelog.time.measure(\"duration_ms\", () =>\n              ingestSource({\n                calendarId: source.calendarId,\n                fetchEvents: () => fetcher.fetchEvents(),\n                readExistingEvents: () => readExistingEvents(source.calendarId),\n                flush: createIngestionFlush(source.calendarId),\n                onIngestEvent: (event) => {\n                  ingestEvents.push({\n                    ...event,\n                    \"source.provider\": \"ical\",\n                  });\n                },\n              }),\n            );\n\n            widelog.set(\"sync.events_added\", result.eventsAdded);\n            widelog.set(\"sync.events_removed\", result.eventsRemoved);\n\n            widelog.set(\"outcome\", \"success\");\n\n            return { eventsAdded: result.eventsAdded, eventsRemoved: result.eventsRemoved, ingestEvents };\n          } catch (error) {\n\n            widelog.set(\"outcome\", \"error\");\n            widelog.errorFields(error, { slug: \"provider-api-error\", retriable: true });\n            throw error;\n          } finally {\n            widelog.flush();\n          }\n        }),\n      SOURCE_TIMEOUT_MS),\n    ),\n    { concurrency: SOURCE_CONCURRENCY },\n  );\n\n  for (const settlement of settlements) {\n    if (settlement.status === \"fulfilled\") {\n      added += settlement.value.eventsAdded;\n      removed += settlement.value.eventsRemoved;\n      allIngestEvents.push(...settlement.value.ingestEvents);\n    } else {\n      errors += 1;\n    }\n  }\n\n  return { added, removed, errors, ingestEvents: allIngestEvents };\n};\n\nexport default withCronWideEvent({\n  async callback() {\n    await Promise.allSettled([\n      ingestOAuthSources(),\n      ingestCalDAVSources(),\n      ingestIcsSources(),\n    ]);\n  },\n  cron: \"@every_1_minutes\",\n  immediate: true,\n  name: \"ingest-sources\",\n  overrunProtection: false,\n}) satisfies CronOptions;\n"
  },
  {
    "path": "services/cron/src/jobs/push-destinations.ts",
    "content": "import type { CronOptions } from \"cronbake\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\nimport { createPushSyncQueue } from \"@keeper.sh/queue\";\nimport type { PushSyncJobPayload } from \"@keeper.sh/queue\";\nimport { withCronWideEvent } from \"@/utils/with-wide-event\";\nimport { widelog } from \"@/utils/logging\";\nimport { getUsersWithDestinationsByPlan } from \"@/utils/get-sources\";\nimport env from \"@/env\";\n\nconst runEgressJob = async (plan: Plan): Promise<void> => {\n  if (env.WORKER_JOB_QUEUE_ENABLED === false) {\n    return;\n  }\n\n  const usersWithDestinations = await getUsersWithDestinationsByPlan(plan);\n\n  const correlationId = crypto.randomUUID();\n\n  widelog.set(\"batch.plan\", plan);\n  widelog.set(\"batch.user_count\", usersWithDestinations.length);\n  widelog.set(\"batch.jobs_enqueued\", usersWithDestinations.length);\n  widelog.set(\"correlation.id\", correlationId);\n\n  if (usersWithDestinations.length === 0) {\n    return;\n  }\n\n  const queue = createPushSyncQueue({ url: env.REDIS_URL, maxRetriesPerRequest: null });\n\n  try {\n    await queue.addBulk(\n      usersWithDestinations.map((userId) => ({\n        name: `sync-${userId}`,\n        data: { userId, plan, correlationId } satisfies PushSyncJobPayload,\n        opts: { jobId: `sync-${userId}`, removeOnComplete: true, removeOnFail: true },\n      })),\n    );\n  } finally {\n    await queue.close();\n  }\n};\n\nconst createPushJob = (plan: Plan, cron: string): CronOptions =>\n  withCronWideEvent({\n    async callback() {\n      await runEgressJob(plan);\n    },\n    cron,\n    immediate: process.env.ENV !== \"production\",\n    name: `push-destinations-${plan}`,\n    overrunProtection: false,\n  });\n\nexport default [\n  createPushJob(\"free\", \"@every_30_minutes\"),\n  createPushJob(\"pro\", \"@every_1_minutes\"),\n];\n"
  },
  {
    "path": "services/cron/src/jobs/reconcile-subscriptions.ts",
    "content": "import type { CronOptions } from \"cronbake\";\nimport { userSubscriptionsTable } from \"@keeper.sh/database/schema\";\nimport { user } from \"@keeper.sh/database/auth-schema\";\nimport { withCronWideEvent } from \"@/utils/with-wide-event\";\nimport { widelog } from \"@/utils/logging\";\n\nconst EMPTY_SUBSCRIPTIONS_COUNT = 0;\n\nconst getPlanFromSubscriptionStatus = (hasActive: boolean): \"pro\" | \"free\" => {\n  if (hasActive) {\n    return \"pro\";\n  }\n  return \"free\";\n};\n\ninterface ReconcileSubscriptionsDependencies {\n  hasBillingClient: boolean;\n  selectUserIds: () => Promise<string[]>;\n  reconcileUserSubscription: (userId: string) => Promise<void>;\n  reconcileUserTimeoutMs?: number;\n}\n\nconst RECONCILE_USER_TIMEOUT_MS = 60_000;\n\nconst invokeOperation = <TResult>(\n  operation: () => Promise<TResult>,\n): Promise<TResult> => operation();\n\nconst withOperationTimeout = <TResult>(\n  operation: () => Promise<TResult>,\n  timeoutMs: number,\n  operationName: string,\n): Promise<TResult> =>\n  Promise.race([\n    invokeOperation(operation),\n    Bun.sleep(timeoutMs).then((): never => {\n      throw new Error(`${operationName} timed out after ${timeoutMs}ms`);\n    }),\n  ]);\n\nconst runReconcileSubscriptionsJob = async (\n  dependencies: ReconcileSubscriptionsDependencies,\n): Promise<void> => {\n  if (!dependencies.hasBillingClient) {\n    return;\n  }\n\n  const userIds = await dependencies.selectUserIds();\n  const reconcileUserTimeoutMs = dependencies.reconcileUserTimeoutMs ?? RECONCILE_USER_TIMEOUT_MS;\n\n  const settlements = await Promise.allSettled(\n    userIds.map((userId) =>\n      withOperationTimeout(\n        () => dependencies.reconcileUserSubscription(userId),\n        reconcileUserTimeoutMs,\n        `reconcile:subscription:${userId}`,\n      )),\n  );\n\n  const failedCount = settlements.filter((settlement) => settlement.status === \"rejected\").length;\n\n  widelog.set(\"batch.processed_count\", userIds.length);\n  widelog.set(\"batch.failed_count\", failedCount);\n};\n\nconst createDefaultDependencies = async (): Promise<ReconcileSubscriptionsDependencies> => {\n  const { database, polarClient } = await import(\"@/context\");\n\n  return {\n    hasBillingClient: Boolean(polarClient),\n    reconcileUserSubscription: async (userId) => {\n      if (!polarClient) {\n        return;\n      }\n\n      const subscriptions = await polarClient.subscriptions.list({\n        active: true,\n        externalCustomerId: userId,\n      });\n\n      const hasActiveSubscription = subscriptions.result.items.length > EMPTY_SUBSCRIPTIONS_COUNT;\n      const plan = getPlanFromSubscriptionStatus(hasActiveSubscription);\n\n      const [polarSubscription] = subscriptions.result.items;\n      const polarSubscriptionId = polarSubscription?.id ?? null;\n\n      await database\n        .insert(userSubscriptionsTable)\n        .values({\n          plan,\n          polarSubscriptionId,\n          userId,\n        })\n        .onConflictDoUpdate({\n          set: {\n            plan,\n            polarSubscriptionId,\n          },\n          target: userSubscriptionsTable.userId,\n        });\n    },\n    selectUserIds: async () => {\n      const users = await database.select({ id: user.id }).from(user);\n      return users.map((userRecord) => userRecord.id);\n    },\n  };\n};\n\nexport default withCronWideEvent({\n  async callback() {\n    const dependencies = await createDefaultDependencies();\n    await runReconcileSubscriptionsJob(dependencies);\n  },\n  cron: \"0 0 * * * *\",\n  immediate: true,\n  name: import.meta.file,\n}) satisfies CronOptions;\n\nexport { runReconcileSubscriptionsJob };\n"
  },
  {
    "path": "services/cron/src/migration-check.ts",
    "content": "const MIGRATION_GUIDE_URL = \"https://github.com/ridafkih/keeper.sh/issues/267\";\n\nconst checkWorkerMigrationStatus = (workerJobQueueEnabled: boolean | undefined): void => {\n  if (workerJobQueueEnabled === true || workerJobQueueEnabled === false) {\n    return;\n  }\n\n  const lines = [\n    \"\",\n    \"╔══════════════════════════════════════════════════════════════╗\",\n    \"║  KEEPER MIGRATION REQUIRED                                 ║\",\n    \"║  A separate worker service is now required for calendar     ║\",\n    \"║  sync. Without it, destination syncing will not function.   ║\",\n    \"╚══════════════════════════════════════════════════════════════╝\",\n    \"\",\n    \"  Starting with this version, the cron service enqueues sync\",\n    \"  jobs to a Redis queue. A separate keeper-worker service\",\n    \"  must be running to process them.\",\n    \"\",\n    \"  To fix this:\",\n    \"\",\n    \"    1. Add the keeper-worker container to your deployment\",\n    \"    2. Set WORKER_JOB_QUEUE_ENABLED=true in the cron environment\",\n    \"\",\n    \"  If you do not want to use the worker service, set\",\n    \"  WORKER_JOB_QUEUE_ENABLED=false to disable job enqueuing.\",\n    \"\",\n    `  Migration guide: ${MIGRATION_GUIDE_URL}`,\n    \"\",\n  ];\n\n  process.stderr.write(`${lines.join(\"\\n\")}\\n`);\n  process.exit(1);\n};\n\nexport { checkWorkerMigrationStatus };\n"
  },
  {
    "path": "services/cron/src/utils/baker.ts",
    "content": "import { Baker } from \"cronbake\";\n\nexport const baker = Baker.create({});\n"
  },
  {
    "path": "services/cron/src/utils/get-jobs.ts",
    "content": "import type { CronOptions } from \"cronbake\";\nimport { Glob } from \"bun\";\nimport { basename, join } from \"node:path\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst isCronOptionsExport = (value: unknown): value is CronOptions =>\n  isRecord(value)\n  && typeof value.callback === \"function\"\n  && typeof value.name === \"string\";\n\nconst createMissingDefaultExportError = (entrypoint: string): Error =>\n  new Error(`Job module ${entrypoint} is missing a default cron export`);\n\nconst createInvalidCronExportError = (entrypoint: string, suffix?: string): Error =>\n  new Error(`Job module ${entrypoint} has an invalid cron export${suffix ?? \"\"}`);\n\nconst normalizeJobExport = (value: unknown, entrypoint: string): CronOptions[] => {\n  if (value === globalThis.undefined) {\n    throw createMissingDefaultExportError(entrypoint);\n  }\n\n  if (Array.isArray(value)) {\n    const jobs: CronOptions[] = [];\n    for (const [index, entry] of value.entries()) {\n      if (!isCronOptionsExport(entry)) {\n        throw createInvalidCronExportError(entrypoint, ` at index ${index}`);\n      }\n\n      jobs.push(entry);\n    }\n\n    return jobs;\n  }\n\n  if (isCronOptionsExport(value)) {\n    return [value];\n  }\n\n  throw createInvalidCronExportError(entrypoint);\n};\n\nconst isRuntimeJobEntrypoint = (entrypoint: string): boolean => {\n  const fileName = basename(entrypoint);\n  return !fileName.endsWith(\".test.ts\")\n    && !fileName.endsWith(\".test.js\")\n    && !fileName.endsWith(\".spec.ts\")\n    && !fileName.endsWith(\".spec.js\")\n    && !fileName.endsWith(\".d.ts\");\n};\n\nexport const getAllJobs = async (rootDirectory: string): Promise<CronOptions[]> => {\n  const globPattern = join(rootDirectory, \"**/*.{ts,js}\");\n  const globScanner = new Glob(globPattern);\n  const allEntrypoints = await Array.fromAsync(globScanner.scan());\n  const entrypoints = allEntrypoints.filter((entrypoint) => isRuntimeJobEntrypoint(entrypoint));\n\n  const imports = entrypoints.map(async (entrypoint): Promise<{ entrypoint: string; defaultExport: unknown }> => {\n    const module = await import(entrypoint);\n    return {\n      defaultExport: module.default,\n      entrypoint,\n    };\n  });\n\n  const defaultExports = await Promise.all(imports);\n  return defaultExports.flatMap(({ defaultExport, entrypoint }) =>\n    normalizeJobExport(defaultExport, entrypoint),\n  );\n};\n"
  },
  {
    "path": "services/cron/src/utils/get-sources.ts",
    "content": "import {\n  calendarsTable,\n  sourceDestinationMappingsTable,\n} from \"@keeper.sh/database/schema\";\nimport { and, arrayContains, eq, inArray } from \"drizzle-orm\";\nimport type { Plan } from \"@keeper.sh/data-schemas\";\nimport { database, premiumService } from \"@/context\";\nimport { filterSourcesByPlan, filterUserIdsByPlan } from \"./source-plan-selection\";\n\nconst fetchCalendars = (calendarType?: string) => {\n  if (calendarType) {\n    return database\n      .select()\n      .from(calendarsTable)\n      .where(\n        and(\n          eq(calendarsTable.calendarType, calendarType),\n          eq(calendarsTable.disabled, false),\n          inArray(calendarsTable.id,\n            database.selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n              .from(sourceDestinationMappingsTable),\n          ),\n        ),\n      );\n  }\n  return database\n    .select()\n    .from(calendarsTable)\n    .where(\n      and(\n        eq(calendarsTable.disabled, false),\n        inArray(calendarsTable.id,\n          database.selectDistinct({ id: sourceDestinationMappingsTable.sourceCalendarId })\n            .from(sourceDestinationMappingsTable),\n        ),\n      ),\n    );\n};\n\nconst getDestinationScopeFilter = () => and(\n  arrayContains(calendarsTable.capabilities, [\"push\"]),\n  eq(calendarsTable.disabled, false),\n);\n\nconst getSourcesByPlan = async (\n  targetPlan: Plan,\n  calendarType?: string,\n): Promise<(typeof calendarsTable.$inferSelect)[]> => {\n  const sources = await fetchCalendars(calendarType);\n  return filterSourcesByPlan(sources, targetPlan, (userId) => premiumService.getUserPlan(userId));\n};\n\nconst getUsersWithDestinationsByPlan = async (targetPlan: Plan): Promise<string[]> => {\n  const destinations = await database\n    .select({ userId: calendarsTable.userId })\n    .from(calendarsTable)\n    .where(getDestinationScopeFilter());\n\n  return filterUserIdsByPlan(\n    destinations.map(({ userId }) => userId),\n    targetPlan,\n    (userId) => premiumService.getUserPlan(userId),\n  );\n};\n\nexport { getSourcesByPlan, getUsersWithDestinationsByPlan };\n"
  },
  {
    "path": "services/cron/src/utils/inject-jobs.ts",
    "content": "import type { CronOptions } from \"cronbake\";\n\nconst injectJobs = (configurations: CronOptions[]): CronOptions[] => configurations;\n\nexport { injectJobs };\n"
  },
  {
    "path": "services/cron/src/utils/logging.ts",
    "content": "import { widelogger, widelog } from \"widelogger\";\n\nconst environment = process.env.ENV ?? \"production\";\n\nconst { context, destroy } = widelogger({\n  service: \"keeper-cron\",\n  defaultEventName: \"wide_event\",\n  commitHash: process.env.COMMIT_SHA,\n  environment,\n  version: process.env.npm_package_version,\n});\n\nexport { context, destroy, widelog };\n"
  },
  {
    "path": "services/cron/src/utils/register-jobs.ts",
    "content": "import type { CronOptions, ICron } from \"cronbake\";\nimport { baker } from \"./baker\";\n\nexport const registerJobs = (jobs: CronOptions[]): ICron[] => {\n  const crons: ICron[] = [];\n\n  for (const job of jobs) {\n    const cron = baker.add(job);\n    crons.push(cron);\n  }\n\n  baker.bakeAll();\n  return crons;\n};\n"
  },
  {
    "path": "services/cron/src/utils/safe-fetch-options.ts",
    "content": "import type { SafeFetchOptions } from \"@keeper.sh/calendar/safe-fetch\";\nimport env from \"@/env\";\n\nconst parseSafeFetchOptions = (): SafeFetchOptions => {\n  const options: SafeFetchOptions = {\n    blockPrivateResolution: env.BLOCK_PRIVATE_RESOLUTION === true,\n  };\n\n  if (env.PRIVATE_RESOLUTION_WHITELIST) {\n    const hosts = env.PRIVATE_RESOLUTION_WHITELIST\n      .split(\",\")\n      .map((host) => host.trim())\n      .filter((host) => host.length > 0);\n\n    options.allowedPrivateHosts = new Set(hosts);\n  }\n\n  return options;\n};\n\nconst safeFetchOptions = parseSafeFetchOptions();\n\nexport { safeFetchOptions };\n"
  },
  {
    "path": "services/cron/src/utils/source-plan-selection.ts",
    "content": "import type { Plan } from \"@keeper.sh/data-schemas\";\n\ninterface SourceWithUserId {\n  userId: string;\n}\n\ntype GetUserPlan = (userId: string) => Promise<Plan>;\n\nconst getUniqueUserIds = (userIds: string[]): string[] => [...new Set(userIds)];\n\nconst resolveUserPlanMap = async (\n  userIds: string[],\n  getUserPlan: GetUserPlan,\n): Promise<Map<string, Plan>> => {\n  const uniqueUserIds = getUniqueUserIds(userIds);\n  const userPlans = await Promise.all(\n    uniqueUserIds.map(async (userId) => ({\n      plan: await getUserPlan(userId),\n      userId,\n    })),\n  );\n\n  return new Map(userPlans.map((userPlan) => [userPlan.userId, userPlan.plan]));\n};\n\nconst filterSourcesByPlan = async <TSource extends SourceWithUserId>(\n  sources: TSource[],\n  targetPlan: Plan,\n  getUserPlan: GetUserPlan,\n): Promise<TSource[]> => {\n  const userPlanMap = await resolveUserPlanMap(\n    sources.map((source) => source.userId),\n    getUserPlan,\n  );\n\n  return sources.filter((source) => userPlanMap.get(source.userId) === targetPlan);\n};\n\nconst filterUserIdsByPlan = async (\n  userIds: string[],\n  targetPlan: Plan,\n  getUserPlan: GetUserPlan,\n): Promise<string[]> => {\n  const uniqueUserIds = getUniqueUserIds(userIds);\n  const userPlanMap = await resolveUserPlanMap(uniqueUserIds, getUserPlan);\n\n  return uniqueUserIds.filter((userId) => userPlanMap.get(userId) === targetPlan);\n};\n\nexport { filterSourcesByPlan, filterUserIdsByPlan };\n"
  },
  {
    "path": "services/cron/src/utils/with-wide-event.ts",
    "content": "import type { CronOptions } from \"cronbake\";\nimport { context, widelog } from \"./logging\";\n\nconst withCronWideEvent = (options: CronOptions): CronOptions => ({\n  ...options,\n  callback: async () => {\n    await context(async () => {\n      widelog.set(\"operation.name\", options.name);\n      widelog.set(\"operation.type\", \"job\");\n\n      try {\n        await widelog.time.measure(\"duration_ms\", options.callback);\n        widelog.set(\"outcome\", \"success\");\n      } catch (error) {\n        widelog.set(\"outcome\", \"error\");\n        widelog.errorFields(error, { slug: \"unclassified\" });\n        throw error;\n      } finally {\n        widelog.flush();\n      }\n    });\n  },\n});\n\nexport { withCronWideEvent };\n"
  },
  {
    "path": "services/cron/tests/jobs/reconcile-subscriptions.test.ts",
    "content": "import { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { runReconcileSubscriptionsJob } from \"../../src/jobs/reconcile-subscriptions\";\n\ndescribe(\"runReconcileSubscriptionsJob\", () => {\n  it(\"skips processing when Polar client is unavailable\", async () => {\n    const reconciledUserIds: string[] = [];\n\n    await runReconcileSubscriptionsJob({\n      hasBillingClient: false,\n      reconcileUserSubscription: (userId) => {\n        reconciledUserIds.push(userId);\n        return Promise.resolve();\n      },\n      selectUserIds: () => Promise.resolve([\"user-1\", \"user-2\"]),\n    });\n\n    expect(reconciledUserIds).toEqual([]);\n  });\n\n  it(\"tracks failed reconciliations without stopping the full cycle\", async () => {\n    const reconciledUserIds: string[] = [];\n\n    await runReconcileSubscriptionsJob({\n      hasBillingClient: true,\n      reconcileUserSubscription: (userId) => {\n        reconciledUserIds.push(userId);\n        if (userId === \"user-2\") {\n          return Promise.reject(new Error(\"reconciliation failed\"));\n        }\n        return Promise.resolve();\n      },\n      selectUserIds: () => Promise.resolve([\"user-1\", \"user-2\", \"user-3\"]),\n    });\n\n    expect(reconciledUserIds).toEqual([\"user-1\", \"user-2\", \"user-3\"]);\n  });\n\n  it(\"completes without error when multiple users fail reconciliation\", async () => {\n    await runReconcileSubscriptionsJob({\n      hasBillingClient: true,\n      reconcileUserSubscription: () => Promise.reject(new Error(\"reconcile failed\")),\n      selectUserIds: () => Promise.resolve([\"user-1\", \"user-2\"]),\n    });\n  });\n\n  it(\"completes without error when there are no users to reconcile\", async () => {\n    const reconciledUserIds: string[] = [];\n\n    await runReconcileSubscriptionsJob({\n      hasBillingClient: true,\n      reconcileUserSubscription: (userId) => {\n        reconciledUserIds.push(userId);\n        return Promise.resolve();\n      },\n      selectUserIds: () => Promise.resolve([]),\n    });\n\n    expect(reconciledUserIds).toEqual([]);\n  });\n\n  describe(\"timeout handling\", () => {\n    beforeEach(() => {\n      vi.useFakeTimers();\n    });\n\n    afterEach(() => {\n      vi.useRealTimers();\n    });\n\n    it(\"handles timed out reconciliation operations gracefully\", async () => {\n      const reconciledUserIds: string[] = [];\n\n      const promise = runReconcileSubscriptionsJob({\n        hasBillingClient: true,\n        reconcileUserSubscription: (userId) => {\n          reconciledUserIds.push(userId);\n          if (userId === \"user-2\") {\n            return new Promise((resolve) => { setTimeout(resolve, 10_000); });\n          }\n          return Promise.resolve();\n        },\n        reconcileUserTimeoutMs: 1,\n        selectUserIds: () => Promise.resolve([\"user-1\", \"user-2\"]),\n      });\n\n      for (let tick = 0; tick < 10; tick++) {\n        await Promise.resolve();\n      }\n\n      vi.advanceTimersByTime(10_000);\n\n      await promise;\n\n      expect(reconciledUserIds).toEqual([\"user-1\", \"user-2\"]);\n    });\n  });\n});\n"
  },
  {
    "path": "services/cron/tests/migration-check.test.ts",
    "content": "import { describe, expect, it, vi } from \"vitest\";\nimport { checkWorkerMigrationStatus } from \"../src/migration-check\";\n\ndescribe(\"checkWorkerMigrationStatus\", () => {\n  it(\"does not exit when WORKER_JOB_QUEUE_ENABLED is true\", () => {\n    const exitSpy = vi.spyOn(process, \"exit\").mockImplementation(() => {\n      throw new Error(\"process.exit called\");\n    });\n\n    checkWorkerMigrationStatus(true);\n\n    expect(exitSpy).not.toHaveBeenCalled();\n    exitSpy.mockRestore();\n  });\n\n  it(\"does not exit when WORKER_JOB_QUEUE_ENABLED is false\", () => {\n    const exitSpy = vi.spyOn(process, \"exit\").mockImplementation(() => {\n      throw new Error(\"process.exit called\");\n    });\n\n    checkWorkerMigrationStatus(false);\n\n    expect(exitSpy).not.toHaveBeenCalled();\n    exitSpy.mockRestore();\n  });\n\n  it(\"exits with code 1 when WORKER_JOB_QUEUE_ENABLED is undefined\", () => {\n    const exitSpy = vi.spyOn(process, \"exit\").mockImplementation(() => {\n      throw new Error(\"process.exit called\");\n    });\n    const stderrSpy = vi.spyOn(process.stderr, \"write\").mockImplementation(() => true);\n\n    try {\n      // eslint-disable-next-line @eslint/no-undefined @eslint-plugin-unicorn/no-useless-undefined\n      checkWorkerMigrationStatus(undefined);\n    } catch {\n      // Expected — mock throws to prevent actual exit\n    }\n\n    expect(exitSpy).toHaveBeenCalledWith(1);\n    exitSpy.mockRestore();\n    stderrSpy.mockRestore();\n  });\n\n  it(\"writes migration guide to stderr when WORKER_JOB_QUEUE_ENABLED is undefined\", () => {\n    const exitSpy = vi.spyOn(process, \"exit\").mockImplementation(() => {\n      throw new Error(\"process.exit called\");\n    });\n    const stderrSpy = vi.spyOn(process.stderr, \"write\").mockImplementation(() => true);\n\n    try {\n      // eslint-disable-next-line @eslint/no-undefined @eslint-plugin-unicorn/no-useless-undefined\n      checkWorkerMigrationStatus(undefined);\n    } catch {\n      // Expected\n    }\n\n    const output = stderrSpy.mock.calls[0]?.[0];\n    expect(output).toContain(\"KEEPER MIGRATION REQUIRED\");\n    expect(output).toContain(\"WORKER_JOB_QUEUE_ENABLED=true\");\n    expect(output).toContain(\"WORKER_JOB_QUEUE_ENABLED=false\");\n    expect(output).toContain(\"https://github.com/ridafkih/keeper.sh/issues/267\");\n\n    exitSpy.mockRestore();\n    stderrSpy.mockRestore();\n  });\n});\n"
  },
  {
    "path": "services/cron/tests/utils/get-jobs.test.ts",
    "content": "import { afterAll, describe, expect, it } from \"vitest\";\nimport { mkdtemp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { getAllJobs } from \"../../src/utils/get-jobs\";\n\nconst temporaryDirectories: string[] = [];\n\nconst createTempWorkspace = async (): Promise<string> => {\n  const directory = await mkdtemp(join(tmpdir(), \"keeper-get-jobs-\"));\n  temporaryDirectories.push(directory);\n  return directory;\n};\n\nafterAll(async () => {\n  await Promise.all(\n    temporaryDirectories.map((directory) => rm(directory, { force: true, recursive: true })),\n  );\n});\n\ndescribe(\"getAllJobs\", () => {\n  it(\"collects default cron exports from files and arrays\", async () => {\n    const workspaceRoot = await createTempWorkspace();\n\n    await writeFile(\n      join(workspaceRoot, \"single.ts\"),\n      `export default { name: \"single-job\", cron: \"* * * * *\", callback: async () => {} };`,\n      \"utf8\",\n    );\n\n    await mkdir(join(workspaceRoot, \"nested\"), { recursive: true });\n    await writeFile(\n      join(workspaceRoot, \"nested\", \"multi.ts\"),\n      `export default [\n        { name: \"array-job-1\", cron: \"* * * * *\", callback: async () => {} },\n        { name: \"array-job-2\", cron: \"* * * * *\", callback: async () => {} },\n      ];`,\n      \"utf8\",\n    );\n\n    const jobs = await getAllJobs(workspaceRoot);\n    const names = jobs.map((job) => job.name).toSorted();\n\n    expect(names).toEqual([\"array-job-1\", \"array-job-2\", \"single-job\"]);\n  });\n\n  it(\"throws when a file is missing a default cron export\", async () => {\n    const workspaceRoot = await createTempWorkspace();\n\n    await writeFile(\n      join(workspaceRoot, \"valid.ts\"),\n      `export default { name: \"valid-job\", cron: \"* * * * *\", callback: async () => {} };`,\n      \"utf8\",\n    );\n    await writeFile(\n      join(workspaceRoot, \"invalid.ts\"),\n      `export const notDefault = 123;`,\n      \"utf8\",\n    );\n\n    expect(getAllJobs(workspaceRoot)).rejects.toThrow(\n      \"is missing a default cron export\",\n    );\n  });\n\n  it(\"ignores test, spec, and declaration files during runtime discovery\", async () => {\n    const workspaceRoot = await createTempWorkspace();\n\n    await writeFile(\n      join(workspaceRoot, \"valid.ts\"),\n      `export default { name: \"valid-job\", cron: \"* * * * *\", callback: async () => {} };`,\n      \"utf8\",\n    );\n    await writeFile(\n      join(workspaceRoot, \"reconcile-subscriptions.test.ts\"),\n      `import { describe } from \"vitest\"; describe(\"ignored\", () => {});`,\n      \"utf8\",\n    );\n    await writeFile(\n      join(workspaceRoot, \"reconcile-subscriptions.spec.ts\"),\n      `throw new Error(\"should not import spec files\");`,\n      \"utf8\",\n    );\n    await writeFile(\n      join(workspaceRoot, \"types.d.ts\"),\n      `declare const value: string;`,\n      \"utf8\",\n    );\n\n    const jobs = await getAllJobs(workspaceRoot);\n    const names = jobs.map((job) => job.name).toSorted();\n\n    expect(names).toEqual([\"valid-job\"]);\n  });\n});\n"
  },
  {
    "path": "services/cron/tests/utils/source-plan-selection.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { filterSourcesByPlan, filterUserIdsByPlan } from \"../../src/utils/source-plan-selection\";\n\ntype Plan = \"free\" | \"pro\";\n\ninterface SourceRecord {\n  id: string;\n  userId: string;\n  calendarType: string;\n}\n\ndescribe(\"filterSourcesByPlan\", () => {\n  it(\"filters sources by target plan and preserves source order\", async () => {\n    const lookupCalls: string[] = [];\n\n    const sources: SourceRecord[] = [\n      { calendarType: \"ical\", id: \"s-1\", userId: \"u-pro\" },\n      { calendarType: \"ical\", id: \"s-2\", userId: \"u-free\" },\n      { calendarType: \"google\", id: \"s-3\", userId: \"u-pro\" },\n      { calendarType: \"ical\", id: \"s-4\", userId: \"u-other-pro\" },\n    ];\n\n    const filtered = await filterSourcesByPlan(sources, \"pro\", (userId) => {\n      lookupCalls.push(userId);\n      const planByUser: Record<string, Plan> = {\n        \"u-free\": \"free\",\n        \"u-other-pro\": \"pro\",\n        \"u-pro\": \"pro\",\n      };\n\n      const plan = planByUser[userId];\n      if (!plan) {\n        throw new Error(`Missing test plan for ${userId}`);\n      }\n\n      return Promise.resolve(plan);\n    });\n\n    expect(filtered.map((source) => source.id)).toEqual([\"s-1\", \"s-3\", \"s-4\"]);\n    expect(lookupCalls).toEqual([\"u-pro\", \"u-free\", \"u-other-pro\"]);\n  });\n\n  it(\"propagates lookup failures\", () => {\n    expect(\n      filterSourcesByPlan(\n        [{ calendarType: \"ical\", id: \"s-1\", userId: \"u-1\" }],\n        \"pro\",\n        () => Promise.reject(new Error(\"plan service unavailable\")),\n      ),\n    ).rejects.toThrow(\"plan service unavailable\");\n  });\n});\n\ndescribe(\"filterUserIdsByPlan\", () => {\n  it(\"deduplicates user IDs before plan lookups\", async () => {\n    const lookupCalls: string[] = [];\n\n    const userIds = [\"u-pro\", \"u-free\", \"u-pro\", \"u-other-pro\", \"u-other-pro\"];\n\n    const filteredUserIds = await filterUserIdsByPlan(userIds, \"pro\", (userId) => {\n      lookupCalls.push(userId);\n      const planByUser: Record<string, Plan> = {\n        \"u-free\": \"free\",\n        \"u-other-pro\": \"pro\",\n        \"u-pro\": \"pro\",\n      };\n\n      const plan = planByUser[userId];\n      if (!plan) {\n        throw new Error(`Missing test plan for ${userId}`);\n      }\n\n      return Promise.resolve(plan);\n    });\n\n    expect(filteredUserIds).toEqual([\"u-pro\", \"u-other-pro\"]);\n    expect(lookupCalls).toEqual([\"u-pro\", \"u-free\", \"u-other-pro\"]);\n  });\n});\n"
  },
  {
    "path": "services/cron/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "services/cron/turbo.json",
    "content": "{\n  \"$schema\": \"https://v2-9-0.turborepo.dev/schema.json\",\n  \"extends\": [\"//\"],\n  \"tasks\": {\n    \"dev\": {\n      \"passThroughEnv\": [\n        \"LOG_LEVEL\",\n        \"DATABASE_URL\",\n        \"REDIS_URL\",\n        \"COMMERCIAL_MODE\",\n        \"POLAR_ACCESS_TOKEN\",\n        \"POLAR_MODE\",\n        \"GOOGLE_CLIENT_ID\",\n        \"GOOGLE_CLIENT_SECRET\",\n        \"MICROSOFT_CLIENT_ID\",\n        \"MICROSOFT_CLIENT_SECRET\",\n        \"ENCRYPTION_KEY\",\n        \"BLOCK_PRIVATE_RESOLUTION\",\n        \"PRIVATE_RESOLUTION_WHITELIST\"\n      ]\n    },\n    \"start\": {\n      \"passThroughEnv\": [\n        \"LOG_LEVEL\",\n        \"DATABASE_URL\",\n        \"REDIS_URL\",\n        \"COMMERCIAL_MODE\",\n        \"POLAR_ACCESS_TOKEN\",\n        \"POLAR_MODE\",\n        \"GOOGLE_CLIENT_ID\",\n        \"GOOGLE_CLIENT_SECRET\",\n        \"MICROSOFT_CLIENT_ID\",\n        \"MICROSOFT_CLIENT_SECRET\",\n        \"ENCRYPTION_KEY\",\n        \"BLOCK_PRIVATE_RESOLUTION\",\n        \"PRIVATE_RESOLUTION_WHITELIST\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "services/cron/vitest.config.ts",
    "content": "import { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      \"@\": resolve(fileURLToPath(import.meta.url), \"../src\"),\n    },\n  },\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "services/mcp/Dockerfile",
    "content": "FROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/mcp --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd services/mcp build\n\nFROM base AS runtime\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\nCOPY --from=build /app/services/mcp/dist ./services/mcp/dist\nCOPY --from=prune /app/out/full/packages/otelemetry ./packages/otelemetry\nRUN bun link --cwd packages/otelemetry\nCOPY --from=source /app/services/mcp/entrypoint.sh ./services/mcp/entrypoint.sh\nRUN chmod +x ./services/mcp/entrypoint.sh\n\nENV ENV=production\nEXPOSE 3002\n\nENTRYPOINT [\"./services/mcp/entrypoint.sh\"]\n"
  },
  {
    "path": "services/mcp/entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\nexec bun services/mcp/dist/index.js 2>&1 | keeper-otelemetry\n"
  },
  {
    "path": "services/mcp/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/mcp\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"scripts\": {\n    \"dev\": \"bun run --hot src/index.ts\",\n    \"build\": \"bun scripts/build.ts\",\n    \"start\": \"bun run dist/index.js\",\n    \"types\": \"tsc --noEmit\",\n    \"test\": \"vitest run\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/auth\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"@keeper.sh/otelemetry\": \"workspace:*\",\n    \"@modelcontextprotocol/sdk\": \"1.27.1\",\n    \"arkenv\": \"^0.11.0\",\n    \"entrykit\": \"^0.1.3\",\n    \"widelogger\": \"^0.7.0\",\n    \"zod\": \"^4.3.5\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\",\n    \"vitest\": \"^4.1.4\"\n  }\n}\n"
  },
  {
    "path": "services/mcp/scripts/build.ts",
    "content": "import { Glob, build } from \"bun\";\n\nconst entrypoints = [\n  ...new Glob(\"src/routes/**/*.ts\")\n    .scanSync()\n    .filter((filePath) => !/\\.(test|spec)\\.ts$/.test(filePath)),\n  ...new Glob(\"src/index.ts\").scanSync(),\n];\n\nawait build({\n  entrypoints,\n  outdir: \"./dist\",\n  root: \"src\",\n  splitting: true,\n  target: \"bun\",\n  external: [\"pino-opentelemetry-transport\"],\n});\n"
  },
  {
    "path": "services/mcp/src/context.ts",
    "content": "import { isKeeperMcpEnabledAuth, createAuth } from \"@keeper.sh/auth\";\nimport { createDatabase } from \"@keeper.sh/database\";\nimport env from \"./env\";\nimport { createKeeperMcpHandler } from \"./mcp-handler\";\nimport { createKeeperMcpToolset } from \"./toolset\";\nimport { withWideEvent } from \"./utils/middleware\";\n\nconst database = await createDatabase(env.DATABASE_URL);\n\nconst { auth: baseAuth } = createAuth({\n  database,\n  secret: env.BETTER_AUTH_SECRET,\n  baseUrl: env.BETTER_AUTH_URL,\n  commercialMode: env.COMMERCIAL_MODE ?? false,\n  mcpResourceUrl: env.MCP_PUBLIC_URL,\n});\n\nif (!isKeeperMcpEnabledAuth(baseAuth)) {\n  throw new Error(\"MCP auth is not configured — ensure mcpResourceUrl is set\");\n}\n\nconst auth = baseAuth;\nconst keeperMcpToolset = createKeeperMcpToolset();\nconst handleMcpRequest = createKeeperMcpHandler({\n  auth,\n  mcpPublicUrl: env.MCP_PUBLIC_URL,\n  apiBaseUrl: env.BETTER_AUTH_URL,\n  toolset: keeperMcpToolset,\n});\n\nexport { auth, database, env, handleMcpRequest, keeperMcpToolset, withWideEvent };\n"
  },
  {
    "path": "services/mcp/src/env.ts",
    "content": "import arkenv from \"arkenv\";\n\nconst schema = {\n  BETTER_AUTH_SECRET: \"string\",\n  BETTER_AUTH_URL: \"string.url\",\n  COMMERCIAL_MODE: \"boolean?\",\n  DATABASE_URL: \"string.url\",\n  MCP_PORT: \"number\",\n  MCP_PUBLIC_URL: \"string.url\",\n} as const;\n\nconst loadMcpEnv = () => arkenv(schema);\n\ntype McpEnv = ReturnType<typeof loadMcpEnv>;\n\nconst tryLoadMcpEnv = (): McpEnv | null => {\n  try {\n    return loadMcpEnv();\n  } catch {\n    return null;\n  }\n};\n\nexport { schema, tryLoadMcpEnv };\nexport type { McpEnv };\nexport default loadMcpEnv();\n"
  },
  {
    "path": "services/mcp/src/index.ts",
    "content": "import { entry } from \"entrykit\";\nimport { join } from \"node:path\";\nimport { tryLoadMcpEnv } from \"./env\";\nimport { isHttpMethod, isRouteModule } from \"./utils/route-handler\";\nimport { destroy } from \"./utils/logging\";\n\nconst env = tryLoadMcpEnv();\n\nif (!env) {\n  process.exit(0);\n}\n\nconst HTTP_NOT_FOUND = 404;\nconst HTTP_METHOD_NOT_ALLOWED = 405;\nconst HTTP_INTERNAL_SERVER_ERROR = 500;\n\nconst router = new Bun.FileSystemRouter({\n  dir: join(import.meta.dirname, \"routes\"),\n  style: \"nextjs\",\n});\n\nawait entry({\n  main: () => {\n    const server = Bun.serve({\n      port: env.MCP_PORT,\n      fetch: async (request) => {\n        const match = router.match(request);\n\n        if (!match) {\n          return new Response(\"Not found\", { status: HTTP_NOT_FOUND });\n        }\n\n        const module: unknown = await import(match.filePath);\n\n        if (!isRouteModule(module)) {\n          return new Response(\"Internal server error\", {\n            status: HTTP_INTERNAL_SERVER_ERROR,\n          });\n        }\n\n        if (!isHttpMethod(request.method)) {\n          return new Response(\"Method not allowed\", { status: HTTP_METHOD_NOT_ALLOWED });\n        }\n\n        const handler = module[request.method];\n\n        if (!handler) {\n          return new Response(\"Method not allowed\", { status: HTTP_METHOD_NOT_ALLOWED });\n        }\n\n        return handler(request);\n      },\n    });\n\n    return async () => {\n      server.stop();\n      await destroy();\n    };\n  },\n  name: \"mcp\",\n});\n"
  },
  {
    "path": "services/mcp/src/mcp-handler.ts",
    "content": "import { KEEPER_API_READ_SCOPE } from \"@keeper.sh/auth\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { WebStandardStreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js\";\nimport type { KeeperMcpToolDefinition, KeeperMcpToolset, KeeperToolContext } from \"./toolset\";\nimport { widelog } from \"./utils/logging\";\n\nconst JSON_RPC_VERSION = \"2.0\";\nconst JSON_RPC_ERROR_UNAUTHORIZED = -32_001;\nconst JSON_RPC_ERROR_FORBIDDEN = -32_003;\nconst JSON_RPC_ERROR_METHOD_NOT_ALLOWED = -32_005;\nconst ALLOWED_HTTP_METHODS = new Set([\"DELETE\", \"GET\", \"POST\"]);\nconst ALLOW_HEADER_VALUE = \"GET, POST, DELETE, OPTIONS\";\ntype ResponseHeaders = Headers | Record<string, string>;\n\ninterface KeeperMcpAuthSession {\n  scopes: string;\n  userId: string | null;\n}\n\ninterface AuthenticatedKeeperMcpSession {\n  scopes: string;\n  userId: string;\n  bearerToken: string;\n}\n\ninterface KeeperMcpAuth {\n  api: {\n    getMcpSession: (input: { headers: Headers }) => Promise<KeeperMcpAuthSession | null>;\n  };\n}\n\ntype McpSessionResolution =\n  | {\n    authenticated: true;\n    session: AuthenticatedKeeperMcpSession;\n  }\n  | {\n    authenticated: false;\n  };\n\ninterface CreateKeeperMcpHandlerOptions {\n  auth: KeeperMcpAuth;\n  mcpPublicUrl: string;\n  apiBaseUrl: string;\n  toolset: KeeperMcpToolset;\n  serverInfo?: {\n    name: string;\n    version: string;\n  };\n  enableJsonResponse?: boolean;\n}\n\nconst hasScope = (scopes: string, requiredScope: string): boolean =>\n  scopes\n    .split(/\\s+/)\n    .filter((scope) => scope.length > 0)\n    .includes(requiredScope);\n\nconst isAuthValidationError = (error: unknown): boolean =>\n  error instanceof Error && error.name === \"APIError\";\n\nconst extractBearerToken = (headers: Headers): string | null => {\n  const authHeader = headers.get(\"authorization\");\n  if (!authHeader) {\n    return null;\n  }\n\n  if (!authHeader.startsWith(\"Bearer \")) {\n    return null;\n  }\n\n  return authHeader.slice(\"Bearer \".length);\n};\n\nconst resolveMcpSession = async (\n  auth: KeeperMcpAuth,\n  headers: Headers,\n): Promise<McpSessionResolution> => {\n  try {\n    const session = await auth.api.getMcpSession({ headers });\n\n    if (!session?.userId) {\n      return { authenticated: false };\n    }\n\n    const bearerToken = extractBearerToken(headers);\n\n    if (!bearerToken) {\n      return { authenticated: false };\n    }\n\n    const authenticatedSession: AuthenticatedKeeperMcpSession = {\n      scopes: session.scopes,\n      userId: session.userId,\n      bearerToken,\n    };\n\n    return {\n      authenticated: true,\n      session: authenticatedSession,\n    };\n  } catch (error) {\n    if (isAuthValidationError(error)) {\n      return { authenticated: false };\n    }\n\n    throw error;\n  }\n};\n\nconst createJsonRpcErrorResponse = (\n  status: number,\n  code: number,\n  message: string,\n  headers?: ResponseHeaders,\n  details?: Record<string, unknown>,\n): Response =>\n  Response.json(\n    {\n      jsonrpc: JSON_RPC_VERSION,\n      error: {\n        code,\n        message,\n        ...(details && details),\n      },\n      id: null,\n    },\n    {\n      status,\n      headers,\n    },\n  );\n\nconst stringifyToolResult = (result: unknown): string => JSON.stringify(result, null, 2);\n\nconst createToolResponse = (result: unknown) => ({\n  content: [\n    {\n      type: \"text\" as const,\n      text: stringifyToolResult(result),\n    },\n  ],\n});\n\nconst registerToolset = (\n  server: McpServer,\n  toolset: Record<string, KeeperMcpToolDefinition<unknown>>,\n  toolContext: KeeperToolContext,\n  userId: string,\n): void => {\n  for (const [name, tool] of Object.entries(toolset)) {\n    server.registerTool(\n      name,\n      {\n        description: tool.description,\n        inputSchema: tool.inputSchema,\n        title: tool.title,\n      },\n      async (input: Record<string, unknown>) => {\n        widelog.set(\"mcp.tool\", name);\n        widelog.set(\"user.id\", userId);\n        const result = await tool.execute(toolContext, input);\n        return createToolResponse(result);\n      },\n    );\n  }\n};\n\nconst createAuthenticatedMcpServer = (\n  toolset: KeeperMcpToolset,\n  toolContext: KeeperToolContext,\n  userId: string,\n  serverInfo: { name: string; version: string },\n): McpServer => {\n  const server = new McpServer(serverInfo, {\n    capabilities: {\n      tools: {},\n    },\n  });\n\n  const tools: Record<string, KeeperMcpToolDefinition<unknown>> = { ...toolset };\n  registerToolset(server, tools, toolContext, userId);\n\n  return server;\n};\n\nconst createKeeperMcpHandler = ({\n  auth,\n  mcpPublicUrl,\n  apiBaseUrl,\n  toolset,\n  serverInfo = {\n    name: \"keeper\",\n    version: \"1.0.0\",\n  },\n  enableJsonResponse = true,\n}: CreateKeeperMcpHandlerOptions) => {\n  const protectedResourceMetadataUrl = new URL(\n    \"/.well-known/oauth-protected-resource\",\n    mcpPublicUrl,\n  ).toString();\n\n  return async (request: Request): Promise<Response> => {\n    if (!ALLOWED_HTTP_METHODS.has(request.method)) {\n      return createJsonRpcErrorResponse(\n        405,\n        JSON_RPC_ERROR_METHOD_NOT_ALLOWED,\n        \"Method not allowed\",\n        {\n          Allow: ALLOW_HEADER_VALUE,\n        },\n      );\n    }\n\n    const wwwAuthenticateHeader = `Bearer resource_metadata=\"${protectedResourceMetadataUrl}\"`;\n\n    const unauthorizedResponse = () =>\n      createJsonRpcErrorResponse(\n        401,\n        JSON_RPC_ERROR_UNAUTHORIZED,\n        \"Unauthorized: Authentication required\",\n        {\n          \"Access-Control-Expose-Headers\": \"WWW-Authenticate\",\n          \"WWW-Authenticate\": wwwAuthenticateHeader,\n          Allow: ALLOW_HEADER_VALUE,\n        },\n        {\n          \"www-authenticate\": wwwAuthenticateHeader,\n        },\n      );\n\n    const sessionResult = await resolveMcpSession(auth, request.headers);\n\n    if (!sessionResult.authenticated) {\n      return unauthorizedResponse();\n    }\n\n    const { userId, scopes, bearerToken } = sessionResult.session;\n\n    if (!hasScope(scopes, KEEPER_API_READ_SCOPE)) {\n      const insufficientScopeHeader =\n        `${wwwAuthenticateHeader}, error=\"insufficient_scope\", scope=\"${KEEPER_API_READ_SCOPE}\"`;\n\n      return createJsonRpcErrorResponse(\n        403,\n        JSON_RPC_ERROR_FORBIDDEN,\n        \"Forbidden: keeper.read scope is required\",\n        {\n          \"Access-Control-Expose-Headers\": \"WWW-Authenticate\",\n          \"WWW-Authenticate\": insufficientScopeHeader,\n          Allow: ALLOW_HEADER_VALUE,\n        },\n        {\n          \"www-authenticate\": insufficientScopeHeader,\n        },\n      );\n    }\n\n    const toolContext: KeeperToolContext = {\n      bearerToken,\n      apiBaseUrl,\n    };\n\n    const server = createAuthenticatedMcpServer(toolset, toolContext, userId, serverInfo);\n    const transport = new WebStandardStreamableHTTPServerTransport({\n      enableJsonResponse,\n    });\n\n    try {\n      await server.connect(transport);\n      return await transport.handleRequest(request);\n    } finally {\n      await transport.close();\n      await server.close();\n    }\n  };\n};\n\nexport { createKeeperMcpHandler };\nexport type { CreateKeeperMcpHandlerOptions, KeeperMcpAuth, KeeperMcpAuthSession };\n"
  },
  {
    "path": "services/mcp/src/routes/health.ts",
    "content": "import { withWideEvent } from \"@/context\";\n\nconst GET = withWideEvent(() =>\n  Response.json({ service: \"keeper-mcp\", status: \"ok\" }),\n);\n\nexport { GET };\n"
  },
  {
    "path": "services/mcp/src/routes/mcp.ts",
    "content": "import { handleMcpRequest, withWideEvent } from \"@/context\";\n\nconst wrappedHandler = withWideEvent((request: Request) => handleMcpRequest(request));\n\nconst GET = (request: Request) => wrappedHandler(request);\nconst POST = (request: Request) => wrappedHandler(request);\nconst DELETE = (request: Request) => wrappedHandler(request);\n\nexport { DELETE, GET, POST };\n"
  },
  {
    "path": "services/mcp/src/toolset.ts",
    "content": "import { z } from \"zod\";\n\nconst keeperEventSchema = z.object({\n  id: z.string(),\n  startTime: z.string(),\n  endTime: z.string(),\n  title: z.string().nullable(),\n  description: z.string().nullable(),\n  location: z.string().nullable(),\n  calendarId: z.string(),\n  calendarName: z.string(),\n  calendarProvider: z.string(),\n  calendarUrl: z.string().nullable(),\n});\n\ntype KeeperEvent = z.infer<typeof keeperEventSchema>;\n\ninterface KeeperToolContext {\n  bearerToken: string;\n  apiBaseUrl: string;\n}\n\ninterface KeeperMcpToolDefinition<TResult> {\n  description: string;\n  title: string;\n  inputSchema?: Record<string, z.ZodTypeAny>;\n  execute: (context: KeeperToolContext, input?: Record<string, unknown>) => Promise<TResult>;\n}\n\nconst keeperCalendarSchema = z.object({\n  id: z.string(),\n  name: z.string(),\n  provider: z.string(),\n  account: z.string(),\n});\ntype KeeperCalendar = z.infer<typeof keeperCalendarSchema>;\n\ninterface KeeperMcpToolset {\n  list_calendars: KeeperMcpToolDefinition<KeeperCalendar[]>;\n  get_event_count: KeeperMcpToolDefinition<{ count: number }>;\n  get_events: KeeperMcpToolDefinition<KeeperEvent[]>;\n  get_event: KeeperMcpToolDefinition<KeeperEvent | { error: string }>;\n  create_event: KeeperMcpToolDefinition<KeeperEvent | { error: string }>;\n  update_event: KeeperMcpToolDefinition<KeeperEvent | { error: string }>;\n  delete_event: KeeperMcpToolDefinition<{ deleted: boolean } | { error: string }>;\n  get_pending_invites: KeeperMcpToolDefinition<unknown[]>;\n  rsvp_event: KeeperMcpToolDefinition<{ rsvpStatus: string } | { error: string }>;\n  list_accounts: KeeperMcpToolDefinition<unknown[]>;\n  get_ical_feed: KeeperMcpToolDefinition<{ url: string }>;\n}\n\nconst isErrorResponse = (value: unknown): value is { error: string } =>\n  typeof value === \"object\" && value !== null && \"error\" in value && typeof value.error === \"string\";\n\nconst apiFetchRaw = async (\n  context: KeeperToolContext,\n  path: string,\n  options?: RequestInit,\n): Promise<unknown> => {\n  const url = `${context.apiBaseUrl}${path}`;\n  const response = await fetch(url, {\n    ...options,\n    headers: {\n      \"Authorization\": `Bearer ${context.bearerToken}`,\n      \"Content-Type\": \"application/json\",\n      ...options?.headers,\n    },\n  });\n\n  if (!response.ok) {\n    const body: unknown = await response.json().catch(() => null);\n    if (isErrorResponse(body)) {\n      throw new Error(body.error);\n    }\n    throw new Error(response.statusText);\n  }\n\n  if (response.status === 204) {\n    return {};\n  }\n\n  return response.json();\n};\n\nconst apiFetch = async <TResult>(\n  context: KeeperToolContext,\n  path: string,\n  schema: z.ZodType<TResult>,\n  options?: RequestInit,\n): Promise<TResult> => {\n  const raw = await apiFetchRaw(context, path, options);\n  return schema.parse(raw);\n};\n\nconst eventRangeSchema = {\n  from: z.string().datetime(),\n  to: z.string().datetime(),\n  timezone: z.string().describe(\"IANA timezone identifier (e.g. America/New_York)\"),\n} satisfies Record<string, z.ZodTypeAny>;\n\nconst isEventRangeInput = (\n  input: Record<string, unknown>,\n): input is Record<string, unknown> & { from: string; to: string; timezone: string } =>\n  typeof input.from === \"string\" && typeof input.to === \"string\" && typeof input.timezone === \"string\";\n\nconst normalizeTimezoneOffset = (raw: string): string => {\n  if (raw === \"\") {\n    return \"+00:00\";\n  }\n  if (raw.includes(\":\")) {\n    return raw.padStart(6, \"+0\");\n  }\n  return `${raw.padStart(3, \"+0\")}:00`;\n};\n\nconst toLocalizedTime = (utcIso: string, timeZone: string): string => {\n  const date = new Date(utcIso);\n  const parts = new Intl.DateTimeFormat(\"en-US\", {\n    timeZone,\n    year: \"numeric\",\n    month: \"2-digit\",\n    day: \"2-digit\",\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    second: \"2-digit\",\n    hour12: false,\n    timeZoneName: \"shortOffset\",\n  }).formatToParts(date);\n\n  const getPartValue = (type: Intl.DateTimeFormatPartTypes): string => {\n    const part = parts.find(({ type: expectedType }) => expectedType === type);\n    if (!part) {\n      return \"\";\n    }\n    return part.value;\n  };\n\n  const offset = getPartValue(\"timeZoneName\").replace(\"GMT\", \"\");\n  const normalizedOffset = normalizeTimezoneOffset(offset);\n\n  const year = getPartValue(\"year\");\n  const month = getPartValue(\"month\");\n  const day = getPartValue(\"day\");\n  const hour = getPartValue(\"hour\");\n  const minute = getPartValue(\"minute\");\n  const second = getPartValue(\"second\");\n\n  return `${year}-${month}-${day}T${hour}:${minute}:${second}${normalizedOffset}`;\n};\n\nconst localizeEvent = (event: KeeperEvent, timeZone: string) => ({\n  ...event,\n  startTime: toLocalizedTime(event.startTime, timeZone),\n  endTime: toLocalizedTime(event.endTime, timeZone),\n});\n\nconst createKeeperMcpToolset = (): KeeperMcpToolset => ({\n  list_calendars: {\n    title: \"List calendars\",\n    description:\n      \"List all calendars the user has connected to Keeper, including provider name and account.\",\n    execute: (context) => apiFetch(context, \"/api/v1/calendars\", z.array(keeperCalendarSchema)),\n  },\n  get_event_count: {\n    title: \"Get event count\",\n    description:\n      \"Get the number of calendar events. Optionally provide a date range with 'from' and 'to' ISO 8601 datetimes.\",\n    inputSchema: {\n      from: z.string().datetime().optional().describe(\"Start of date range (ISO 8601)\"),\n      to: z.string().datetime().optional().describe(\"End of date range (ISO 8601)\"),\n    },\n    execute: (context, input) => {\n      const params = new URLSearchParams({ count: \"true\" });\n      if (input?.from && typeof input.from === \"string\") {\n        params.set(\"from\", input.from);\n      }\n      if (input?.to && typeof input.to === \"string\") {\n        params.set(\"to\", input.to);\n      }\n      return apiFetch(context, `/api/v1/events?${params}`, z.object({ count: z.number() }));\n    },\n  },\n  get_events: {\n    title: \"Get events\",\n    description:\n      \"Get calendar events within a date range. Provide ISO 8601 datetimes for 'from' and 'to', and an IANA timezone (e.g. America/New_York) to localize event times.\",\n    inputSchema: eventRangeSchema,\n    execute: async (context, input) => {\n      if (!input || !isEventRangeInput(input)) {\n        throw new Error(\"'from', 'to', and 'timezone' are required\");\n      }\n      const params = new URLSearchParams({ from: input.from, to: input.to });\n      const events = await apiFetch(context, `/api/v1/events?${params}`, z.array(keeperEventSchema));\n      return events.map((event) => localizeEvent(event, input.timezone));\n    },\n  },\n  get_event: {\n    title: \"Get event\",\n    description: \"Get a single calendar event by its ID.\",\n    inputSchema: {\n      eventId: z.string().uuid().describe(\"The event ID\"),\n    },\n    execute: (context, input) => {\n      if (!input?.eventId || typeof input.eventId !== \"string\") {\n        throw new Error(\"'eventId' is required\");\n      }\n      return apiFetch(context, `/api/v1/events/${input.eventId}`, keeperEventSchema);\n    },\n  },\n  create_event: {\n    title: \"Create event\",\n    description:\n      \"Create a new calendar event on a connected calendar. Requires calendarId, title, startTime, and endTime.\",\n    inputSchema: {\n      calendarId: z.string().uuid().describe(\"The calendar to create the event on\"),\n      title: z.string().describe(\"Event title\"),\n      description: z.string().optional().describe(\"Event description\"),\n      location: z.string().optional().describe(\"Event location\"),\n      startTime: z.string().datetime().describe(\"Start time in ISO 8601 format\"),\n      endTime: z.string().datetime().describe(\"End time in ISO 8601 format\"),\n      isAllDay: z.boolean().optional().describe(\"Whether the event is all-day\"),\n      availability: z.enum([\"busy\", \"free\"]).optional().describe(\"Availability status\"),\n    },\n    execute: (context, input) => {\n      if (!input?.calendarId || !input?.title || !input?.startTime || !input?.endTime) {\n        throw new Error(\"'calendarId', 'title', 'startTime', and 'endTime' are required\");\n      }\n      return apiFetch(context, \"/api/v1/events\", keeperEventSchema, {\n        method: \"POST\",\n        body: JSON.stringify(input),\n      });\n    },\n  },\n  update_event: {\n    title: \"Update event\",\n    description:\n      \"Update an existing calendar event. Only provided fields are updated.\",\n    inputSchema: {\n      eventId: z.string().uuid().describe(\"The event ID to update\"),\n      title: z.string().optional().describe(\"Updated event title\"),\n      description: z.string().optional().describe(\"Updated event description\"),\n      location: z.string().optional().describe(\"Updated event location\"),\n      startTime: z.string().datetime().optional().describe(\"Updated start time\"),\n      endTime: z.string().datetime().optional().describe(\"Updated end time\"),\n      isAllDay: z.boolean().optional().describe(\"Whether the event is all-day\"),\n      availability: z.enum([\"busy\", \"free\"]).optional().describe(\"Updated availability\"),\n    },\n    execute: (context, input) => {\n      if (!input?.eventId || typeof input.eventId !== \"string\") {\n        throw new Error(\"'eventId' is required\");\n      }\n      const { eventId, ...updates } = input;\n      return apiFetch(context, `/api/v1/events/${eventId}`, keeperEventSchema, {\n        method: \"PATCH\",\n        body: JSON.stringify(updates),\n      });\n    },\n  },\n  delete_event: {\n    title: \"Delete event\",\n    description: \"Delete a calendar event by its ID.\",\n    inputSchema: {\n      eventId: z.string().uuid().describe(\"The event ID to delete\"),\n    },\n    execute: async (context, input) => {\n      if (!input?.eventId || typeof input.eventId !== \"string\") {\n        throw new Error(\"'eventId' is required\");\n      }\n      await apiFetchRaw(context, `/api/v1/events/${input.eventId}`, {\n        method: \"DELETE\",\n      });\n      return { deleted: true };\n    },\n  },\n  rsvp_event: {\n    title: \"Respond to event invite\",\n    description:\n      \"Respond to a calendar event invitation. Set rsvpStatus to 'accepted', 'declined', or 'tentative'.\",\n    inputSchema: {\n      eventId: z.string().uuid().describe(\"The event ID to respond to\"),\n      rsvpStatus: z.enum([\"accepted\", \"declined\", \"tentative\"]).describe(\"The RSVP response\"),\n    },\n    execute: (context, input) => {\n      if (!input?.eventId || typeof input.eventId !== \"string\") {\n        throw new Error(\"'eventId' is required\");\n      }\n      if (!input?.rsvpStatus || typeof input.rsvpStatus !== \"string\") {\n        throw new Error(\"'rsvpStatus' is required\");\n      }\n      return apiFetch(context, `/api/v1/events/${input.eventId}`, z.object({ rsvpStatus: z.string() }), {\n        method: \"PATCH\",\n        body: JSON.stringify({ rsvpStatus: input.rsvpStatus }),\n      });\n    },\n  },\n  get_pending_invites: {\n    title: \"Get pending invites\",\n    description:\n      \"Get calendar event invitations that have not been responded to within a date range for a specific calendar.\",\n    inputSchema: {\n      calendarId: z.string().uuid().describe(\"The calendar ID to check for pending invites\"),\n      ...eventRangeSchema,\n    },\n    execute: (context, input) => {\n      if (!input?.calendarId || typeof input.calendarId !== \"string\") {\n        throw new Error(\"'calendarId' is required\");\n      }\n      if (!input || !isEventRangeInput(input)) {\n        throw new Error(\"'from', 'to', and 'timezone' are required\");\n      }\n      const params = new URLSearchParams({ from: input.from, to: input.to });\n      return apiFetch(context, `/api/v1/calendars/${input.calendarId}/invites?${params}`, z.array(z.unknown()));\n    },\n  },\n  list_accounts: {\n    title: \"List accounts\",\n    description: \"List all connected calendar accounts with provider information.\",\n    execute: (context) => apiFetch(context, \"/api/v1/accounts\", z.array(z.unknown())),\n  },\n  get_ical_feed: {\n    title: \"Get iCal feed URL\",\n    description: \"Get the user's iCal feed URL for subscribing in other calendar apps.\",\n    execute: (context) => apiFetch(context, \"/api/v1/ical\", z.object({ url: z.string() })),\n  },\n});\n\nexport { createKeeperMcpToolset };\nexport type { KeeperCalendar, KeeperMcpToolDefinition, KeeperMcpToolset, KeeperToolContext };\n"
  },
  {
    "path": "services/mcp/src/utils/logging.ts",
    "content": "import { widelogger, widelog } from \"widelogger\";\n\nconst environment = process.env.ENV ?? \"production\";\n\nconst { context, destroy } = widelogger({\n  service: \"keeper-mcp\",\n  defaultEventName: \"wide_event\",\n  commitHash: process.env.COMMIT_SHA,\n  environment,\n  version: process.env.npm_package_version,\n});\n\nexport { context, destroy, widelog };\n"
  },
  {
    "path": "services/mcp/src/utils/middleware.ts",
    "content": "import { context, widelog } from \"./logging\";\n\ntype RouteHandler = (request: Request) => Response | Promise<Response>;\n\nconst resolveOutcome = (statusCode: number): \"success\" | \"error\" => {\n  if (statusCode >= 400) {\n    return \"error\";\n  }\n  return \"success\";\n};\n\nconst withWideEvent =\n  (handler: (request: Request) => Response | Promise<Response>): RouteHandler =>\n  (request) =>\n    context(async () => {\n      const url = new URL(request.url);\n      const requestId = request.headers.get(\"x-request-id\") ?? crypto.randomUUID();\n\n      widelog.set(\"operation.name\", `${request.method} ${url.pathname}`);\n      widelog.set(\"operation.type\", \"http\");\n      widelog.set(\"request.id\", requestId);\n      widelog.set(\"http.method\", request.method);\n      widelog.set(\"http.path\", url.pathname);\n\n      const userAgent = request.headers.get(\"user-agent\");\n      if (userAgent) {\n        widelog.set(\"http.user_agent\", userAgent);\n      }\n\n      try {\n        return await widelog.time.measure(\"duration_ms\", async () => {\n          const response = await handler(request);\n          widelog.set(\"status_code\", response.status);\n          widelog.set(\"outcome\", resolveOutcome(response.status));\n          return response;\n        });\n      } catch (error) {\n        widelog.set(\"status_code\", 500);\n        widelog.set(\"outcome\", \"error\");\n        widelog.errorFields(error, { slug: \"unclassified\" });\n        throw error;\n      } finally {\n        widelog.flush();\n      }\n    });\n\nexport { withWideEvent };\nexport type { RouteHandler };\n"
  },
  {
    "path": "services/mcp/src/utils/route-handler.ts",
    "content": "type RouteHandler = (request: Request) => Response | Promise<Response>;\n\ntype HttpMethod = \"GET\" | \"POST\" | \"DELETE\";\n\ninterface RouteModule {\n  GET?: RouteHandler;\n  POST?: RouteHandler;\n  DELETE?: RouteHandler;\n}\n\nconst HTTP_METHODS: HttpMethod[] = [\"GET\", \"POST\", \"DELETE\"];\n\nconst isHttpMethod = (method: string): method is HttpMethod =>\n  HTTP_METHODS.some((httpMethod) => httpMethod === method);\n\nconst isRouteModule = (module: unknown): module is RouteModule => {\n  if (typeof module !== \"object\" || module === null) {\n    return false;\n  }\n\n  const record: Record<string, unknown> = { ...module };\n\n  return HTTP_METHODS.some(\n    (method) => typeof record[method] === \"function\",\n  );\n};\n\nexport { isHttpMethod, isRouteModule };\nexport type { RouteHandler, RouteModule };\n"
  },
  {
    "path": "services/mcp/tests/mcp-handler.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { createKeeperMcpHandler } from \"../src/mcp-handler\";\nimport { createKeeperMcpToolset } from \"../src/toolset\";\n\nconst toolset = createKeeperMcpToolset();\n\ndescribe(\"createKeeperMcpHandler\", () => {\n  it(\"returns protected-resource metadata when authentication is missing\", async () => {\n    const handler = createKeeperMcpHandler({\n      auth: {\n        api: {\n          getMcpSession: () => Promise.resolve(null),\n        },\n      },\n      mcpPublicUrl: \"https://mcp.keeper.sh\",\n      apiBaseUrl: \"https://keeper.sh\",\n      toolset,\n    });\n\n    const response = await handler(\n      new Request(\"https://mcp.keeper.sh/mcp\", {\n        body: JSON.stringify({\n          id: \"1\",\n          jsonrpc: \"2.0\",\n          method: \"tools/list\",\n        }),\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        method: \"POST\",\n      }),\n    );\n\n    expect(response.status).toBe(401);\n    expect(response.headers.get(\"WWW-Authenticate\")).toContain(\n      'resource_metadata=\"https://mcp.keeper.sh/.well-known/oauth-protected-resource\"',\n    );\n  });\n\n  it(\"supports unauthenticated GET with an OAuth challenge instead of 405\", async () => {\n    const handler = createKeeperMcpHandler({\n      auth: {\n        api: {\n          getMcpSession: () => Promise.resolve(null),\n        },\n      },\n      mcpPublicUrl: \"https://mcp.keeper.sh\",\n      apiBaseUrl: \"https://keeper.sh\",\n      toolset,\n    });\n\n    const response = await handler(\n      new Request(\"https://mcp.keeper.sh/mcp\", {\n        method: \"GET\",\n      }),\n    );\n\n    expect(response.status).toBe(401);\n    expect(response.headers.get(\"WWW-Authenticate\")).toContain(\n      'resource_metadata=\"https://mcp.keeper.sh/.well-known/oauth-protected-resource\"',\n    );\n  });\n\n  it(\"returns insufficient scope metadata when keeper.read is missing\", async () => {\n    const handler = createKeeperMcpHandler({\n      auth: {\n        api: {\n          getMcpSession: () => Promise.resolve({\n            scopes: \"openid profile\",\n            userId: \"user-123\",\n          }),\n        },\n      },\n      mcpPublicUrl: \"https://mcp.keeper.sh\",\n      apiBaseUrl: \"https://keeper.sh\",\n      toolset,\n    });\n\n    const response = await handler(\n      new Request(\"https://mcp.keeper.sh/mcp\", {\n        body: JSON.stringify({\n          id: \"1\",\n          jsonrpc: \"2.0\",\n          method: \"tools/list\",\n        }),\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Authorization\": \"Bearer test-token\",\n        },\n        method: \"POST\",\n      }),\n    );\n\n    expect(response.status).toBe(403);\n    expect(response.headers.get(\"WWW-Authenticate\")).toContain('error=\"insufficient_scope\"');\n    expect(response.headers.get(\"WWW-Authenticate\")).toContain('scope=\"keeper.read\"');\n  });\n\n  it(\"returns unauthorized challenge when token verification throws\", async () => {\n    const authValidationError = new Error(\"invalid token\");\n    authValidationError.name = \"APIError\";\n\n    const handler = createKeeperMcpHandler({\n      auth: {\n        api: {\n          getMcpSession: () => Promise.reject(authValidationError),\n        },\n      },\n      mcpPublicUrl: \"https://mcp.keeper.sh\",\n      apiBaseUrl: \"https://keeper.sh\",\n      toolset,\n    });\n\n    const response = await handler(\n      new Request(\"https://mcp.keeper.sh/mcp\", {\n        method: \"GET\",\n      }),\n    );\n\n    expect(response.status).toBe(401);\n    expect(response.headers.get(\"WWW-Authenticate\")).toContain(\n      'resource_metadata=\"https://mcp.keeper.sh/.well-known/oauth-protected-resource\"',\n    );\n  });\n\n  it(\"rethrows unexpected session errors\", async () => {\n    const handler = createKeeperMcpHandler({\n      auth: {\n        api: {\n          getMcpSession: () => Promise.reject(new Error(\"database unavailable\")),\n        },\n      },\n      mcpPublicUrl: \"https://mcp.keeper.sh\",\n      apiBaseUrl: \"https://keeper.sh\",\n      toolset,\n    });\n\n    await expect(\n      handler(\n        new Request(\"https://mcp.keeper.sh/mcp\", {\n          method: \"GET\",\n        }),\n      ),\n    ).rejects.toThrow(\"database unavailable\");\n  });\n});\n"
  },
  {
    "path": "services/mcp/tests/toolset.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\nimport { createKeeperMcpToolset } from \"../src/toolset\";\n\ndescribe(\"createKeeperMcpToolset\", () => {\n  it(\"exposes the full tool surface\", () => {\n    const toolset = createKeeperMcpToolset();\n\n    expect(Object.keys(toolset).toSorted()).toEqual([\n      \"create_event\",\n      \"delete_event\",\n      \"get_event\",\n      \"get_event_count\",\n      \"get_events\",\n      \"get_ical_feed\",\n      \"get_pending_invites\",\n      \"list_accounts\",\n      \"list_calendars\",\n      \"rsvp_event\",\n      \"update_event\",\n    ]);\n  });\n\n  it(\"each tool has a title and description\", () => {\n    const toolset = createKeeperMcpToolset();\n\n    for (const [, tool] of Object.entries(toolset)) {\n      expect(tool.title).toBeTruthy();\n      expect(tool.description).toBeTruthy();\n    }\n  });\n});\n"
  },
  {
    "path": "services/mcp/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"src/**/*\",\"tests/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "services/mcp/vitest.config.ts",
    "content": "import { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      \"@\": resolve(fileURLToPath(import.meta.url), \"../src\"),\n    },\n  },\n  test: {\n    globals: true,\n    include: [\"./tests/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "services/worker/Dockerfile",
    "content": "FROM oven/bun:1 AS base\nWORKDIR /app\n\nFROM base AS source\nCOPY . .\n\nFROM base AS prune\nRUN bun install --global turbo\nCOPY --from=source /app .\nRUN turbo prune @keeper.sh/worker --docker\n\nFROM base AS build\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile\nCOPY --from=prune /app/out/full/ .\nRUN bun run --cwd services/worker build\n\nFROM base AS runtime\nCOPY --from=prune /app/out/json/ .\nRUN bun install --frozen-lockfile --production\nCOPY --from=build /app/services/worker/dist ./services/worker/dist\nCOPY --from=prune /app/out/full/packages/otelemetry ./packages/otelemetry\nRUN bun link --cwd packages/otelemetry\nCOPY --from=source /app/services/worker/entrypoint.sh ./services/worker/entrypoint.sh\nRUN chmod +x ./services/worker/entrypoint.sh\n\nENV ENV=production\n\nENTRYPOINT [\"./services/worker/entrypoint.sh\"]\n"
  },
  {
    "path": "services/worker/entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\nexec bun services/worker/dist/index.js 2>&1 | keeper-otelemetry\n"
  },
  {
    "path": "services/worker/package.json",
    "content": "{\n  \"name\": \"@keeper.sh/worker\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"dev\": \"bun run --watch .\",\n    \"build\": \"bun scripts/build.ts\",\n    \"start\": \"bun run dist/index.js\",\n    \"types\": \"tsc --noEmit\",\n    \"lint\": \"oxlint .\"\n  },\n  \"dependencies\": {\n    \"@keeper.sh/broadcast\": \"workspace:*\",\n    \"@keeper.sh/calendar\": \"workspace:*\",\n    \"@keeper.sh/database\": \"workspace:*\",\n    \"@keeper.sh/otelemetry\": \"workspace:*\",\n    \"@keeper.sh/queue\": \"workspace:*\",\n    \"@keeper.sh/sync\": \"workspace:*\",\n    \"arkenv\": \"^0.11.0\",\n    \"bullmq\": \"^5.44.0\",\n    \"entrykit\": \"^0.1.3\",\n    \"ioredis\": \"^5.10.0\",\n    \"widelogger\": \"^0.7.0\"\n  },\n  \"devDependencies\": {\n    \"@keeper.sh/typescript-config\": \"workspace:*\",\n    \"@types/bun\": \"latest\",\n    \"typescript\": \"5.9.3\"\n  }\n}\n"
  },
  {
    "path": "services/worker/scripts/build.ts",
    "content": "import { Glob, build } from \"bun\";\n\nconst ENTRY_POINT_GLOB = new Glob(\"src/index.ts\");\n\nconst entrypoints = [...ENTRY_POINT_GLOB.scanSync()];\n\nawait build({\n  entrypoints,\n  outdir: \"./dist\",\n  root: \"src\",\n  target: \"bun\",\n  external: [\"msgpackr-extract\", \"pino-opentelemetry-transport\"],\n});\n"
  },
  {
    "path": "services/worker/src/context.ts",
    "content": "import env from \"./env\";\nimport { createDatabase } from \"@keeper.sh/database\";\nimport Redis from \"ioredis\";\nimport type { RefreshLockStore } from \"@keeper.sh/calendar\";\n\nconst database = await createDatabase(env.DATABASE_URL);\n\nconst REDIS_COMMAND_TIMEOUT_MS = 10_000;\nconst REDIS_MAX_RETRIES = 3;\n\nconst createRedisRefreshLockStore = (redisClient: Redis): RefreshLockStore => ({\n  async tryAcquire(key, ttlSeconds) {\n    const result = await redisClient.set(key, \"1\", \"EX\", ttlSeconds, \"NX\");\n    return result !== null;\n  },\n  async release(key) {\n    await redisClient.del(key);\n  },\n});\n\nconst refreshLockRedis = new Redis(env.REDIS_URL, {\n  commandTimeout: REDIS_COMMAND_TIMEOUT_MS,\n  maxRetriesPerRequest: REDIS_MAX_RETRIES,\n  lazyConnect: true,\n});\n\nconst refreshLockStore = createRedisRefreshLockStore(refreshLockRedis);\n\nconst shutdownConnections = (): void => {\n  refreshLockRedis.disconnect();\n};\n\nexport { database, refreshLockRedis, refreshLockStore, shutdownConnections };\n"
  },
  {
    "path": "services/worker/src/env.ts",
    "content": "import arkenv from \"arkenv\";\n\nconst schema = {\n  DATABASE_URL: \"string.url\",\n  ENCRYPTION_KEY: \"string?\",\n  GOOGLE_CLIENT_ID: \"string?\",\n  GOOGLE_CLIENT_SECRET: \"string?\",\n  MICROSOFT_CLIENT_ID: \"string?\",\n  MICROSOFT_CLIENT_SECRET: \"string?\",\n  REDIS_URL: \"string.url\",\n  WORKER_CONCURRENCY: \"string?\",\n} as const;\n\nexport { schema };\nexport default arkenv(schema);\n"
  },
  {
    "path": "services/worker/src/index.ts",
    "content": "import { entry } from \"entrykit\";\nimport { Worker } from \"bullmq\";\nimport { PUSH_SYNC_QUEUE_NAME } from \"@keeper.sh/queue\";\nimport type { PushSyncJobPayload, PushSyncJobResult } from \"@keeper.sh/queue\";\nimport { closeDatabase } from \"@keeper.sh/database\";\nimport { processJob } from \"./processor\";\nimport { destroy } from \"./utils/logging\";\nimport env from \"./env\";\n\nconst DEFAULT_CONCURRENCY = 25;\nconst LOCK_DURATION_MS = 360_000;\nconst STALLED_INTERVAL_MS = 30_000;\nconst MAX_STALLED_COUNT = 1;\n\nconst parseConcurrency = (value: string | undefined): number => {\n  if (!value) {\n    return DEFAULT_CONCURRENCY;\n  }\n  const parsed = Number.parseInt(value, 10);\n  if (Number.isNaN(parsed) || parsed < 1) {\n    return DEFAULT_CONCURRENCY;\n  }\n  return parsed;\n};\n\nawait entry({\n  main: async () => {\n    const { database, shutdownConnections } = await import(\"./context\");\n    const concurrency = parseConcurrency(env.WORKER_CONCURRENCY);\n\n    const { syncAggregateRuntime } = await import(\"./processor\");\n\n    const activeJobsByUser = new Map<string, string>();\n\n    const worker = new Worker<PushSyncJobPayload, PushSyncJobResult>(\n      PUSH_SYNC_QUEUE_NAME,\n      (job, token, signal) => processJob(job, token, signal),\n      {\n        connection: { url: env.REDIS_URL, maxRetriesPerRequest: null },\n        concurrency,\n        lockDuration: LOCK_DURATION_MS,\n        stalledInterval: STALLED_INTERVAL_MS,\n        maxStalledCount: MAX_STALLED_COUNT,\n        removeOnComplete: { count: 0 },\n        removeOnFail: { count: 500 },\n        metrics: { maxDataPoints: 1000 },\n      },\n    );\n\n    worker.on(\"active\", (job) => {\n      const { userId } = job.data;\n      const previousJobId = activeJobsByUser.get(userId);\n\n      if (previousJobId && previousJobId !== job.id) {\n        worker.cancelJob(previousJobId, \"superseded by newer sync\");\n      }\n\n      activeJobsByUser.set(userId, job.id ?? \"\");\n      syncAggregateRuntime.holdSyncing(userId);\n    });\n\n    worker.on(\"completed\", (job) => {\n      const currentJobId = activeJobsByUser.get(job.data.userId);\n      if (currentJobId === job.id) {\n        activeJobsByUser.delete(job.data.userId);\n        syncAggregateRuntime.releaseSyncing(job.data.userId);\n      }\n    });\n\n    worker.on(\"failed\", (job) => {\n      if (job) {\n        const currentJobId = activeJobsByUser.get(job.data.userId);\n        if (currentJobId === job.id) {\n          activeJobsByUser.delete(job.data.userId);\n          syncAggregateRuntime.releaseSyncing(job.data.userId);\n        }\n      }\n    });\n\n    return async () => {\n      await worker.close();\n      shutdownConnections();\n      closeDatabase(database);\n      await destroy();\n    };\n  },\n  name: \"worker\",\n});\n"
  },
  {
    "path": "services/worker/src/processor.ts",
    "content": "import type { Job } from \"bullmq\";\nimport type { PushSyncJobPayload, PushSyncJobResult } from \"@keeper.sh/queue\";\nimport { USER_TIMEOUT_MS } from \"@keeper.sh/queue\";\nimport type { DestinationSyncResult } from \"@keeper.sh/calendar\";\nimport { createSyncAggregateRuntime } from \"@keeper.sh/calendar\";\nimport { syncDestinationsForUser } from \"@keeper.sh/sync\";\nimport { createBroadcastService } from \"@keeper.sh/broadcast\";\nimport { syncStatusTable } from \"@keeper.sh/database/schema\";\nimport { database, refreshLockRedis, refreshLockStore } from \"./context\";\nimport { context, widelog } from \"./utils/logging\";\nimport env from \"./env\";\n\nconst resolveCount = (value: unknown): number => {\n  if (typeof value === \"number\") {\n    return value;\n  }\n  return 0;\n};\n\nconst classifySyncError = (error: unknown): string => {\n  if (typeof error === \"string\") {\n    if (error.includes(\"conflict\") || error.includes(\"409\")) {\n      return \"sync-push-conflict\";\n    }\n    if (error.includes(\"timeout\")) {\n      return \"provider-api-timeout\";\n    }\n    if (error.includes(\"rate\") || error.includes(\"429\")) {\n      return \"provider-rate-limited\";\n    }\n  }\n  return \"sync-push-failed\";\n};\n\nconst broadcastService = createBroadcastService({ redis: refreshLockRedis });\n\nconst persistSyncStatus = async (result: DestinationSyncResult, syncedAt: Date): Promise<void> => {\n  await database\n    .insert(syncStatusTable)\n    .values({\n      calendarId: result.calendarId,\n      lastSyncedAt: syncedAt,\n      localEventCount: result.localEventCount,\n      remoteEventCount: result.remoteEventCount,\n    })\n    .onConflictDoUpdate({\n      set: {\n        lastSyncedAt: syncedAt,\n        localEventCount: result.localEventCount,\n        remoteEventCount: result.remoteEventCount,\n      },\n      target: [syncStatusTable.calendarId],\n    });\n};\n\nconst syncAggregateRuntime = createSyncAggregateRuntime({\n  broadcast: (broadcastUserId, eventName, payload) => {\n    broadcastService.emit(broadcastUserId, eventName, payload);\n  },\n  persistSyncStatus,\n  redis: refreshLockRedis,\n});\n\nconst resolveSyncOutcome = (failed: number, total: number): \"success\" | \"partial\" | \"error\" => {\n  if (total === 0) {\n    return \"success\";\n  }\n  if (failed === total) {\n    return \"error\";\n  }\n  if (failed > 0) {\n    return \"partial\";\n  }\n  return \"success\";\n};\n\nconst processJob = (\n  job: Job<PushSyncJobPayload, PushSyncJobResult>,\n  _token: string | undefined,\n  signal: AbortSignal | undefined,\n): Promise<PushSyncJobResult> =>\n  context(async () => {\n    const { userId } = job.data;\n\n    widelog.set(\"operation.name\", \"push-sync\").sticky();\n    widelog.set(\"operation.type\", \"job\").sticky();\n    widelog.set(\"sync.direction\", \"push\").sticky();\n    widelog.set(\"user.id\", userId).sticky();\n    widelog.set(\"user.plan\", job.data.plan).sticky();\n    widelog.set(\"job.id\", job.id ?? \"\").sticky();\n    widelog.set(\"job.name\", job.name).sticky();\n    widelog.set(\"correlation.id\", job.data.correlationId).sticky();\n\n    widelog.errors(classifySyncError);\n\n    const deadlineMs = Date.now() + USER_TIMEOUT_MS;\n\n    let flushed = false;\n\n    try {\n      const result = await syncDestinationsForUser(userId, {\n        database,\n        redis: refreshLockRedis,\n        refreshLockStore,\n        deadlineMs,\n        abortSignal: signal,\n        encryptionKey: env.ENCRYPTION_KEY,\n        oauthConfig: {\n          googleClientId: env.GOOGLE_CLIENT_ID,\n          googleClientSecret: env.GOOGLE_CLIENT_SECRET,\n          microsoftClientId: env.MICROSOFT_CLIENT_ID,\n          microsoftClientSecret: env.MICROSOFT_CLIENT_SECRET,\n        },\n      }, {\n        onProgress: (update) => {\n          syncAggregateRuntime.onSyncProgress(update);\n          job.updateProgress({\n            calendarId: update.calendarId,\n            stage: update.stage,\n            progress: update.progress,\n          });\n        },\n        onSyncEvent: (syncEvent) => {\n          const calendarId = syncEvent[\"calendar.id\"];\n          const localCount = syncEvent[\"local_events.count\"];\n          const remoteCount = syncEvent[\"remote_events.count\"];\n\n          if (typeof calendarId !== \"string\") {\n            return;\n          }\n\n          syncAggregateRuntime.onDestinationSync({\n            userId,\n            calendarId,\n            localEventCount: resolveCount(localCount),\n            remoteEventCount: resolveCount(remoteCount),\n          });\n        },\n        onCalendarComplete: (completion) => {\n          widelog.set(\"provider.name\", completion.provider);\n          widelog.set(\"provider.account_id\", completion.accountId);\n          widelog.set(\"provider.calendar_id\", completion.calendarId);\n          widelog.set(\"sync.events_added\", completion.added);\n          widelog.set(\"sync.events_removed\", completion.removed);\n          widelog.set(\"sync.events_failed\", completion.addFailed + completion.removeFailed);\n          widelog.set(\"sync.conflicts_resolved\", completion.conflictsResolved);\n          widelog.set(\"duration_ms\", completion.durationMs);\n\n          for (const syncError of completion.errors) {\n            widelog.error(\"sync.failures\", syncError);\n          }\n\n          const unclassifiedErrors = completion.errors\n            .filter((syncError) => classifySyncError(syncError) === \"sync-push-failed\")\n            .slice(0, 3);\n\n          for (const sample of unclassifiedErrors) {\n            widelog.append(\"sync.error_samples\", sample.slice(0, 200));\n          }\n\n          const totalFailed = completion.addFailed + completion.removeFailed;\n          const totalAttempted = completion.added + completion.removed + totalFailed;\n          widelog.set(\"outcome\", resolveSyncOutcome(totalFailed, totalAttempted));\n          widelog.flush();\n          flushed = true;\n        },\n      });\n\n      return {\n        added: result.added,\n        addFailed: result.addFailed,\n        removed: result.removed,\n        removeFailed: result.removeFailed,\n        errors: result.errors,\n      };\n    } catch (error) {\n      widelog.set(\"outcome\", \"error\");\n      widelog.errorFields(error, { slug: \"push-sync-failed\" });\n      throw error;\n    } finally {\n      if (!flushed) {\n        widelog.flush();\n      }\n    }\n  });\n\nexport { processJob, syncAggregateRuntime };\n"
  },
  {
    "path": "services/worker/src/utils/logging.ts",
    "content": "import { widelogger, widelog } from \"widelogger\";\n\nconst environment = process.env.ENV ?? \"production\";\n\nconst { context, destroy } = widelogger({\n  service: \"keeper-worker\",\n  defaultEventName: \"wide_event\",\n  commitHash: process.env.COMMIT_SHA,\n  environment,\n  version: process.env.npm_package_version,\n});\n\nexport { context, destroy, widelog };\n"
  },
  {
    "path": "services/worker/tsconfig.json",
    "content": "{\n  \"extends\": \"@keeper.sh/typescript-config\",\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "turbo.json",
    "content": "{\n  \"$schema\": \"https://v2-9-0.turborepo.dev/schema.json\",\n  \"ui\": \"stream\",\n  \"globalPassThroughEnv\": [\"CI\", \"ENV\", \"OTEL_EXPORTER_OTLP_ENDPOINT\", \"OTEL_EXPORTER_OTLP_PROTOCOL\", \"OTEL_EXPORTER_OTLP_HEADERS\"],\n  \"tasks\": {\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    },\n    \"//#dev:root\": {\n      \"cache\": false,\n      \"persistent\": true\n    },\n    \"types\": {\n      \"dependsOn\": [\"^types\"],\n      \"inputs\": [\"src/**\", \"scripts/**\", \"tsconfig.json\", \"package.json\"]\n    },\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\"]\n    },\n    \"start\": {\n      \"cache\": false\n    },\n    \"migrate\": {\n      \"cache\": false\n    },\n    \"test\": {\n      \"cache\": false\n    },\n    \"test\": {\n      \"cache\": false\n    },\n    \"lint\": {\n      \"inputs\": [\"src/**\", \".oxlintrc.json\", \"../../.oxlintrc.json\"],\n      \"cache\": true\n    }\n  }\n}\n"
  }
]